클래스
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 등을 모아놓으면 
관리하기가 편하고 한눈에 보기 좋음


