관리 메뉴

hyeals study

[코틀린] 컴파일러가 생성한 메소드 본문

코틀린

[코틀린] 컴파일러가 생성한 메소드

hyeals 2020. 2. 19. 22:51

* 코틀린은 toString, equals, hashCode 등의 메소드 구현을 자동으로 생성해줄 수 있음.

 

[toString 메소드: 문자열 표현]

- 코틀린의 모든 클래스는 인스턴스의 문자열 표현을 얻을 방법을 제공함.

- 이는 toString 메소드를 오버라이드함으로써 구현할 수 있음

 

toString 메소드 구현 예시

  • 위의 코드는 어떤 고객의 정보를 얻어올 수 있는 문자열 표현임.
  • toString 메소드를 오버라이드 했음.

toString 메소드 구현 확인 
출력 결과


[equals 메소드: 객체의 동등성]

* == 연산자: 참조의 동일성을 검사하지 않고 객체의 동등성을 검사함. 따라서 == 연산은 equals를 호출하는 식으로 컴파일됨.

 

== 연산자 예시
출력 결과

☞ == 연산자는 객체의 동등성을 검사하기 때문에 false를 반환함.

 

* equals : 참조의 동일성을 검사함

equals 를 추가한 Client 클래스 예시

  • 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 오버라이드 예시

따라서 위와 같이 hashCode를 오버라이드 해줘야 함.


[데이터 클래스]

* 어떤 클래스가 데이터를 저장하는 역할만을 수행한다면 toString, equals, hashCode 메소드를 반드시 오버라이드 해야함.

☞ 코틀린에서는 data 변경자를 클래스 앞에 붙이면 필요한 메소드를 컴파일러가 자동으로 만들어 줌.

☞ data 변경자가 앞에 붙은 클래스를 데이터 클래스라 부름.

 

데이터 클래스 선언 예시

  • 위와 같이 데이터 클래스를 선언할 수 있음.
  • 위의 클래스는 인스턴스 간의 비교를 위한 equals 와
  • hashMap과 같은 해시 기반 컨테이너에서 key로 사용할 수 있는 hashCode 와
  • 클래스와 각 필드를 선언 순서대로 표시하는 문자열 표현을 만들어주는 toString 메소드를 포함함.

* data 클래스는 equals, hashCode, toString을 제외하고도 다른 메소드들을 더 정의해줌 ex) copy 메소드

* copy() 메소드: 객체의 복사본을 만들어 줌. 복사본의 프로퍼티 값을 바꾸거나 삭제해도 원본에는 영향이 전혀 없음.


[클래스 위임]

* by 키워드: 인터페이스에 대한 구현을 다른 객체에 위임 중이라는 사실을 명시해줌.

 

 

 

본 게시물은 "Kotlin IN ACTION"을 참고함.

Comments