코틀린 언어 정리 2-4
class
Any
코틀린에서 모든 class는 Any의 sub class입니다.(더 정확하게는 null이 허용되는 Any?)
Any class에는 equals와 hashCode, toString등의 멤버 함수가 있습니다. run, apply, also, let, with 등의 범위 함수도 Generic Extension function으로 가지고 있습니다.( 이 함수들에 대해서는 코틀린 정리 3. 함수형 프로그래밍에서 확인할 수 있습니다. )
생성자 호출 순서
클래스의 내부( 프로퍼티 초기화, init block )를 주생성자의 구현부로 간주한다면 C/C++ 등의 객체지향 언어와 생성자 호출 순서가 동일합니다. 하위 클래스의 생성자 구현에서 상위 클래스의 생성자를 가장 처음에 호출하고 이 후 하위 클래스의 구현부를 실행하는 순서입니다. 하지만 객체 생성시 주생성자가 존재하는 경우 반드시 호출된다는 점이 다른 언어와 다를 수 있습니다. ( 보조생성자 호출 시 주생성자를 먼저 호출하도록 구현을 강제합니다. )
다음에 나오는 예제를 실행해보면 객체 생성 시 호출되는 코드의 순서를 직접 확인해 볼 수 있습니다.
예제
이 예제 실행 결과를 기반으로 생성 과정에 실행되는 코드의 순서를 확인할 수 있습니다.
주생성자로 호출한 경우
예제 실행 결과
결과 정리
1. 상위 클래스의 프로퍼티 초기화와 init block이 선언된 순서대로 실행됨
2. 하위 클래스의 프로퍼티 초기화와 init block이 선언된 순서대로 실행됨
보조생성자로 호출한 경우
예제 실행 결과
결과 정리
1. 상위 클래스의 프로퍼티 초기화와 init block이 선언된 순서대로 실행됨
2. 상위 클래스의 보조생성자 실행됨
3. 하위 클래스의 프로퍼티 초기화와 init block이 선언된 순서대로 실행됨
4. 하위 클래스의 보조생성자 실행됨
주생성자와 다르게 보조생성자는 구현부가 있으므로 실행되는 영역이 추가되었다.( 2, 3 과정이 추가됨 ) 이 점을 제외하면 나머지 동작은 주생성자의 경우와 동일합니다.
'코틀린( Kotlin )' 카테고리의 다른 글
코틀린 2-6 data class (0) | 2020.04.05 |
---|---|
코틀린 2-5 interface (0) | 2020.04.05 |
코틀린 2-3 class - 상속 (0) | 2020.04.04 |
코틀린 2-2 class - 프로퍼티, 접근 권한 (0) | 2020.04.04 |
코틀린 2-1 class - 주생성자, 보조생성자 (0) | 2020.04.04 |