[kotlin] kotlin 강의 properties1

2018. 6. 16. 01:30kotlin-이론

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