코틀린을 활용하면 더 적은 양의 코드로 클래스와 관련 있는 대부분의 작업을 수행할 수 있다. 아래는 간단한 자바 클래스를 동일하게 코틀린 클래스로 변환했을 때의 예제이다.
// Java
public class Person {
private final String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
// Kotlin
class Person(val name: String)
멋지다. 이런 유형의 클래스(코드가 없이 데이터만 저장하는 클래스)를 값 객체라 부른다.
자바의 public 가시성 변경자(visibiloty modifier)가 사라졌는데, 코틀린의 기본 가시성은 public이므로 생략가능하기 때문이다.
2.2.1 프로퍼티
코틀린은 프로퍼티(=필드+접근자)를 언어 기본 기능으로 제공하고, 프로퍼티를 선언할 때는 val이나 var를 사용한다.
val로 선언한 프로퍼티는 read only이며, var로 선언한 프로퍼티는 변경 가능하다.
class Person(
val name: String, // 읽기 전용(read onㅣy) 프로퍼티로 private 필드이며, public getter가 제공된다.
var isMarried: Boolean // 쓸 수 있는 프로퍼티로 private 필드이며, public getter&setter가 제공된다.
)
2.2.2 커스텀 접근자
직사각형 클래스인 Rectangle을 정의하면서 자신이 정사각형인지 알려주는 기능을 만들어보자. 직사각형이 정사각형인지 여부를 별도의 필드에 저장할 필요 없이, 사각형의 너비와 높이가 같은지 검사하면 정사각형 여부를 그 때 그 때 알 수 있다.
class Rentangle(val height: Int, val width: Int) {
val isSquare: Boolean
get() { // 프로퍼티 게터 선언
return height == width
}
}
isSquare 프로퍼티에는 자체 값을 저장하는 필드가 필요 없다. 이 프로퍼티에는 자체 구현을 제공하는 게터만 존재한다. 클라이언트가 프로퍼티에 접근할 때마다 게터가 프로퍼티 값을 매번 다시 계산한다.
이 경우에는 블록을 본문으로 하는 구문 대신 식을 본문으로 하는 함수, get() = height == width로 해도 된다.
2.2.3 코틀린 소스코드 구조: 디렉토리와 패키지
코틀린은 자바와 다르게 패키지 구조와 디렉토리 구조가 맞아 떨어질 필요는 없다. 하지만, 코틀린도 자바와 같이 패키지 별로 디렉토리를 구성하는 편이 좋다.
하지만, 여러 클래스를 한 파일에 넣는 것을 주저해서는 안 된다.
'Kotlin' 카테고리의 다른 글
[Kotlin in Action] 2.4 대상을 이터레이션: while과 for 루프 (0) | 2025.03.14 |
---|---|
[Kotlin in Action] 2.3 선택 표현과 처리: enum과 when (0) | 2025.03.14 |
[Kotlin in Action] 2.1 기본 요소: 함수와 변수 (0) | 2025.03.14 |
[Kotlin in Action] 1.5 코틀린 도구 사용 (0) | 2025.03.14 |
[Kotlin in Action] 1.4 코틀린의 철학 (0) | 2025.03.13 |
댓글