kotlin
kotlin OOB basic
slow333
2023. 2. 6. 22:24
객체 지향 개념은 java와 동일함(interface 포함)
기본 생성자를 argument 구역에서 지정
class Person(firstName: String, lastName: String){ // 기본 생성자 구간
// Person { this.firstName = firstName; ...}
init {
println("초기화 구간")
}
}
객체 생성은 new 없이 변수를 지정하여 대입 시킴
fun main(){
val me = Person("kwan", "kim")
}
값을 지정하면 매개변수 없는 초기화 시 초기값으로 사용
=> 변수로 지정 하지 않으면 객체 생성 후 불러 올수 없음
class PersonInit(firstName: String = "John", lastName: String = "Doe"){
init {
println("무명씨를 초기화 함")
println("first name = $firstName , lastName = $lastName")
}
}
class PersonInitWithVal(val firstName: String = "John", val lastName: String = "Doe"){
init {
println("무명씨를 초기화 함")
println("first name = $firstName , lastName = $lastName")
}
}
fun main(){
val noName = PersonInit(firstName = "KIM")
println(noName) //맴버 변수를 불러 올수 없음
val noNameWithVal = PersonInitWithVal()
println(noNameWithVal.firstName +", "+ noNameWithVal.lastName)
}
constructor를 통한 초기화
primary 생성자 외의 member 변수를 지정하고 초기화 가는 방법
class Person(firstName: String = "YONG", lastName: String = "KIM"){ // primary constructor
// Member variables - Properties
var age: Int? = null;
var hobby: String = "watch show"
var firstName: String? = null // 기본 초기화에 대한 변수 지정 방법
// 이렇게 해야 내부, 외부에서 변수로 지정해서 사용 가능
// Initializer Block
init {
this.firstName = firstName // 기본 초기화에 대한 변수 지정 방법
println("초기화 구간")
}
// member 변수에 대한 초기화
constructor(firstName: String, lastName: String, age: Int)
: this(firstName, lastName) { // 기존 초기 값에 대한 초기화 필요
this.age = age
}
// Member functions - Methods
fun myHobby(){
println("$firstName\'s hobby is $hobby and my age is $age")
}
}
getter, setter
기본 적으로 자동 생성됨
사용자 정의 getter, setter 생성 가능
접근자를 통해 접근 제한
fun main(){
val myCar = Car()
println( myCar.owner + "\'s is " + myCar.myBrand)
myCar.owner = "Not My car"
myCar.myBrand = "Benz"
myCar.maxSpeed = 200
println( myCar.maxSpeed)
println("My car Model is ${myCar.myModel}")
}
// 생성자를 argument 에서 지정 가능
class Car(){
lateinit var owner : String // 나중에 반드시 초기화 해주어야 함
var maxSpeed : Int = 140
get() = field
set(value) {
field = if(value > 0) value else throw java.lang.IllegalArgumentException("It should move!!")
}
var myBrand : String = "BMW"
// get() = field // 자동 생성 => 필요 없음
// set(value){
// field = value
// } // end of getter, setter
// custom getter
get(){
return field.lowercase()
}
var myModel : String = "Mi589"
private set(value){
field = value
}
init {
this.owner = "MY Car"
}
}