안녕하세요 골드입니다.
오늘은 코틀린에 있는 여러 가지 초기화 방법에 대해서 설명을 해보려고 합니다. 어떤 방법이 있는지 그리고 이 방법들 중 어떤 것이 먼저 동작하는지 알아볼 것입니다.
1. 생성자
- 기본 생성자
클래스의 인스턴스를 생성할 때, 우리는 생성자를 사용합니다. 여러 생성자를 생성하여 인스턴스의 고윳값을 원하는 방식으로 설정할 수 있습니다. 코틀린의 기본 생성자는 이렇게 생겼습니다.
코딩을 하다보면 한 번쯤은 사용한 경험이 있는 익숙한 코드입니다. 함수의 인자를 선언하듯이 Test 클래스의 생성자를 정의할 수 있습니다. 이게 코틀린의 기본 생성자입니다. 정의한 클래스 생성자 매개변수를 그냥 사용할 수도 있고, 클래스 속성의 커스텀 게터와 세터를 정의해야 한다면 일대일 대응 관계로 정의한 후 커스텀하면 됩니다. 생성자 매개변수를 바로 사용할 땐 매개변수 앞에 val 혹은 var 키워드를 붙여야 사용이 가능합니다.
- 보조 생성자
기본 생성자는 단 하나의 생성자를 정의할 수 있습니다. 그렇기 때문에 여러 생성자를 만들기 위해서는 보조 생성자를 사용하여야 합니다. 보조 생성자는 constructor 키워드를 사용합니다.
this 키워드는 보조 생성자로 생성되는 인스턴스의 기본 생성자를 의미한다. 보조 생성자는 클래스 속성을 초기화하는 대안으로 사용할 수 있다. 하지만 동시에 보조 생성자에서 클래스 속성을 정의할 수는 없다.
- 인자
생성자를 정의할 때 인자에 기본값을 부여하거나 이름을 부여할 수 있다.
Test 클래스의 기본 생성자 매개변수 _name에 "student1"이라는 기본값을 설정하였다. 또한, main 함수에서 Test 클래스의 인스턴스를 생성할 때, 기본 인자의 이름을 호출하여 값을 지정하였다. 이름을 호출하여 지정하였기 때문에 생성자에서 정의한 인자의 순서와 다르더라도 정상적으로 작동한다. 예제는 인자가 두 개밖에 없지만, 기본 인자가 많아지거나, Boolean타입의 인자가 많을 경우 지명 인자는 매우 유용한 선택이 될 수 있다.
2. 초기화 블록
두 번째는 코틀린의 초기화 블록입니다. 초기화 블록은 속성 값의 유효성을 검사할 수 있는 하나의 수단으로써 사용할 수 있습니다. 초기화 블록은 init 키워드를 사용합니다.
클래스 생성자 매개변수로 Boolean형 isStudent를 추가하였습니다. 추가한 isStudent는 init 블록 안에서 유효성 검사를 실시합니다. require() 함수 안에 Boolean형 변수 isStudent를 넣었습니다. 만약 isStudent가 true라면 프로그램이 올바르게 작동하겠지만, false라면 IllegalArgumentException이 발생하게 됩니다. Test클래스의 인스턴스를 선언할 때 false로 선언하였기 때문에 예외가 발생한 모습입니다.
3. 초기화 순서
위에 제시된 세 가지 방법과 기본 클래스 속성을 정의하는 방법까지 총 네 가지 방법이 있다. 과연 네 가지 방법들은 어떤 순서를 가지고 초기화되는지 궁금하지 않을 수 없습니다.
1. 기본 생성자
2. 클래스 내부에 속성
3. 초기화 블록
4. 보조 생성자
순서로 초기화되는 모습입니다.
여기까지 골드였습니다.
감사합니다.
참고자료 : kotlinlang.org/docs/reference/classes.html
빅 너드 랜치의 코틀린 프로그래밍, 제이펍, 조시 스킨, 데이비드 그린핼프 지음, 2019년 발행
'Programming Language > Kotlin' 카테고리의 다른 글
[Kotlin] 진수 변환. 알고리즘. (5) | 2021.08.25 |
---|---|
[Kotlin] 비동기 프로그래밍 기술 (0) | 2021.06.19 |
[Kotlin] lateinit과 lazy 차이점 (0) | 2020.12.23 |
[Kotlin] Java의 void, Kotlin의 Unit, Nothing 차이점 (0) | 2020.12.16 |
[Kotlin] var, val 그리고 const val (0) | 2020.12.16 |