반응형
2.2 클래스와 프로퍼티
Java Bean 은 프로퍼티(필드)가 늘어나면 생성자의 본문에서 파라미터를 이름이 같은 필드에 대입하는 대입문의 수도 늘어난다. ex) Peron(String name)
public class Person{
private final String name;
public Person(String name){
this.name = name;
}
public String getName(){
return name;
}
}
코틀린에서는 그런 필드 대입 로직을 훨씬 더 적은 코드로 작성할 수 있다.
class Person(val name:String)
이런 유형의 클래스(코드가 없이 데이터만 저장하는 클래스)를 값 객체(value object)
라 부르며, 다양한 언어가 값 객체를 간결하게 기술할 수 있는 구문을 제공한다. (코틀린의 기본 가시성은 public 이므로 이런 경우 변경자를 생략해도 된다.)
2.2.1 프로퍼티
자바에서는 필드와 접근자를 한데 묶어 프로퍼티(property)라고 부른다.
class Person{
val name: String, // 읽기 전용 프로퍼티이며, 게터를 만들어낸다.
var isMarried: Boolean // 쓸 수 있는 프로퍼티이며, 게어, 세터를 만들어낸다.
}
Person에는 비공개 필드가 들어있고, 생성자가 그 필드를 초기화하며, 게터를 통해 그 비공개 필드에 접근한다.
자바 vs 코틀린
자바
Person person = new Person("Bob", true);
System.out.println(person.getName()); // Bob
System.out.println(person.isMarried()); // true
코틀린
val person = Person("Bob", true); // new 키워드를 사용하지 않고 생성자를 호출한다.
println(person.name) // 프로퍼티 이름을 직접 사용해도 코틀린이 자동으로 게터를 호출해준다.
println(person.isMarried)
2.2.2 커스텀 접근자
직사각형 클래스인 Rectangle을 정의하면서 자신이 정사각형인지 알려주는 기능을 만들어보자.
class Rectangle(val height: Int, val width: Int){
val isSquare: Boolean
get(){ // 프로퍼티 게터 선언
return height == width
}
}
isSquare 프로퍼티에는 자체 값을 저장하는 필드가 필요 없다. 자체 구현을 제공하는 게터만 존재한다. 클라이언트가 프로퍼티에 접근할 때마다 게터가 프로퍼티 값을 매번 다시 계산한다.
반응형
'프로그래밍 노트 > Kotlin' 카테고리의 다른 글
[Kotlin] 코틀린(Kotlin)에서 컬렉션 만들기 (0) | 2020.11.14 |
---|---|
[Kotlin] 코틀린(Kotlin) while과 for 루프 (0) | 2020.11.09 |
[Kotlin] 코틀린(Kotlin) enum과 when (0) | 2020.11.09 |
[Kotlin] 코틀린(Kotlin) 기본요소 (함수와 변수) (0) | 2020.11.07 |
코틀린(Kotlin)이란 무엇이며 왜 필요한가 (0) | 2020.11.05 |