관리 메뉴

hyeals study

[코틀린] 특이한 생성자와 프로퍼티를 갖는 클래스 본문

코틀린

[코틀린] 특이한 생성자와 프로퍼티를 갖는 클래스

hyeals 2020. 2. 19. 09:00
  • 코틀린은 primary 생성자와 secondary 생성자를 구분함.
  • 또한 코틀린에서는 초기화 블록을 통해 초기화 로직을 추가할 수 있음.

[주(primary)생성자 초기화]

 

간단한 클래스 선언 예시

  • 보통 클래스의 모든 선언은 중괄호({})에 들어가 있음
  • 하지만 위의 클래스 선언 예시를 보면 중괄호가 없음. 대신에 val 선언만 존재함. → 이처럼 클래스 이름 뒤에 오는 괄호로 둘러싸인 코드주 생성자 라고 함.

<주 생성자 목적>

  1. 생성자 파라미터를 지정
  2. 지정한 생성자 파라미터에 의해 초기화 되는 프로퍼티를 정의

따라서 위의 코드를 풀어쓰면 아래와 작은 코드로 이해할 수 있음

간단한 클래스 선언 예시(2)

  • constructor 키워드: 주 생성자나 부 생성자 정의를 시작할 때 사용
  • init 키워드: 초기화 블록을 시작함.
  • _nickname: 생성자 파라미터임. 밑줄(_)은 프로퍼티와 생성자 파라미터를 구분해줌. → 자바의 this.nickname = nickname 처럼 생성자 파라미터와 프로퍼티의 이름을 같게하고 프로퍼티에 this를 써도됨.

* 초기화 블록: 클래스의 객체가 만들어질 때(=인스턴스화될 때) 실행될 초기화 코드가 들어가 있음.

초기화 블록은 주 생성자와 함께 사용됨. → 주 생성자는 제한적이기 때문에 별도의 코드를 포함할 수 없어서 초기화 블록이 필요함.

☞ 필요에 따라 클래스 안에 여러 초기화 블록을 선언할 수 있음

 

* 프로퍼티를 초기화하는 식이나 초기화 블록 안에서만 주 생성자의 파라미터를 참조할 수 있음.

 

* 클래스의 인스턴스를 만들고 싶으면 new 키워드없이 그냥 생성자를 직접 호출하면 됨.

인스턴스 생성 예시

* 클래스에 기반 클래스가 있으면 주 생성자에서 기반클래스 생성자를 호출해야 함.

☞ 기반 클래스를 초기화 하기 위해서 기반 클래스 이름 뒤에 괄호를 치고 생성자 인자를 넘김.

 

기반 클래스 초기화 예시

 

* 클래스를 정의할 때 별도로 생성자를 정의하지 않으면 컴파일러가 자동으로 디폴트 생성자를 만들어줌.

디폴트 생성자: 아무 일도 하지 않고 인자가 없음.

 

* 어떤 클래스를 클래스 외부에서 인스턴스화하지 못하게 막고 싶을 때 모든 생성자를 private로 만들면 됨.


[부(secondary) 생성자 초기화]

 

<부 생성자가 필요한 경우>

프레임워크 클래스를 확장해야할 때 여러 방법으로 인스턴스를 초기화할 수 있게 다양한 생성자를 지원해야 하는 경우

 

* 부 생성자는 constructor 키워드로 시작함

* 클래스에 주 생성자가 없다면 모든 부 생성자는 반드시 상위 클래스를 초기화하거나 다른 생성자에게 생성을 위임해야 함.

 

 

 

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

'코틀린' 카테고리의 다른 글

[코틀린] object 키워드  (0) 2020.02.19
[코틀린] 컴파일러가 생성한 메소드  (0) 2020.02.19
[코틀린] 클래스 계층 정의  (0) 2020.02.18
[코틀린] 로컬 함수  (0) 2020.02.07
[코틀린] 컬렉션 처리  (0) 2020.02.06
Comments