본문 바로가기
Kotlin Language/Kotlin 기본 문법

Kotlin(코틀린) - 생성자 클래스(Class)

by Classic Master 2023. 11. 30.
728x90

 

Class 란?

  • 코틀린에서의 클래스는 객체지향 프로그래밍(OOP) 개념을 기반으로 하는 구조를 가지고 있으며, 객체를 만들 수 있도록 합니다.
  • 코틀린의 클래스는 자바와 마찬가지로 기본 가시성이 public 입니다. 따라서 아래와 같이 선언해도 컴파일러는 위와 동일한 클래스 선언이라고 판단합니다.
class MyClass {
 }
 public class MyClass {
 } // 위와 아래는 같은 클래스입니다.
  • 코틀린에서 클래스를 정의하는 기본 문법입니다.

클래스의 프로퍼티 선언

class myClass {
  var name: String = ""
  var age: Int = 0
  }
  • 클래스 내부에는 프로퍼티를 선언할 수 있습니다. 프로퍼티는 클래스의 상태나 데이터를 나타냅니다
  • 코틀린의 프로퍼티는 기본적으로 선언과 동시에 초기화를 해줘야 합니다. 그렇지 않은 경우 컴파일 시 애러가 발생합니다.

 

open class

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

 

This

class Example(val value: Int) {
    fun printValue() = println("Value is ${this.value}")
}
fun main() {
    val obj = Example(42)
    with(obj) { this.printValue() } // 출력 결과: Value is 42
}
  • 코틀린은 기본적으로 클래스의 멤버들이 final이기 때문에, 상속을 허용하려면 클래스나 메서드 앞에 open 키워드를 붙여야 합니다.
  • 클래스 내부에서는 this 키워드를 통해 현재 인스턴스를 참조할 수 있습니다.

 

Data Class

코틀린은 데이터를 담고 있는 클래스를 정의하기 위한 data 키워드를 별도로 제공한다. data 키워드를 사용하여 클래스를 정의하면, toString() , hashCode() , equals() , copy() , componentN() 메소드를 자동으로 만들어준다.

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

fun main() {
    val person1 = Person("Alice", 25)
    val person2 = Person("Alice", 25)

    println(person1) // toString()이 자동 생성되어 출력 결과: Person(name=Alice, age=25)
    println(person1.hashCode()) // hashCode()이 자동 생성되어 출력 결과: 해시 코드 값
    println(person1 == person2) // equals()이 자동 생성되어 출력 결과: true

    val person3 = person1.copy(age = 30)
    println(person3) // copy()가 자동 생성되어 출력 결과: Person(name=Alice, age=30)

    val (name, age) = person1 // componentN()이 자동 생성되어 구조 분해 선언 가능
    println("Name: $name, Age: $age")
}

 

Enum class

열거형(enumeration)을 정의하는 특별한 형태의 클래스입니다. 열거형은 서로 연관된 상수의 집합을 정의하고, 해당 상수 값들을 일종의 고유한 타입으로 다룰 수 있게 해줍니다. 코틀린에서 enum class를 사용하여 열거형을 정의할 수 있습니다.

enum class Weekday(name: String) {
    MON("Monday"),
    TUE("Tuesday"),
    WED("Wednesday"),
    THU("Thursday"),
    FRI("Friday"),
    SAT("Saturday"),
    SUN("Sunday")
}

 

중첩 클래스

코틀린에서 중첩 클래스는 클래스 내부에 선언된 클래스를 나타냅니다. 중첩 클래스는 외부 클래스의 인스턴스에 대한 참조를 갖지 않으며, 내부 클래스에서 외부 클래스의 멤버에 접근하려면 외부 클래스의 인스턴스가 필요합니다. 중첩 클래스는 다음과 같은 형태를 가질 수 있습니다.

class OuterClass {
    // 외부 클래스의 멤버
    class NestedClass {
        // 중첩 클래스의 멤버
    }
}
class Outer {
    val outer: String = "Outer"
    inner class Inner {
        fun print() {
            println(outer) // Outer
        }
    }
  • Inner 키워드로 선언된 클래스로, 외부 클래스의 인스턴스에 대한 참조를 갖습니다. 따라서 내부 클래스는 외부 클래스의 멤버에 직접 접근할 수 있습니다
  • Non-Static 내부 클래스로 사용하기 위해서는반드시 Inner 키워드를 붙여야한다.
728x90
반응형