-
23.1.17 Kotlin Setter&Getter개발 이야기/TIL 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 } }
'개발 이야기 > TIL' 카테고리의 다른 글
백준 18870 정렬&시간초과 (0) 2023.01.24 Python 자료형 List, Tuple(튜플), dictionary(딕셔너리), set (0) 2023.01.24 Kotlin Data Class (0) 2023.01.17 23.01.17 Kotlin Class와 생성자(init, constructor) (0) 2023.01.17 23.01.14 Kotlin Class와 field (0) 2023.01.14