프로퍼티와 메서드 - swkim0128/PARA GitHub Wiki
- 프로퍼티는 클래스의 데이터를 나타냅니다.
- 코틀린에서는 필드와 Getter/Setter를 자동으로 관리합니다.
문법
class 클래스이름 {
var 속성명: 타입 = 초기값 // 변경 가능한 프로퍼티
val 속성명: 타입 = 초기값 // 읽기 전용 프로퍼티
}
예제
class Person {
var name: String = "Unknown" // 변경 가능
val birthYear: Int = 2000 // 읽기 전용
}
fun main() {
val person = Person()
person.name = "Alice" // 변경 가능
println(person.name) // 출력: Alice
println(person.birthYear) // 출력: 2000
// person.birthYear = 1990 // 오류: val은 변경 불가능
}
- 기본적으로 제공되는 Getter와 Setter를 사용자 정의할 수 있습니다.
문법
class 클래스이름 {
var 속성명: 타입
get() = ...
set(value) { ... }
}
예제
class Rectangle(val width: Int, val height: Int) {
val area: Int
get() = width * height // 읽기 전용 Getter
}
fun main() {
val rect = Rectangle(5, 10)
println("면적: ${rect.area}") // 출력: 면적: 50
}
class Person {
var age: Int = 0
set(value) {
if (value >= 0) field = value else println("나이는 음수가 될 수 없습니다.")
}
}
fun main() {
val person = Person()
person.age = 25 // 정상 설정
person.age = -5 // 경고 메시지 출력
}
- 프로퍼티를 나중에 초기화해야 하는 경우 lateinit을 사용할 수 있습니다.
- var에만 사용 가능하며, 기본 타입(Int, Double 등)에는 사용 불가.
예제
class Person {
lateinit var name: String
fun initializeName() {
name = "Alice"
}
}
fun main() {
val person = Person()
person.initializeName()
println(person.name) // 출력: Alice
}
- val에 사용 가능하며, 첫 사용 시점에 초기화됩니다.
예제
class Person {
val name: String by lazy {
println("초기화 중...")
"Alice"
}
}
fun main() {
val person = Person()
println(person.name) // "초기화 중..." 출력 후 "Alice" 출력
println(person.name) // "Alice"만 출력
}
- 메서드는 클래스 내부에 정의된 함수로, 객체의 동작을 정의합니다.
문법
class 클래스이름 {
fun 메서드이름(매개변수: 타입): 반환타입 {
// 메서드 본문
}
}
예제
class Calculator {
fun add(a: Int, b: Int): Int {
return a + b
}
fun multiply(a: Int, b: Int): Int = a * b // 단일 표현식
}
fun main() {
val calculator = Calculator()
println(calculator.add(3, 5)) // 출력: 8
println(calculator.multiply(4, 7)) // 출력: 28
}
- 매개변수에 기본값을 설정할 수 있습니다.
예제
class Greeting {
fun sayHello(name: String = "Guest") {
println("Hello, $name!")
}
}
fun main() {
val greeting = Greeting()
greeting.sayHello() // 출력: Hello, Guest!
greeting.sayHello("Alice") // 출력: Hello, Alice!
}
class BankAccount(val accountNumber: String) {
var balance: Double = 0.0
private set // 외부에서 수정 불가
fun deposit(amount: Double) {
if (amount > 0) {
balance += amount
println("입금 완료: $amount 원, 잔액: $balance 원")
} else {
println("유효하지 않은 금액입니다.")
}
}
fun withdraw(amount: Double) {
if (amount > 0 && amount <= balance) {
balance -= amount
println("출금 완료: $amount 원, 잔액: $balance 원")
} else {
println("잔액이 부족하거나 유효하지 않은 금액입니다.")
}
}
}
fun main() {
val account = BankAccount("123-456-789")
account.deposit(1000.0)
account.withdraw(500.0)
account.withdraw(1000.0)
}
출력:
입금 완료: 1000.0 원, 잔액: 1000.0 원 출금 완료: 500.0 원, 잔액: 500.0 원 잔액이 부족하거나 유효하지 않은 금액입니다.
개념 | 설명 |
---|---|
프로퍼티 | 클래스의 속성을 나타내며, var(변경 가능) 또는 val(읽기 전용)로 선언 |
Getter/Setter | 기본적으로 제공되며, 커스터마이징 가능 |
메서드 | 클래스 내부의 함수로, 객체의 동작을 정의 |
늦은 초기화 | lateinit을 사용하여 나중에 초기화 |
지연 초기화 | lazy를 사용하여 첫 접근 시 초기화 |
코틀린의 프로퍼티와 메서드는 간결하고 직관적으로 정의할 수 있어 객체 지향 프로그래밍(OOP)을 효율적으로 지원합니다.