코틀린은 파일 이름과 클래스 이름이 달라도 된다.
하나의 파일 안에 여러 클래스를 넣는것도 가능하다.
1. 클래스 생성과 선언
class Human {
val name = "taek"
fun born() {
println("New human has been born!!")
}
}
fun main() {
val human = Human()
println("this human's name is ${human.name}")
human.born()
}
기본적인 클래스 구조이다
2. 생성자
class Human constructor (name: String){
val name = name
fun born() {
println("New human has been born!!")
}
}
fun main() {
val human = Human("taek")
println("this human's name is ${human.name}")
human.born()
}
객체를 생성할 때 이름을 건네주어 Human 객체를 생성하도록 생성자를 만드려면 constructor을 선언하고 옆에 매개변수를 선언하면 된다.
만약, 위처럼 생성자에 매개변수와 클래스 내부의 변수명이 같다면 매개변수에 한 번만 선언해줄 수도 있다
constructor은 생략 가능하다
따라서 다음과 같이 바꿀 수 있다
class Human (val name: String){
fun born() {
println("New human has been born!!")
}
}
여기서, 생성자에 변수를 초기화를 해준다
class Human (val name: String = "Anonymous"){
fun born() {
println("Human's name is ${name}")
}
}
fun main() {
val human = Human("taek")
val human2 = Human()
println("this human's name is ${human.name}")
human.born()
}
초기화를 해주면 객체를 생성할 때 빈 파라미터로 생성해도 생성이 된다.
주 생성자
위 코드를 보면 생성자로 객체를 생성할 때 변수만 생성하고 코드 블럭을 사용할 수 없다. 코드 블럭을 사용하려면 init을 쓰면 된다.
class Human (val name: String = "Anonymous"){
init {
println("created Human")
}
fun born() {
println("New human has been born!!")
}
}
부 생성자
constructor을 선언해서 부 생성자를 만들어준다.
부 생성자는 주 생성자를 물려받아야 한다.
class Human (val name: String = "Anonymous"){
constructor(name: String, age: Int) : this(name) {
println("my name is ${name}, ${age} years old")
}
init {
println("created Human")
}
fun born() {
println("New human has been born!!")
}
}
fun main() {
val human = Human("taek")
val human2 = Human()
val human3 = Human("taeki", 10)
println("this human's name is ${human.name}")
human.born()
}
실행을 해보면, 부 생성자가 생성되기 전에 init 안에 있는 코드가 먼저 실행이 될 것이다.
주의해야할 점은, 부 생성자가 생성되기 전에 주 생성자의 init 코드가 먼저 실행된다는 것을 생각해야한다.
'학습 > Kotlin' 카테고리의 다른 글
Class(상속, 오버라이딩) (0) | 2023.02.26 |
---|---|
Nullable & NonNull (0) | 2023.02.24 |
반복문 (0) | 2023.02.23 |
Array & List (0) | 2023.02.22 |
Expression VS Statement (0) | 2023.02.21 |