공부 내용


2장. 프로퍼티와 초기화

2-1 프로퍼티의 접근

자바의 필드

class Person {
	// 멤버 필드
	private String name;
	private int age;

	// 생성자
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	// 게터와 세터
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	// ...
}

코틀린의 프로퍼티

// 주 생성자에 3개의 매개변수 정의
class User(_id: Int, _name: String, _age: Int) {
	// 프로퍼티들
	val id: Int = _id  // 불변(읽기 전용)
	var name: String = _name  // 변경 가능
	var age: Int = _age  // 변경 가능
}

// 좀 더 간략화
class User(val id: Int, var name: String, var age: Int)

fun main() {
	val user = User(1, "Sean", 30)
	
	// 게터에 의한 값 획득
	val name = user.name
	
	// 세터에 의한 값 지정
	user.age = 41

	println("name: $name, ${user.age}")
}

기본 게터와 세터 직접 설정

var 프로퍼티이름[: 프로퍼티자료형] [= 프로퍼티 초기화]
	[get() { 게터 본문 }]
	[set(value) { 세터 본문 }]

val 프로퍼티이름[: 프로퍼티자료형] [= 프로퍼티 초기화]
	[get() { 게터 본문 }]
class User(_id: Int, _name: String, _age: Int) {
	// 프로퍼티
	val id: Int = _id
		get() = field

	var name: String = _name
		get() = field
		set(value) {
			field = value
		}

	var age: Int = _age
		get() = field
		set(value) {
			field = value
		}
}

fun main() {
	val user1 = User(1, "Kildong", 30)
	// user1.id = 2  // error -> val 프로퍼티는 값 변경 불가
	user1.age = 35  // 세터 동작
	println("user1.age = ${user1.age}")  // 게터 동작
}

게터/세터에서 사용하는 특수 변수