1. 클래스
// 자바
public class Person {
private final String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
// 코틀린
class Person(val name: String)
클래스의 목적은 데이터를 캡슐화하고 캡슐화한 데이터를 다루는 코드를 한 주체 아래 가두는 것이다. 자바에서는 데이터를 필드에 저장하고 멤버 필드 가시성은 비공개이다. 때문에 자바는 생성자 본문에 getter / setter 같은 추가적인 코드를 넣어 접근자 메소드를 제공해야한다. 하지만 코틀린의 클래스는 프로퍼티 개념을 사용하기 때문에 부가적인 코드 작성이 불필요해 더 간략하게 클래스 생성이 가능하다.
2. 프로퍼티
2-1. 프로퍼티란?
프로퍼티란 필드와 접근자를 하나로 묶은 개념이다. 코틀린은 기본적으로 프로퍼티를 제공하기 때문에 필드와 접근자 메소드를 완전히 대신한다. 프로퍼티도 변수를 선언하는 방법과 동일하게 val과 var를 사용한다.
🌱 프로퍼티 val 와 var
val : 변경이 불가능한 프로퍼티 선언으로 getter만 제공한다.
var : 변경이 가능한 프로퍼티 선언으로 setter, getter 모두 제공한다.
2-2. 클래스 생성자 프로퍼티 val과 var 유무차이
// 생성자에 val이 있는 경우
class Person(val name: String)
// 생성자에 val이 없는 경우
class Person(name: String)
생성자에 val이나 var이 있는 경우 클래스의 멤버변수로 변환된다. 멤버변수이기 때문에 클래스가 생성된 이후와 외부에서 사용이 가능하다. 하지만 없는 경우는 생성 중에만 사용이 가능하고 클래스 인스턴스가 생성된 후에는 사라지기 때문에 메소드나 클래스 외부에서 참조가 불가능하다. (init에서 사용 또는 매개변수에 대한 프로퍼티를 생성해주어야된다.)
3. 커스텀 접근자
코틀린은 기본적으로 프로퍼티 선언시 getter와 setter가 생성된다. 이 둘은 커스텀이 가능하다.
class Rectangle(val height: Int, val width: Int) {
val isSquare: Boolean
get() = height == width
}
get()은 커스텀 접근자로 Rectangle().isSquare 하는 경우 get()을 통해 값을 반환해준다.
'Kotlin > Kotlin In Action' 카테고리의 다른 글
함수 정의와 호출 (컬렉션, 함수, 확장 함수, 로컬 함수와 확장) (0) | 2024.11.12 |
---|---|
Enum / when (0) | 2023.07.22 |
코틀린 기초 (0) | 2023.07.13 |
코틀린이란? (0) | 2023.07.02 |