• 코틀린의 변수 프로퍼티(Property)와 일반 변수의 차이점

    2022. 2. 22.

    by. 하루플스토리

    반응형

    안녕하세요, 하루플입니다.

     

    코틀린의 변수를 프로퍼티라고 부릅니다. 그런데 일반적인 자바 변수를 프로퍼티라고 부르지는 않습니다.

    단순한 변수 선언에도 자바와 코틀린에서 차이가 있다는겁니다.

     

    자바에서는 변수를 Int num = 5 라고 선언했다면 코틀린에서는 변수를 var num : Int = 5 라고 선언합니다.

    코틀린에서 var은 변수 값을 나중에 변경할 수 있을때 사용하고 val 은 변수를 변경할 필요가 없을때 사용합니다.

    이 var과 val로 선언하는 변수들이 프로퍼티 입니다.

     

    코틀린에서 변수를 선언하면 내장된 getter와 setter함수가 자동으로 생성됩니다. 그래서 일반적인 '변수'와는 달리 '프로퍼티'라는 다른 명칭을 사용합니다.

     

    만약 아래와 같이 변수가 작성되어 있다고 하면

    var name: String = "haruple"
    val age: Int = 26

    위 코드와 아래 코드는 완전히 동일한 코드입니다.

    var name: String = "haruple"
        get() = field
        set(value) {field = value}
       
    val age: Int = 26
        get() = field

    여기서 var과 val 의 get, set 함수 차이점을 찾으셨나요?

    var로 선언한 변수는 값을 변경할 수 있으므로 get, set 함수가 모두 추가되며 val로 선언된 변수는 값 변경이 불가능 하므로 get 함수만 추가된 것을 알 수 있습니다.

     

    이 get, set 함수는 개발자가 원하는 대로 당연히 커스텀 할 수 있고, 생략할 수도 있습니다.

    field는 get, set 함수에서 사용할 수 있는 코틀린 자체 예약어 입니다. 제가 적은 변수라고 오해하면 안됩니다!

    get, set 내부에서는 field를 통해 프로퍼티가 가지는 값에 접근합니다.

     

    프로퍼티가 get, set 함수를 자동으로 만들어냄으로써 얻는 장점이 뭐가 있을까요?

    다음 자바 코드를 보면 쉽게 이해할 수 있습니다.

    public class User {
        private String name;
        private Int age;
        
        public String getName() {
            return name;
        }
        
        public void setName(String name){
            this.name = name;
        }
        
        public Int getAge(){
            return age;
        }
        
        public void setAge(Int age){
            this.age = age;
        }
    
    }

    자바로 get, set을 그냥 사용할 때 일반적으로 데이터를 가져오고 변경하는 작업 외에는 특별한 작업이 없습니다. 그런데 변수 갯수에 맞게 get, set함수를 전부 생성해야하고 코드 길이도 길어지고 유지보수하기 힘들어집니다.

     

    그래서 프로퍼티라는 개념이 나왔고 get, set함수를 자동으로 생성해주니 개발자가 따로 관리할 필요 없이 일반적인 변수를 사용하듯이 사용하면 되니 아주 편해졌습니다. 당연히 get, set에서 커스텀이 필요한 경우는 따로 선언해주면 됩니다.

     

    코틀린에서 변수의 값을 변경하게 되었을 때는 개발자는 단순히 변수만을 사용하면 되지만 자동으로 내장된 get, set을 통해 처리됩니다.

     

     

    반응형

    댓글