[안드로이드 공부]/코틀린

코틀린 생성자와 위임

코코모아 2020. 7. 27. 19:00

아래는 코모스튜디오가 직접 만든 무료 앱이에요
(한 번만 봐주세요 ^^)

01

02

03

정각알림 만들기(말하는시계)

말하는 시계 (취침, 자전거) 

말하는 타이머 음성 스톱워치 

주 생성자와 부 생성자 2가지로 나뉘며,

주 생성자는 클래스 선언 시 가시성 접근자(없으면 클래스 명) 뒤에 선언한다.

  • class Car private constructor(_name: String) 
  • 자바는 부 생성자 처럼 클래스 내부에 선언 한다
    • private class Car { class(String name) }

부 생성자는 클래스 내부에서 파라미터를 달리하여 만든다.

  • class Car private constructor(_name: String) { constructor(value: Int)}

클래스 생성 시 생성자를 정의하지 않으면 컴파일러는 인자가 없는 디폴트 생성자를 만든다

 

주 생성자

class Car constructor(_name: String){
   val name : String
   init {
      name = _name
   }
}

class Car constructor(_name: String){
   val name :_name
}
주 생성자는 생성자 파라미터를 지정하고, 그 생성자 파라미터에 의해 초기화되는 프로퍼티를 정의한다.
  • 생성자 파라미터(_name)는 init{} 구문 또는, 내부 파라미터에 할당할 경우에만 사용할 수 있다.
  • 단, (_name: String) 부분을 (val _name: String)로 선언할 경우에는 클래스 내부 프로퍼티로 선언되어, 클래스 내부에서 사용할 수 있다.

부 생성자

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

open class Vehicle { 
   constructor(name: String){
      println("Vehicle: ${name}")
   }
}

class Car : Vehicle {
   constructor(name: String) : super(name){
      println("Car: ${name}")
      //Vehicle 먼저 생성된 후 car 생성됨.
      //Vehicle: name
      //Car: name
   }
}
  • : super() 를 통해 상위 클래스(Vehicle) 의 생성자에게 생성을 위임한다.
  • 상속을 받으면 상위 클래스의 생성자가 먼저 생성되고, 하위 클래스의 생성자가 생성된다.
fun main(){
   Car("달구지")
   //_name2: 달구지, 6
   //_name1: 달구지
}

class Car  {
   constructor(_name1: String) : this(_name1, 6){
       println("_name: ${_name1}")
   }
   constructor(_name2: String, number : Int){
       println("_name: ${_name2}, ${number}")
   }
}
  • this()를 사용하여 같은 클래스의 다른 생성자에게 위임할 수 있다.
  • 위임받은 생성자를 먼저 생성 한 뒤에 위임한 생성자가 생성된다.
모든 게시물은 코모스튜디오의 소유이며, 무단 복제 수정은 절대 불가입니다.
퍼가실 경우 댓글과 블로그 주소를 남기고 해당 게시물에 출처를 명확히 밝히세요.