[코틀린 문법] 생성자
fun main() {
var bts = Singer("정국", 1997)
var txt = Singer("연준", 1999)
var aespa = Singer("윈터", 2001)
var nmixx = Singer("설윤", 2004)
// 안녕하세요, 1997년생 정국입니다.
// 안녕하세요, 1999년생 연준입니다.
// 안녕하세요, 2001년생 윈터입니다.
// 안녕하세요, 2004년생 설윤입니다.
}
// constructor(생성자) //
// 새 인스턴스를 만들기 위해 호출하는 특수한 함수
// 인스턴스 속성 초기화 && 인스턴스 생성시 구문 수행
// () 안에 클래스가 가지는 속성 == 생성자
// init //
// 파라미터/반환형 없는 함수
// 생성자 -> 인스턴스 생성시 호출됨
// this //
// 인스턴스 자신의 속성이나 함수를 호출하기 위해 클래스 내에서 사용되는 키워드
class Singer (var name: String, val birthYear: Int) {
init {
println("안녕하세요, ${this.birthYear}년생 ${this.name}입니다.")
}
}
// 수정
fun main() {
var bts = Singer("정국", 1997)
// 보조생성자 -> 은우와 지효도 자동으로 1997년생 됨
var astro = Singer("은우")
var twice = Singer("지효")
// 안녕하세요, 1997년생 정국입니다.
// 안녕하세요, 1997년생 은우입니다.
// 보조생성자가 사용되었습니다.
// 안녕하세요, 1997년생 지효입니다.
// 보조생성자가 사용되었습니다.
}
// secondary constructor(보조 생성자) //
// 필요에 따라 추가적으로 선언
// 기본 생성자와 다른 형태의 생성자 제공
// -> 인스턴스 생성시 편의 제공 또는 추가적인 구문 수행
// (기본 생성자는 클래스를 만들 때 기본으로 선언)
class Singer (var name: String, val birthYear: Int) {
init {
println("안녕하세요, ${this.birthYear}년생 ${this.name}입니다.")
}
constructor(name: String) : this(name, 1997) {
// 보조 생성자를 만들 때는 반드시 기본 생성자를 통해 속성을 초기화 해줘야 함
// : this 쓴 후 기본 생성자가 필요로 하는 파라미터를 ()안에 넣어주면 됨
println("보조생성자가 사용되었습니다.")
}
}
// 생성자 보충설명 (1)
fun main() {
val human = Human("shinyelee")
human.eatingCake()
// yummy!
println("My name is ${human.name}")
// My name is shinyelee
}
// 생성자가 없는 클래스의 예시
class Human1 {}
// 생성자가 있는 클래스의 예시
class Human2() {} // 인자 0개
class Human3(age : Int) {} // 인자 1개
class Human4(fistName : String, lastName : String) {} // 인자 2개 이상
// 클래스 선언부에서 클래스명 옆에 괄호를 붙여 생성자를 만듦
// -> 기본 생성자
class Human(name : String) {
val name : String = name
// Property is explicitly assigned to parameter name, so it can be declared directly in constructor
fun eatingCake() {
println("yummy!")
}
}
// 생성자 보충설명 (2)
fun main() {
// 위와 동일
}
// class Human constructor(val name : String) {}
// constructor 생략 가능
class Human(val name : String) {
// 프로퍼티를 생성자에서 직접 선언 -> 코드 깔끔해짐
fun eatingCake() {
println("yummy!")
}
}
// 생성자 보충설명 (3)
fun main() {
val human = Human("shinyelee")
// ()안에 name 안 넣어도 컴파일 오류가 나지 않음
// -> 기본값을 anonymous로 설정했기 때문
val who = Human()
human.eatingCake()
// yummy!
println("My name is ${who.name}")
// My name is anonymous
}
// 디폴트값 부여함
class Human(val name : String = "anonymous") {
fun eatingCake() {
println("yummy!")
}
}
// 생성자 보충설명 (4)
fun main() {
val human = Human("shinyelee")
// 인스턴스 생성할 때 함께 실행됨
val who = Human()
// 인스턴스 생성할 때 함께 실행됨
human.eatingCake()
// yummy!
println("My name is ${who.name}")
// My name is anonymous
}
class Human(val name : String = "anonymous") {
init {
println("인스턴스 생성할 때 함께 실행됨")
}
fun eatingCake() {
println("yummy!")
}
}
// 생성자 보충설명 (5)
fun main() {
// 주생성자 -> 부생성자 순으로 실행
// init 먼저 실행 후 -> constructor 블럭 실행
val myBro = Human("min", 27)
// 인스턴스 생성할 때 함께 실행됨
// My name is min, and 27 years old
}
// 주생성자
class Human(val name : String = "anonymous") {
// 부생성자 -> this로 주생성자의 위임을 받아야 함
constructor(name : String, age : Int) : this(name) {
println("My name is ${name}, and ${age} years old")
}
// init -> 주생성자의 일부
init {
println("인스턴스 생성할 때 함께 실행됨")
}
fun eatingCake() {
println("yummy!")
}
}
참고
반응형
'개발(Android) > kotlin syntax' 카테고리의 다른 글
[Kotlin syntax] Inheritance (0) | 2022.05.23 |
---|---|
[Android Studio/Kotlin syntax] Coroutine (0) | 2022.04.12 |
[Kotlin syntax] Bitwise Operation (0) | 2022.04.11 |
[Kotlin syntax] Constants, lateinit, by lazy (0) | 2022.04.10 |
[Kotlin syntax] Collection Functions (2) (0) | 2022.04.09 |