자바에서 데이터 클래스 하나를 만들려면 필드 선언, 생성자(Constructor) 작성, 수많은 Getter/Setter 메서드까지 작성해야 해서 코드가 끝없이 길어졌습니다.
코틀린은 이를 단 한 줄로 압축하는 주 생성자(Primary Constructor)를 도입했습니다. 클래스 이름 옆의 괄호에 val이나 var를 적어 넣기만 하면, 필드 선언과 생성자 할당, 심지어 Getter/Setter까지 내부적으로 한 번에 자동 생성됩니다.
💡 핵심 비유: 압축 프레스기 (마법의 괄호)
자바의 장황한 클래스 설계도(필드 5줄 + 생성자 5줄 + Getter/Setter 20줄)를 코틀린의 압축 프레스기인 클래스명 옆의 소괄호 ()에 넣고 누르면, 단 한 줄의 깔끔한 캡슐 코드로 압축되어 튀어나옵니다.
🗜️ 보일러플레이트 코드 압축
📊 객체지향 문법: Java vs Kotlin
비교 항목
Java
Kotlin
인스턴스 생성
Person p = new Person();
val p = Person() (new 생략)
필드 값 읽기 (Getter)
p.getName()
p.name (프로퍼티 접근)
필드 값 쓰기 (Setter)
p.setAge(20)
p.age = 20 (프로퍼티 접근)
생성 시 초기화 블록
생성자 내부
init { ... } 블록
// 주 생성자(Primary Constructor)를 이용한 초간단 클래스 선언
// 클래스 이름 옆의 괄호가 주 생성자 역할을 하며, val/var를 붙이면 해당 변수들은
// 내부 필드로 선언됨과 동시에 Getter(val의 경우)와 Setter(var의 경우)까지 자동 완성됩니다!
class Person(val name: String, var age: Int) {
// 인스턴스가 생성될 때 제일 먼저 실행되는 초기화 블록
init {
println("새로운 사람(${name})이 생성되었습니다.")
}
// 멤버 함수
fun introduce() {
println("제 이름은 $name 이고 나이는 $age 입니다.")
}
}
fun main() {
// 1. 객체 생성 시 자바의 거추장스러운 'new' 키워드를 쓰지 않습니다!
// 마치 함수를 호출하듯 아주 자연스럽게 객체를 만듭니다.
val p1 = Person("Alice", 25)
p1.introduce()
// 2. 프로퍼티 접근 방식
// 코틀린은 p1.getName(), p1.setAge() 같은 메서드를 직접 부르지 않습니다.
// 마침표(.)를 찍어 필드에 직접 접근하듯 코드를 작성하면,
// 코틀린 컴파일러가 알아서 내부적으로 Getter와 Setter를 호출해 줍니다.
println("이름 읽기: " + p1.name) // 내부적으로 p1.getName() 호출
p1.age = 26 // 내부적으로 p1.setAge(26) 호출
println("나이 증가: " + p1.age)
}