1. data class

 

 Kotlin에서 data 클래스는 데이터를 보유하기 위한 목적에 중점을 둔 클래스입니다. 주로 데이터를 담는 컨테이너 역할을 하며, 이러한 클래스에서 일반적으로 필요한 몇 가지 함수들을 자동으로 생성해줍니다.

data 키워드를 사용하여 선언된 클래스는 다음과 같은 기능들이 자동으로 제공됩니다

 - equals()/hashCode(): 인스턴스 간의 비교를 위해 equals()와 hashCode() 함수가 자동으로 오버라이드됩니다.

 - toString(): 객체의 문자열 표현을 반환하는 toString() 함수가 자동으로 오버라이드됩니다.

 - copy(): 객체 복사를 위한 copy() 함수가 제공됩니다.

 - Component functions: data class의 프로퍼티에 대해 componentN 함수가 생성되어, destructuring declarations(비구조화 선언)을 지원합니다.

 

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

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

    // toString()
    println(user1.toString()) // 결과: User(name=John, age=25)

    // equals()/hashCode()
    println(user1 == user2) // 결과: true
    println(user1.equals(user2)) // 결과: true

    // copy()
    val user3 = user1.copy()
    println(user3) // 결과: User(name=John, age=25)

	// destructuring declaration
	val (name, age) = user1
	println("$name is $age years old.")  // 결과: John is 25 years old.
}

 

 

 

 

 

2. enum class

 

 - kotlin 웹에서 간단히 실습할 수 있는 사이트

https://www.w3schools.com/KOTLIN/trykotlin.php?filename=demo_class_function2 

 

W3Schools online KOTLIN editor

The W3Schools online code editor allows you to edit code and view the result in your browser

www.w3schools.com

 

 Enum은 "enumeration"의 줄임말로, 명확하게 정의된 값들의 집합을 표현하는데 사용되는 특별한 클래스 타입입니다. Enum 클래스는 고정된 수의 상수를 정의하고, 이들 각각은 Enum 클래스의 인스턴스입니다. Kotlin에서 enum class를 선언하는 방법은 다음과 같습니다.

enum class Direction {
    NORTH,
    SOUTH,
    EAST,
    WEST
}

enum class Planet(val mass: Double, val radius: Double) {
    MERCURY(3.303e+23, 2.4397e6),
    VENUS(4.869e+24, 6.0518e6),
    EARTH(5.976e+24, 6.37814e6);

	fun surfaceGravity(): Double {
		val G = 6.67300E-11
		return G * mass / (radius * radius)
	}

	fun surfaceWeight(otherMass: Double): Double {
		return otherMass * surfaceGravity()
	}
}


fun main() {
    println(Direction.WEST.name) // Output: WEST
    println(Direction.WEST.ordinal) // Output: 3
    
	for (dir in Direction.values()) { 
	    println(dir)
	}
	println(Direction.valueOf("SOUTH")) // Output: SOUTH
    

	println(Planet.EARTH.name) // Output: EARTH
	println(Planet.EARTH.ordinal) // Output: 2
    
	println(Planet.EARTH.mass) // Output: 5.976E24
	println(Planet.EARTH.radius) // Output: 6.37814e6 == 6378140.0
    
	println(Planet.EARTH.surfaceGravity()) // Output: some calculated value -> 9.802652743337129
	println(Planet.EARTH.surfaceWeight(Planet.VENUS.mass)) // Output: some calculated value -> 4.772911620730848E25
    
    
}

 

 - 결과 데이터

WEST
3
NORTH
SOUTH
EAST
WEST
SOUTH
EARTH
2
5.976E24
6378140.0
9.802652743337129
4.772911620730848E25

 

 

 

 

 

3. Object Class / Singleton

 

 object 키워드를 사용하여 싱글턴 패턴을 쉽게 구현할 수 있습니다. 싱글턴 패턴은 해당 클래스의 인스턴스가 하나만 생성되도록 보장하는 디자인 패턴입니다.

 

object Singleton {
    init {
        println("Singleton class invoked.")
    }

    var variableName="I am Var of Singleton"

    fun printVarName(){
        println(variableName)
    }
}

fun main(args: Array<String>) {
    Singleton.printVarName() // 출력 : I am Var of Singleton
}

 

 

 

 

 

 

 

4. Companion Object

 

Kotlin은 static 멤버를 직접 지원하지 않기 때문에, companion object 를 사용하여 같은 기능을 구현합니다.

 

class MyClass {
   companion object Factory { 
      fun create(): MyClass = MyClass()
   } 
   
   fun checkCreatedClass(){
      println("Class created")
   }
   
   init{
      println("Init block invoked")
   }
 
 }

 fun main(args:Array<String>){
     val instance=MyClass.create()
     instance.checkCreatedClass() //출력 : Init block invoked \n Class created
  }

 

 

 

 

5. Sealed Class

 

Sealed class 는 값이 한정된 set 타입을 나타낼 때 사용합니다. sealed class 자체는 추상클래스이며, 다른 클래스가 상속받아 확장할 수 있는 것으로 선언해야 합니다.

 

sealed class Expr
data class Const(val number: Double) : Expr()
data class Sum(val e1: Expr, val e2: Expr) : Expr()
object NotANumber : Expr()

fun eval(expr: Expr): Double = when (expr) {
    is Const -> expr.number
    is

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+ Recent posts