주 생성자 (Primary Constructor)
클래스 이름 옆에 괄호로 둘러싸인 코드
클래스를 통해서 객체를 만드는데 필요한 재료들을 적어 준다
반드시 한개만 존재할 수 있다
constructor 키워드를 생략할 수 있다
// 주 생성자 -> 풀버젼 (생략이 없는 버젼)
class User1 constructor(name : String) { // 클래스 네이밍은 대문자로 시작한다
val userName : String // 클래스 속성 (프로퍼티, property)은 init블럭에서 초기화 한다
init { // 클래스가 생성될때 (클래스를 통해서 객체를 만들때) 호출된다
println(name)
userName = name
}
}
// 주 생성자 -> constructor를 생략하는 방법
class User2 (name : String) {
val userName : String = name
}
부 생성자 (Secondary Constructor)
constructor 키워드를 생략할 수 없다
주 생성자에는 객체를 만들기 위한 필수 조건이 있다면, 부 생성자에는 객체를 만들기 위한 옵션 조건이 있다
부 생성자에는 주 생성자에서 필요한 조건을 포함하고 있어야 한다 (파라미터를 포함하고 있어야한다)
부 생성자는 주 생성자에게 생성을 위임해야한다
class User3 constructor (name : String) {
var age : Int = 0
val name : String
val nickName : String = ""
init {
println("init")
this.name = name
this.age = 100
}
// 부 생성자는 클래스명 우측에 올수 없다 -> 클래스의 본문에 있어야한다
constructor(name : String, age : Int) : this(name) { // this = User6
println("second")
this.age = age
}
// 부생성자는 여러개 존재할 수 있다
constructor(name : String, age : Int, nickName : String) : this(name) {
this.age = age
this.nickName = nickName
}
}
init 블록 (initial, 초기) (블록 => {})
클래스 - 붕어빵 틀
붕어빵 틀을 사용하는 방법 -> 생성자 사용법
결과물이 가지고 있는 것 -> 속성(프로퍼티) (ex. 책 제목)
클래스 기능 추가 -> 클래스안에 함수(기능)을 추가한다
class FootballPlayer constructor(uniform : String, ball : String) {
val uniform : String
val ball : String
init {
this.uniform = uniform
this.ball = ball
}
fun kick() {
// println("공을 찼다")
// 반복, 예외처리, 흐름제어
if (ball == "축구공") println("축구공을 찼다")
else println("공이 없다")
}
fun pass() {
println("패스를 했다")
}
}
val footballPlayer = FootballPlayer("빨간색 유니폼", "축구공")
//println(footballPlayer.uniform)
footballPlayer.kick()
val footballPlayer2 = FootballPlayer("파란색 유니폼", "축구공")
footballPlayer2.pass()