Java to Kotlin (9) - 클래스를 다루는 방법

이동명·2024년 6월 17일
0

kotlin

목록 보기
9/19
post-thumbnail

클래스와 프로퍼티

다음은 자바코드를 코틀린으로 작성해봅시다. name은 불변값이기 때문에 setter가 없습니다.

아래처럼 작성할 수 있습니다.

  • 프로퍼티 = 필드 + getter + setter
  • 필드만 만들면 getter, setter를 자동으로 만들어준다

생략 가능한 키워드를 생략하면 다음과 같이 간단하게 작성 가능 합니다. 약간 생김새가 자바의 record랑 비슷해보인다. 하지만 자바 record 는 기본적으로 다 불변필드이긴 하다.

  • constructor는 생략할 수 있다
  • 클래스의 필드 선언과 생성자를 동시에 선언할 수 있다.

getter와 setter는 속성으로 접근해서 바로 사용할 수 있다. 이는 자바로 만들어진 클래스를 들고와도 똑같이 사용이 가능하다.

생성자와 init

아래는 자바 생성자에서 검증을 하는 방법이다. 코틀린에서 생성자에서 검증을 한다면 어떻게 해야 할까 ?

코틀린에서는 init 블록을 사용하면 된다.

최초로 태어나는 아기는 무조건 1살이니, 생성자를 하나 더 만들자 라는 요구사항이 생겨서 생성자를 하나 더 만들어야 한다면, 아래처럼 작성할 수 있다.

  • 주생성자는 반드시 존재해야 한다. 단, 주생성자에 파라미터가
    하나도 없다면 생략 가능

  • 부생성자는 최종적으로 주생성자를 this로 호출해야 한다.

  • body를 가질 있다.

부생성자보다는 default parameter를 권장한다.가독성이 더 좋다.

커스텀 getter, setter

성인인지 확인하는 기능을 추가해보겠습니다.

아래는 자바에서 작성한 코드 입니다.

아래는 코틀린으로 작성한 코드 입니다.

커스텀 getter를 사용하면 아래처럼도 작성이 가능합니다.

backing field

name을 get할때 무조건 대문자로 바꾸어 줘 봅시다. 아래처럼 커스텀 getter를 작성 할 수 있습니다.

  • 주생성자에서 받은 name을 불변 프로퍼티 name에 바로 대입
  • name에 대한 Custom getter를 만들때 field를 사용

왜 field를 사용하는 것일까?

  • name은 name에 대한 getter를 호출 하니까 다시 get을 부른다.
  • getter안에는 다시 name이 있다.
  • 무한루프 발생

따라서 field 는 무한루프를 막기 위한 예약어, 자기 자신을 가리킨다.

아래처럼 작성도 가능하다.

setter도 마찬가지이다. 하지만 Setter 자체를 지양하기 때문에
custom setter는 잘 안쓸 것 같다.


다음 포스팅은 상속에 대해 공부하며 포스팅해보겠습니다.

profile
Web Developer

0개의 댓글