2장. 코틀린 기초 - 클래스와 프로퍼티
2022. 3. 18. 13:22
/* 자바에서 선언한 Person class */
public class Person {
private final String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
/* 코틀린에서 선언한 Person class */
class Person(val name:String)
- 위와 같이 코드 없이 데이터만 저장하는 클래스를 값 객체(value object)라고 한다.
- 자바 → 코틀린으로 변환 시, public 가시성 변경자(visibility modifier)가 사라졌다.
2.2.1 프로퍼티
- In JAVA...
- 클래스 : 데이터를 캡슐화하고, 캡슐화한 데이터를 다루는 코드를 한 주체 아래 가두는 것이 목적
- 데이터를 필드(field)에 저장하며, 멤버 필드의 가시성은 보통 비공개
- 클래스는 자신을 사용하는 클라이언트가 그 데이터에 접근하는 통로로 쓸 수 있는 접근자 메소드(accessor method) 제공
- 필드를 읽기 위한 게터(getter)와 필드를 변경하게 허용할 경우 세터(setter)
- 프로퍼티(property) : 필드와 접근자를 아우르는 개념
- 코틀린은 프로퍼티를 언어 기본 기능으로 제공. 자바의 필드와 접근자 메소드를 완전히 대신함.
- val로 선언한 프로퍼티 : 읽기 전용, val로 선언한 프로퍼티 : 변경 가능
class Person(
val name: String, //읽기 전용 프로퍼티, (비공개)필드와 필드를 읽는 단순한 (공개)개터 생성
val isMarried: Boolean //쓸 수 있는 프로퍼티, (비공개)필드, (공개)게터, (공개)세터 생성
)
- 코틀린에서 프로퍼티 선언하는 방식 : 프로퍼티와 관련 있는 접근자를 선언
- 읽기 전용 프로퍼티는 게터만 선언, 변경 가능 프로퍼티는 게터와 세터 모두 선언
- 비공개 필드(값을 저장하기 위함), 세터(그 필드에 값 저장용), 게터(필드 값 읽는용)로 이루어진 간단한 디폴트 접근자 구현 제공
- 자바에서 Person 클래스 사용하는 방법
>>> Person person = new Person("Bob", true);
>>> System.out.println(person.getName());
Bob
>>> System.out.println(person.isMarried());
true
→ 코틀린의 name 이라는 프로퍼티를 자바에서는 getName이라는 이름으로 볼 수 있음.
→ 이름이 is로 시작하는 게터에는 get이 붙지 않고 원래 이름 그대로 사용, 세터에는 is를 set으로 바꿔 사용
→ 따라서 자바에서 isMarried 프로퍼티의 게터를 호출하려면 isMarried()를 사용해야 함
- 코틀린에서 Person 클래스 사용하는 방법
>>> val person = Person("Bob", true) //new 키워드를 사용하지 않고 생성자 호출함
>>> println(person.name) //프로퍼티 이름을 직접 사용해도 코틀린이 자동으로 게터 호출
Bob
>>> println(person.isMarried) //프로퍼티 이름을 직접 사용해도 코틀린이 자동으로 게터 호출
true
→ 게터를 호출하는 대신 프로퍼티를 직접 사용. 로직은 간결하지만 코드가 더 간결해짐.
→ 자바에서는 person.setMarried(false)로 이혼했다는 사실을 기록하는 반면, 코틀린에서는 person.isMarried=false 로 기록
- 프로퍼티를 뒷받침하는 필드 (backing field)
- 대부분의 프로퍼티에서 그 프로퍼티의 값을 저장하기 위한 필드
- 원한다면 프로퍼티의 값을 그때그때 계산할 수도 있음
- 자바에서 Person 클래스 사용하는 방법
>>> Person person = new Person("Bob", true);
>>> System.out.println(person.getName());
Bob
>>> System.out.println(person.isMarried());
true
→ 코틀린의 name 이라는 프로퍼티를 자바에서는 getName이라는 이름으로 볼 수 있음.
→ 이름이 is로 시작하는 게터에는 get이 붙지 않고 원래 이름 그대로 사용, 세터에는 is를 set으로 바꿔 사용
→ 따라서 자바에서 isMarried 프로퍼티의 게터를 호출하려면 isMarried()를 사용해야 함
- 코틀린에서 Person 클래스 사용하는 방법
>>> val person = Person("Bob", true) //new 키워드를 사용하지 않고 생성자 호출함
>>> println(person.name) //프로퍼티 이름을 직접 사용해도 코틀린이 자동으로 게터 호출
Bob
>>> println(person.isMarried) //프로퍼티 이름을 직접 사용해도 코틀린이 자동으로 게터 호출
true
→ 게터를 호출하는 대신 프로퍼티를 직접 사용. 로직은 간결하지만 코드가 더 간결해짐.
→ 자바에서는 person.setMarried(false)로 이혼했다는 사실을 기록하는 반면, 코틀린에서는 person.isMarried=false 로 기록
- 프로퍼티를 뒷받침하는 필드 (backing field)
- 대부분의 프로퍼티에서 그 프로퍼티의 값을 저장하기 위한 필드
- 원한다면 프로퍼티의 값을 그때그때 계산할 수도 있음
'Dev Books > <Kotlin in Action>' 카테고리의 다른 글
2장. 코틀린 기초 - 기본 요소 (함수 변수) (0) | 2021.11.03 |
---|---|
1장. 코틀린이란 무엇이며, 왜 필요한가? (0) | 2021.10.05 |
<Kotlin in Action> - 코틀린 컴파일러 개발자가 직접 알려주는 코틀린 언어 핵심 (0) | 2021.10.05 |