3장 코틀린 객체지향 프로그래밍
3.1 const와 val 차이 이해하기
- 컴파일 타임 상수에는 const를 사용한다. val 키워드는 자바의 final 키워드처럼 변수에 한번 할당되면 변경이 불가능함을 나타내지만 할당 자체는 런타임에 일어난다.
- 컴파일 타임 상수는 문자열 또는 기본 타입이여야한다.
- 컴파일 타임 상수는 객체나 동반 객체 선언, 모든 함수 바깥쪽에서 할당되어야한다.
3.3 Data Class 정의하기
- Data class 주 생성자에 포함되지 않은 속성은 코틀린이 data class 생성시 만들어주는 toString, hashCode, equals 등의 메서드에 포함되지 않는다.
3.6 나중 초기화를 위해 lateinit 사용하기
- 생성자에 속성 초기화를 위한 정보가 충분하지 않은데 해당 속성을 널 비허용 속성으로 만들고 싶은 경우, lateinit 변경자를 사용한다.
- 이건 의존성 주입의 경우 유용하지만 일반적으로 가능하다면 지연 평가 같은 대안을 먼저 고려하자.
그럼 널 비허용 속성인데 생성자에 속성 초기화를 위한 정보가 부족한 경우가 뭐가 있지?
- 모든 객체가 생성될 때까지 의존성 주입이 일어나지 않는 경우 발생 → 대표적으로 필드주입
@Autowired
- 유닛 테스트의 설정 메소드 안에서 발생
→ 이럴 경우를 대비해 lateinit
을 사용한다,
- lateinit을 사용하면 해당 변수가 처음 사용되기 전에 초기화 할 수 있고, 사용전에 초기화를 실패하면 예외를 던진다.