(1) 프로퍼티
class Person(
val name: String, // 읽기전용 프로퍼티 > (공개)Getter
var isMarried: Boolean // 사용 가능한 프로퍼티 > (비공개)Field, (공개)Getter, (공개)Setter
)
- 프로퍼티 = 필드 + 접근자 메서드
- 클래스 : 데이터를 캡슐화(Encapsulation) 하여 한 주체 안에 가두어서 필드에 저장
- 접근자 메서드 : 자신이 사용하는 클라이언트가 데이터에 접근할 수 있도록 하는 통로 [Getter, Setter]
Kotlin은 값을 저장하기 위한 비공개 필드, 그 필드에 값을 저장하기 위한 세터, 값을 읽기 위한 게터로 이루어진 접근자 구현을 제공한다.
val person = Person("Bob", true) // new Keyword를 사용하지 않아도 생성자 호출 가능
println(person.name) // 프로퍼티 이름을 직접 사용해도 Getter 호출 가능
println(person.isMarried)
- Kotlin에서 위의 Person 클래스를 다음과 같이 사용할 수 있다.
(2) 커스텀 접근자
class Rectangle(val height: Int, val width: Int) {
val isSquare: Boolean
get() { return height == width}
}
val rectangle = Rectangle(41, 43)
println(rectangle.isSquare) // false
- 해당 클래스처럼 프로퍼티의 접근자를 직접 장성하는 것이 가능함.
- isSquare 프로퍼티는 자체 값을 저장하는 필드가 따로 필요 없음.
- 해당 접근자를 Java에서 사용하려면 isSquare 메서드를 호출하면 됨.
(3) 디렉터리와 패키지
- Kotlin 파일의 맨 앞에 package문을 넣어서 해당 파일 안의 모든 선언(클래스, 함수, 프로퍼티 등)이 해당 함수에 들어간다.
- 같은 패키지에 속해 있다면 다른 파일에 정의한 선언일지라도 사용 가능
- 다른 패키지에 속해 있다면 임포트를 통해 선언 가능
- 패키지 안에 *을 추가하면 패키지 안의 모든 선언을 임포트 할 수 있음.
package geometry.example
import geometry.shapes.createRandomRectangle
fun main(args: Array<String>) {
println(createRandomRectangle().isSquare) // 다른 패키지에 있는 함수 임포트
}
- Kotlin에서는 여러 클래스를 한 파일에 넣을 수도 있고, 파일의 이름도 마음대로 정할 수 있다.
- 디스크 상의 어느 디렉터리에 소스코드가 있어도 관계없어서, 원하는 대로 소스코드를 구성하는 것이 가능하다.
- 하지만, Java의 방식을 따르지 않았을 때는, Java 클래스를 Kotlin 클래스로 마이그레이션 할 때 문제가 생길 수 있다.
'Kotlin in Action' 카테고리의 다른 글
3. [2] 함수를 호출하기 쉽게 만들기 (0) | 2024.02.22 |
---|---|
3. [1] Kotlin에서 Collection 만들기 (0) | 2024.02.22 |
2. [4] 대상을 이터레이션: while과 for 루프 (0) | 2024.02.22 |
2. [3] 선택 표현과 처리: enum과 when (1) | 2024.02.22 |
2. [1] 기본요소: 함수와 변수 (0) | 2024.01.21 |