프로퍼티와 메서드 - swkim0128/PARA GitHub Wiki

1. 프로퍼티 (Property)

  • 프로퍼티는 클래스의 데이터를 나타냅니다.
  • 코틀린에서는 필드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

  • 기본적으로 제공되는 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
}

Setter 커스터마이징

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)

  • 프로퍼티를 나중에 초기화해야 하는 경우 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
}

지연 초기화 (lazy)

  • val에 사용 가능하며, 첫 사용 시점에 초기화됩니다.

예제

class Person {
    val name: String by lazy {
        println("초기화 중...")
        "Alice"
    }
}

fun main() {
    val person = Person()
    println(person.name) // "초기화 중..." 출력 후 "Alice" 출력
    println(person.name) // "Alice"만 출력
}

2. 메서드 (Method)

  • 메서드는 클래스 내부에 정의된 함수로, 객체의 동작을 정의합니다.

메서드 선언

문법

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!
}

3. 프로퍼티와 메서드를 활용한 클래스 예제

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)을 효율적으로 지원합니다.

⚠️ **GitHub.com Fallback** ⚠️