2018. 6. 16. 01:30ㆍkotlin-이론
kotlin 강의 properties
properties
코틀린 클래스는 프로퍼티를 가질 수 있음
사용은 자바의 필드를 사용하듯이 하면 됨
프로퍼티 문법
- 전체문법
var <propertyName>[:<PropertyType>][=<property_initializer>][<getter>][<setter>]
[] -생략가능
예제
fun main(args: Array
) { var obj = Address() println(obj.name) } class Address{ val name = "Kotlin" }
이코드를 바이트코드로 바꿔 자바 파일로 바꿔 보면
public final class TestKt { public static final void main(@NotNull String[] args) { Intrinsics.checkParameterIsNotNull(args, "args"); Address obj = new Address(); String var2 = obj.getName(); System.out.println(var2); } }
main 코드가 위와 같이 변했다. kotlin에서는 분명히 obj.name으로 단순히 접근해주었지만 java 코드에서는 .getName이라는 함수를 호출한 후 println으로 값을 출력해주는 것을 볼 수 있다.
-> 결국 함수적인 요소와 데이터 필드와 멤버 데이터 요소들을 언어 레벨에서 중간제 역활을 해준다. 호출 결과가 함수이기 때문에 호출 할 때 데이터를 조작할 수 있다.
fun main(args: Array
) { var obj = Address() println(obj.name) } class Address{ var name = "Kotlin" get() { return field } set(value) { field = value } }
위의 코드를 보면 main에서는 단순히 자바와 같이 field를 호출 해준 것 같지만 사실은 get으로 호출하고 set으로 데이터를 입력해주고 있었던 것이다.
public final class Address { @NotNull private String name = "Kotlin"; @NotNull public final String getName() { return this.name; } public final void setName(@NotNull String value) { Intrinsics.checkParameterIsNotNull(value, "value"); this.name = value; } }
Address 클래스 코드를 java클래스 코드로 바꾼 것이다. 우리가 임의로 get, set을 만들어 주니 java코드에서도 getName, setName등이 생성되었다.
그러므로 이둘은 사실상 같은 것이다.
class Address{ var name = "Kotlin" get() { return field } set(value) { field = value } } class Address2{ var name ="kotlin" }
하지만 위 클래스는 get과 set을 통해서 데이터 값을 변화 시킬 수 있다는 차이점이 있다.
custom accessors (getter, setter)
일반적이게 클래스 내부에 일반함수 처럼 사용할 수 있으며
getter
val isEmpty
get() = this.size == 0
호출할 때 isEmpty가 호출되는 것 처럼 보이지만 사실은 밑의 코드가 실행된다.
setter
set(value) {
//////
}
일반적으로 value를 많이 사용하며 어떠한 값이 와도 상관 없다.
'kotlin-이론' 카테고리의 다른 글
[kotlin]Data Class (0) | 2018.06.18 |
---|---|
[kotlin] kotlin 강의 properties2 (0) | 2018.06.17 |
[kotlin] Class 상속 (0) | 2018.06.15 |
[kotlin]Class (0) | 2018.06.15 |
[kotlin]Return and Jumps (break 문, continue 문, return 문) (0) | 2018.06.15 |