개발 이야기/TIL
23.1.17 Kotlin Setter&Getter
혁진
2023. 1. 17. 17:41
이어서 코틀린의 setter와 getter이다.
14일 글을 조금 더 자세히 적어보고자 한다(수정본..에 가깝다)
Getter & Setter 기본형
1. Kotlin에서는 JAVA와 다르게 primal constructor에 대해 Getter와 Setter을 컴파일 시 생성해준다.
public class Button {
private int width;
private int height;
//constructor
public Button(int width, int height){
this.width = width
this.height = height
}
//getter
public int getWidth(){
return width;
}
public int getHeight(){
return height;
}
public void setWidth(int value){
if(value>50){
width = value
}
else{
width=50
}
}
public void setHeight(int value){
if(value>50){
height = value
}
else{
width=50
}
}
}
을 우리는 코틀린에서는..!
//kotlin
class Button(var width:Int, var height:Int) {
}
만 쓰면 끝이다.
이때 primal constructor를 선언하는 방법에 따라 조금씩 차이가 있다. 이는 아래와 같다.
| primal constructor 선언방식 | Getter 생성 여부 | Setter 생성 여부 |
| class Button(width:Int) | X | X |
| class Button(var width:Int) | O | O |
| class Button(val width:Int) | O | X |
Getter&Setter 호출
//kotlin
class Button(var width:Int, var height:Int) {
}
//get
var btn = Button(20,30)
btn.width
btn.height
//set
btn.width = 100
property를 그냥 호출하고, 값을 대입하면 된다.
Kotlin Class를 JAVA에서 호출하기
코틀린으로 class를 정의하고 자바에서 호출할 때는 다음과 같이 호출하면 된다.
//kotlin
class Button(var width:Int, var isHeight:Int) {
}
//JAVA
public static void main(String[] args){
Button btn = new Person(20, 24);
person.getWidth();
person.isHeight();
person.setWidth(100);
person.setHeight(12);
}
반대로 JAVA class를 코틀린에서 호출할때는 코틀린에서 호출하던 대로 사용하면 된다.
-Getter와 Setter 커스텀하기
자동으로 만들어주기는 하지만, 내가 직접 만들고 싶으면 아래와 같이 작성하면 된다.
이 때 feild를 사용한다. field란 무엇일까? 이는 Backing feld라 한다.
Backing filed란 프로퍼티의 값을 저장하기 위한 필드이다. 이를 만일 사용하지 않고 set을 하려고 한다면, 무한재귀에 빠지는 경우가 발생한다!
따라서 아래와 같이 꼭 field 키워드를 사용하도록 하자.
//kotlin
class Button {
var width: Int = 0
get() = field
// width 이후에 작성한 set이기에 set(value)에 해당하는 field는 width에 관한 값이 됨
set(value){
field = value
}
var height: Int = 0
get() = field
// height이후에 작성한 set이기에 set(value)에 해당하는 field는 height에 관한 값이 됨
set(value){
if(value>50){
field = value
}
else{
field=50
}
}