Kotlin : 클래스

정종욱·2023년 7월 4일
0

Kotlin

목록 보기
9/16
post-thumbnail

클래스와 프로퍼티

자바는 Getter 와 Setter 를 사용하기 위해 Lombok 을 이용하거나 직접 정의해주어야 한다.

코틀린은 자바와 다르게 필드만 만들면 Getter 와 Setter 를 자동으로 만들어주며 필드가 val 인 경우는 setter 를 만들어주지 않는다.

class Person(val name: String, var age: Int)

또한, 생성자에서 프로퍼티를 만들 수 있기에 위와 같이 간단하게 정의할 수 있다.

생성자와 init

class Person(val name: String, var age: Int) {
	init {
    	if (age<0) {
        	throw IllegalArgumentException()
        }
    }
    
    constructor(name: String): this(name, 1)
}

생성자가 생성되는 시점에 init 이 동작한다.
새로운 생성자는 constructor 를 이용하여 추가하면 된다.

class Person(val name: String, var age: Int) 의 괄호가 primary 생성자이며 이는 필수로 존재해야한다. 하지만 필드가 없는경우는 생략가능하다.
위 constructor 는 부 생성자로써 최종적으로 주 생성자를 this() 로 호출해야한다.

👏 TIP : 코틀린에서는 부생성자보다는 default parameter 를 권장한다.
          Converting 같은 경우도 부생성자를 사용할 수 있지만, 정적 팩토리 메소드를 더 추천한다.

Custom Getter Setter

Getter

val isAdult: Boolean
	get() = this.age>= 20

Getter 를 사용한 경우 반환하고싶은 내용을 get() 에 넣어주면 된다.

👏 TIP : 객체의 속성이라면 custom getter 를 사용하고 그렇지 않다면 함수를 사용한다.
// 1
val name: String = name
	get() = field.uppercase()

// 2
val uppercaseName: String
	get() = this.name.uppercase()

name 을 불렀을 때 대문자로 만들고싶다면 name 이 아닌 1번과 같이 field 로 정의하여야한다. 이를 backing field 라고 부르며 만약 name 으로 정의하면 계속 참조를 하게되어 무한루프에 걸리는 문제가 발생한다.
2번과 같이 this.name 을 사용하고 다른 프로퍼티를 정의할 수 있다.

Setter

var name = name
	set(value) {
    	feild = value.uppercase()
    }

custom setter 는 위와 같이 정의할 수 있다

👏 TIP : Setter 를 지양하기 때문에 custom setter 를 사용할 일이 거의 없다.
    

0개의 댓글

관련 채용 정보