코틀린

코틀린 setter, getter

태인킴 2021. 2. 20. 14:00
반응형


java에서는 캡슐화(encapsulate)를 위해서 getter, setter를 사용합니다. 

 

 

1. 기본 Getter, Setter

public class Test {

    public static void main(String[] args) {
        Test2 test2 = new Test2();
        test2.test1 = 2;          // setter
        int ab = test2.test1 + 1;  // getter
        System.out.println(ab);
    }
}

class Test2 {
    int test1 = 1;
}

java는 위 소스와 같이 Test2라는 클래스의 test1 변수의 직접적인 접근을 제어하고자,  setter, getter를 정의하여 사용합니다. 아래와 같이 정의하여 사용합니다.

 

public class Test {

    public static void main(String[] args) {
        Test2 test2 = new Test2();
        test2.setTest1(2);              // setter
        int ab = test2.getTest1() + 1;  // getter
        System.out.println(ab);
    }
}

class Test2 {
    private int test1 = 1;

    public int getTest1() {
        return test1;
    }

    public void setTest1(int test1) {
        this.test1 = test1;
    }
}

하지만 kotlin은 이런 getter, setter를 더 쉽게 정의 할수 있습니다.

 

fun main() {
    val test2 = Test2(1, 2)
    test2.test1 = 2            // setter
    test2.test2 = 2            // setter, 컴파일 에러
    test2.test1                // getter
    test2.test2                // getter
}

class Test2(
        var test1: Int,
        val test2: Int) {
}

코틀린은 기본적으로 public 접근 지시자 입니다.

Test2 클래스를 보시면, test1필드는 var로 선언하여, getter, setter 모든 역할을 한다고 볼수 있습니다.

하지만, test2필드는 val로 선언하여, getter의 역할만 할수 있습니다. 따라서 setter는 만들어지지 않습니다.

정말 직관적 입니다.

 

 

2. 커스텀 Getter, Setter

fun main() {
    val test2 = Test2()
    test2.test1 = 1
    println("test1 : ${test2.test1}, test2: ${test2.test2} ")
    // 출력 결과
    // test1 : 2, test2: 2 
}

class Test2 {

    var test1: Int = 0
        set(value) {
            field = value + 1
        }

    val test2: Int = 1
        get() {
            return field + 1
        }
}

위 소스 코드를 보시면 Test2 클래스의 커스텀 Getter, Setter를 만들수 있습니다. 

var [변수명]: [변수 타입]

[get(), set() { }]

위와 같은 형태로 커스텀 시킬수 있습니다. field라는 필드 변수가 해당 변수를 의미 합니다.  

반응형

'코틀린' 카테고리의 다른 글

Kotlin Unit Test 하는법  (0) 2020.12.10
코틀린 apply, with, let, also, run  (0) 2020.12.08
Kotlin 코루틴(Coroutine)  (0) 2020.12.07
코틀린 SAM 변환이 왜 되지 않을까?  (0) 2020.11.25
코틀린 6편 (lateinit)  (0) 2020.11.13