hyeals study
[코틀린] 컴파일러가 생성한 메소드 본문
* 코틀린은 toString, equals, hashCode 등의 메소드 구현을 자동으로 생성해줄 수 있음.
[toString 메소드: 문자열 표현]
- 코틀린의 모든 클래스는 인스턴스의 문자열 표현을 얻을 방법을 제공함.
- 이는 toString 메소드를 오버라이드함으로써 구현할 수 있음
- 위의 코드는 어떤 고객의 정보를 얻어올 수 있는 문자열 표현임.
- toString 메소드를 오버라이드 했음.
[equals 메소드: 객체의 동등성]
* == 연산자: 참조의 동일성을 검사하지 않고 객체의 동등성을 검사함. 따라서 == 연산은 equals를 호출하는 식으로 컴파일됨.
☞ == 연산자는 객체의 동등성을 검사하기 때문에 false를 반환함.
* equals : 참조의 동일성을 검사함
- Any: 코틀린에서 모든 클래스의 최상위 클래스
- if 식: other가 Client인지 검사하는 부분
- is: 자바의 instanceof와 같음. 어떤 값의 타입을 검사함.
- return name == other.name && postalCode == other.postalCode: 두 객체의 프로퍼티 값이 같은지 검사하는 부분
☞ 위와 같이 equals를 오버라이드 했기 때문에 프로퍼티의 값이 모두 같은 두 Client 객체는 동등함을 나타냄.
다만, Client 객체로 좀 더 복잡한 작업을 하면 오류가 날 수 있음. 이는 hashCode의 정의가 빠져서 그런 것임.
[hashCode 메소드: 해시 컨테이너]
* JVM 언어에서는 "equals()가 true를 반환하는 두 객체는 반드시 같은 hashCode()를 반환해야 한다"라는 제약이 있기 때문에 equals를 오버라이드할 때 반드시 hashCode도 함께 오버라이드해야 함.
따라서 위와 같이 hashCode를 오버라이드 해줘야 함.
[데이터 클래스]
* 어떤 클래스가 데이터를 저장하는 역할만을 수행한다면 toString, equals, hashCode 메소드를 반드시 오버라이드 해야함.
☞ 코틀린에서는 data 변경자를 클래스 앞에 붙이면 필요한 메소드를 컴파일러가 자동으로 만들어 줌.
☞ data 변경자가 앞에 붙은 클래스를 데이터 클래스라 부름.
- 위와 같이 데이터 클래스를 선언할 수 있음.
- 위의 클래스는 인스턴스 간의 비교를 위한 equals 와
- hashMap과 같은 해시 기반 컨테이너에서 key로 사용할 수 있는 hashCode 와
- 클래스와 각 필드를 선언 순서대로 표시하는 문자열 표현을 만들어주는 toString 메소드를 포함함.
* data 클래스는 equals, hashCode, toString을 제외하고도 다른 메소드들을 더 정의해줌 ex) copy 메소드
* copy() 메소드: 객체의 복사본을 만들어 줌. 복사본의 프로퍼티 값을 바꾸거나 삭제해도 원본에는 영향이 전혀 없음.
[클래스 위임]
* by 키워드: 인터페이스에 대한 구현을 다른 객체에 위임 중이라는 사실을 명시해줌.
본 게시물은 "Kotlin IN ACTION"을 참고함.
'코틀린' 카테고리의 다른 글
[코틀린] 람다식 & 멤버 참조 (0) | 2020.02.21 |
---|---|
[코틀린] object 키워드 (0) | 2020.02.19 |
[코틀린] 특이한 생성자와 프로퍼티를 갖는 클래스 (0) | 2020.02.19 |
[코틀린] 클래스 계층 정의 (0) | 2020.02.18 |
[코틀린] 로컬 함수 (0) | 2020.02.07 |