Kotlin
[ 코틀린 ] 클래스 인스턴스 속성 초기화 1 : 클래스 인스턴스 기본 생성자, 보조 생성자, 기본인자, 지명인자
찬스님
2021. 5. 4. 19:47
300x250
클래스 인스턴스를 생성, 초기화
-> 클래스 인스턴스 생성 : 클래스에 정의된 속성을 구조로 갖는 객체를 메모리에 할당하는 것.
-> 실제로 해당 객체를 사용할 수 있게 하려면 각 속성에 초기값을 지정해야 함.
-> 이것을 " 초기화 " 라고 함.
기본 생성자
Person 클래스 헤더에 기본 생성자 정의
임시 변수를 사용해서 Person 클래스의 각 속성에 초깃값을 제공
class Person (_name : String, _age : Int, _sex : Char){
var name = _name
get() = field.capitalize()
private set(value){
field = value.trim()
}
val age = _age
private val sex = _sex
}
....
fun main ( args : Array<String> ) {
val person = Person ("Eddy", 20, 'M')
}
기본 생성자에 속성 정의 하기
class Person (_name : String, var age : Int, private val sex : Char){
}
보조 생성자
- 헤더가 아닌 몸체에 정의
- 매개변수를 다르게 조합하여 여러 개 정의 할 수있음
class Person (_name : String, var age : Int, private val sex : Char){
var name = _name
get() = field.capitalize()
private set(value){
field = value.trim()
}
constructor( name : String ) : this( name, age = 20, sex ='M' )
// this : 보조 생성자를 사용해서 생성되는 Person 인스턴스의 또 다른 생성자인 기본 생성자를 뜻함
...
}
...
fun main ( args : Array<String> ) {
val person = Person ("Eddy") // 보조 생성자 호출
}
보조 생성자 생성, 호출
class Person (_name : String, var age : Int, private val sex : Char){
var name = _name
get() = field.capitalize()
private set(value){
field = value.trim()
}
constructor( name : String ) : this( name, age = 20, sex ='M' ){
if( name.toLowerCase() == "eddy") sex = 'F'
}
// this : 보조 생성자를 사용해서 생성되는 Person 인스턴스의 또 다른 생성자인 기본 생성자를 뜻함
...
}
보조 생성자에 속성 초기화 코드 추가
기본인자
- 생성자를 정의할 때, 인자의 기본값 지정
- 기본, 보조 생성자 모두 가능
class Person (_name : String, var age : Int = 20, private val sex : Char){
var name = _name
get() = field.capitalize()
private set(value){
field = value.trim()
}
constructor( name : String ) : this( name, sex ='M' ){
if( name.toLowerCase() == "eddy") sex = 'F'
}
// this : 보조 생성자를 사용해서 생성되는 Person 인스턴스의 또 다른 생성자인 기본 생성자를 뜻함
...
}
기본 생성자에서 속성 age : Int 의 기본 값을 지정
// age 값으로 30이 전달되면서 기본 생성자 호출
Person ("Eddy", 30, 'M')
// age 인자를 생략, 기본 생성자가 호출되면서 age 속성은 기본값인 20
Person ("Eddy", 'M')
// 보조 생성자가 호출되며 이 생성자에서 다시 age 인자를 생략하고
// 기본 생성자를 호출하므로 age 속성은 기본 값인 20
Person ("Eddy")
여러 방법으로 생성자 호출
지명인자
- 기본 인자 많아짐 -> 생성자 호출 방법 많아짐 -> 혼란스러울 수도 있음.
- 함수처럼 생성자에도 지명 ( named argument ) 사용할 수 있음.
// 첫번째 방법 : 매개 변수 이름과 값 모두 지정
val person = Person ( name = "Eddy", age = 20, sex = 'M' )
// 두번째 방법 : 값만 지정
val person = Person ( "Eddy", 20, 'M' )
- 매개변수가 정의된 순서와 다르게 인자를 전달할 수 있다.
- 가독성이 좋아진다. 특히나 Boolean형 매개변수 isXXXX, isYYYY가 여러 개 있는 경우
반응형