[kotlin] 코틀린 디자인 패턴 개요

코틀린은 실용적이고 간결한 문법으로 인기를 얻는 프로그래밍 언어입니다. 코틀린은 자바 가상 머신 (JVM) 상에서 동작하기 때문에 자바와의 상호운용성도 우수합니다. 이번 블로그에서는 코틀린에서 흔히 사용되는 디자인 패턴 중 몇 가지를 살펴볼 것입니다.

  1. 팩토리 메서드 패턴
  2. 빌더 패턴
  3. 싱글턴 패턴
  4. 스트래티지 패턴

팩토리 메서드 패턴

팩토리 메서드 패턴은 객체 생성을 캡슐화하는 패턴으로, 객체 생성 로직을 서브클래스로 분리함으로써 유연성을 확보합니다. 코틀린에서는 interfaceabstract class의 활용을 통해 팩토리 메서드를 구현할 수 있습니다.

interface Shape {
    fun draw()
}

class Circle : Shape {
    override fun draw() {
        println("원 그리기")
    }
}

class Rectangle : Shape {
    override fun draw() {
        println("사각형 그리기")
    }
}

interface ShapeFactory {
    fun createShape(): Shape
}

class CircleFactory : ShapeFactory {
    override fun createShape(): Shape {
        return Circle()
    }
}

class RectangleFactory : ShapeFactory {
    override fun createShape(): Shape {
        return Rectangle()
    }
}

빌더 패턴

빌더 패턴은 복잡한 객체의 생성 과정을 단순화하는 패턴으로, 객체를 조립하여 생성하는 방식입니다. 코틀린에서는 data class와 함께 빌더 패턴을 쉽게 구현할 수 있습니다.

data class User(val id: Long, val name: String, val email: String) {
    data class Builder(var id: Long = 0, var name: String = "", var email: String = "") {
        fun build() = User(id, name, email)
    }
}

val user = User.Builder()
    .id(1)
    .name("John")
    .email("john@example.com")
    .build()

싱글턴 패턴

싱글턴 패턴은 어플리케이션이 실행되는 동안 단 하나의 객체 인스턴스만을 유지하도록 하는 패턴입니다. 코틀린에서는 object 키워드를 사용하여 싱글턴 객체를 선언할 수 있습니다.

object UserManager {
    fun addUser(user: User) {
        // 사용자 추가 로직
    }

    fun deleteUser(userId: Long) {
        // 사용자 삭제 로직
    }
}

스트래티지 패턴

스트래티지 패턴은 동일 계열의 알고리즘을 정의하고, 각 알고리즘을 캡슐화하여 교체가 가능하도록 하는 패턴입니다. 코틀린에서는 클로저나 람다를 활용하여 스트래티지 패턴을 쉽게 구현할 수 있습니다.

class PaymentProcessor(private val strategy: () -> Unit) {
    fun processPayment() {
        // 결제 처리 로직
        strategy()
    }
}

val receiptPrinterStrategy: () -> Unit = { println("영수증 출력") }
val emailSenderStrategy: () -> Unit = { println("이메일 전송") }

val paymentProcessor1 = PaymentProcessor(receiptPrinterStrategy)
val paymentProcessor2 = PaymentProcessor(emailSenderStrategy)

코틀린에서는 다양한 디자인 패턴을 자유롭게 활용할 수 있으며, 각 패턴을 적재적소에 사용하여 코드의 유지보수성, 확장성, 가독성을 향상시킬 수 있습니다.

이상으로 코틀린에서의 디자인 패턴에 대한 개요를 살펴보았습니다. 감사합니다.

코틀린 디자인 패턴