클래스 정의 - swkim0128/PARA GitHub Wiki

코틀린의 클래스는 객체 지향 프로그래밍(OOP)의 기본 단위로, 속성(properties)과 동작(methods)을 포함합니다. 코틀린의 클래스는 간결하고 효율적으로 정의할 수 있습니다.

1. 기본 클래스 정의

문법

class 클래스이름 {
    // 속성과 메서드 정의
}

예제

class Person {
    var name: String = ""
    var age: Int = 0

    fun introduce() {
        println("안녕하세요! 제 이름은 $name이고, 나이는 $age살입니다.")
    }
}

2. 클래스의 객체 생성

  • new 키워드는 사용하지 않고, **클래스이름()**으로 객체를 생성합니다.
fun main() {
    val person = Person()
    person.name = "John"
    person.age = 30
    person.introduce() // 출력: 안녕하세요! 제 이름은 John이고, 나이는 30살입니다.
}

3. 생성자(Constructor)

기본 생성자 (Primary Constructor)

  • 클래스 이름 옆에 괄호를 사용하여 기본 생성자를 정의합니다.

문법

class 클래스이름(val 속성1: 타입, var 속성2: 타입) {
    // 클래스 본문
}

예제

class Person(val name: String, var age: Int)

fun main() {
    val person = Person("Alice", 25)
    println("이름: ${person.name}, 나이: ${person.age}")
}

보조 생성자 (Secondary Constructor)

  • constructor 키워드를 사용하여 보조 생성자를 정의합니다.
  • 보조 생성자는 주 생성자를 호출해야 합니다.

문법

class 클래스이름(val 속성1: 타입, var 속성2: 타입) {
    constructor(매개변수: 타입) : this(기본값1, 기본값2) {
        // 보조 생성자 본문
    }
}

예제

class Person(val name: String, var age: Int) {
    constructor(name: String) : this(name, 0) {
        println("보조 생성자가 호출되었습니다.")
    }
}

fun main() {
    val person = Person("Bob")
    println("이름: ${person.name}, 나이: ${person.age}")
}

4. 속성과 메서드

속성 정의

  • var: 변경 가능한 속성
  • val: 읽기 전용 속성
class Person {
    var name: String = "Unknown" // 변경 가능
    val birthYear: Int = 2000    // 읽기 전용
}

메서드 정의

  • 메서드는 클래스 내부에 정의된 함수입니다.
class Calculator {
    fun add(a: Int, b: Int): Int {
        return a + b
    }
}

fun main() {
    val calc = Calculator()
    println(calc.add(5, 3)) // 출력: 8
}

5. 초기화 블록 (init)

  • 클래스 초기화 시 실행되는 블록입니다.
  • 기본 생성자의 매개변수로 초기화 작업을 수행할 수 있습니다.

예제

class Person(val name: String, val age: Int) {
    init {
        println("초기화 블록 실행: 이름은 $name, 나이는 $age")
    }
}

fun main() {
    val person = Person("Alice", 25)
}

출력:

초기화 블록 실행: 이름은 Alice, 나이는 25

6. 접근 제한자

  • 코틀린의 클래스와 속성은 다음과 같은 접근 제한자를 가집니다:
  • public(기본값): 모든 곳에서 접근 가능.
  • private: 클래스 내부에서만 접근 가능.
  • protected: 클래스와 하위 클래스에서 접근 가능.
  • internal: 같은 모듈 내에서만 접근 가능.

예제

class Person {
    private var secret: String = "비밀" // 클래스 내부에서만 접근 가능
    var name: String = "Unknown"       // 공개 접근
}

fun main() {
    val person = Person()
    person.name = "John"
    // person.secret = "새 비밀" // 오류: private 속성은 접근 불가
}

7. 데이터 클래스 (Data Class)

  • 데이터를 저장하기 위해 설계된 클래스로, 코틀린은 equals, hashCode, toString 메서드를 자동으로 생성합니다.
  • data 키워드를 사용하여 정의합니다.

예제

data class User(val name: String, val age: Int)

fun main() {
    val user1 = User("Alice", 25)
    val user2 = User("Alice", 25)

    println(user1) // 출력: User(name=Alice, age=25)
    println(user1 == user2) // 출력: true (내용 비교)
}

8. 상속

  • 코틀린의 클래스는 기본적으로 final이며, 상속하려면 open 키워드를 사용해야 합니다.
  • 상속 시에는 :를 사용합니다.

예제

open class Animal(val name: String) {
    open fun sound() {
        println("동물이 소리를 냅니다.")
    }
}

class Dog(name: String) : Animal(name) {
    override fun sound() {
        println("멍멍!")
    }
}

fun main() {
    val dog = Dog("Buddy")
    dog.sound() // 출력: 멍멍!
}

요약

기능 설명
클래스 정의 class 키워드 사용
생성자 기본 생성자와 보조 생성자 지원
초기화 블록 init 블록에서 초기화 작업 수행
접근 제한자 public, private, protected, internal
데이터 클래스 data 키워드로 간결한 데이터 클래스 생성
상속 open 키워드로 상속 가능

코틀린의 클래스는 자바보다 간결하며, 데이터 클래스, 초기화 블록, 기본 생성자 등을 통해 코드의 효율성과 가독성을 크게 높여줍니다.

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