클래스
Java Class
public class Person {
private final String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
Java
복사
Kotlin Class
class Person(val name: String)
Kotlin
복사
•
엄청 간결하다! (생성자와 프로퍼티 정의가 한번에 진행됨)
•
접근 제어자(public/private) 없음 → 기본 제어자가 public 이라 생략 가능
프로퍼티
// 이미 Getter와 Setter를 만들어 줌
class Person(
val name: String,
val isMarried: Boolean
)
Kotlin
복사
(예외) Boolean property의 차이점
•
Java: getter(isMarried()), setter(setMarried())
•
Kotlin: getter/setter(isMarried)
// java
public static void main(String[] args) {
Person person = new Person("abc", true);
System.out.println(person.getName());
System.out.println(person.isMarried());
}
// kotlin
fun main(args: Array<String>) {
val person = Person("abc", true)
println(person.name)
println(person.isMarried)
}
Kotlin
복사
커스텀 접근자(Custom getter/setter)
class Rectangle(val height, val width: Int) {
val isSquare: Boolean
get() {
return height == width
}
}
Kotlin
복사
•
함수(fun isSquare(): Boolean)로 정의할 수 있으나, 이 값은 클래스의 프로퍼티(특성)을 나타내주는 값이므로 커스텀 getter를 통한 프로퍼티 값을 드러내는 것이 조금 더 자연스럽다.
디렉토리와 패키지
package com.zero
import java.util.*
class Rectangle(val height: Int, val width: Int) {
val isSquare: Boolean
get() {
return height == width
}
}
fun createRandomRectangle(): Rectangle {
val random = Random()
return Rectangle(random.nextInt(), random.nextInt())
}
Kotlin
복사
•
패키지와 import 문장은 Java와 거의 유사함
최상위 함수의 import
import com.zero.createRandomRectangle
fun main(args: Array<String>) {
println(createRandomRectangle().isSquare)
}
Kotlin
복사
•
최상위 함수는 위처럼 함수명으로 import 가능
패키지 구조와 클래스 선언
package com.zero.one
class ZeroOne(val base: String)
class ZeroSecond(val base: String)
Kotlin
복사
•
자바와 다르게 코틀린은 디렉토리 구조와 패키지 경로가 다를 수 있음
•
파일 하나에 여러 클래스와 함수, 최상위 변수 모드 선언 가능
◦
코틀린에서 매우 편리하고 자주 활용되는 부분
◦
크기가 작은 클래스나 성격이 비슷한 클래스, enum 등을 모아놓으면
관리하기가 편하고 한눈에 보기 좋음