[kotlin] 코틀린 디자인 패턴 예제 코드
코틀린 디자인 패턴: 예제 코드
디자인 패턴은 소프트웨어 개발에서 자주 사용되는 구조적인 해결책을 제시합니다. 쉽고 재사용 가능한 코드를 작성하기 위해 디자인 패턴을 적용하는 것이 중요합니다. 여기에서 몇 가지 코틀린으로 작성된 디자인 패턴 예제 코드를 살펴보겠습니다.
1. 싱글턴 패턴
싱글턴 패턴은 어떤 클래스가 최대 한 번만 인스턴스화되도록 보장하는 패턴입니다. 코틀린에서 싱글턴 패턴을 구현하는 방법은 다음과 같습니다.
object Singleton {
init {
println("Singleton 인스턴스가 생성되었습니다.")
}
fun doSomething() {
println("작업을 수행합니다.")
}
}
fun main() {
Singleton.doSomething()
}
2. 팩토리 메서드 패턴
팩토리 메서드 패턴은 객체를 생성하기 위한 인터페이스를 정의하고, 인스턴스화할 클래스의 결정은 서브클래스에서 이루어지도록 하는 패턴입니다. 코틀린에서 팩토리 메서드 패턴을 구현하는 방법은 다음과 같습니다.
interface Product {
fun operation()
}
class ConcreteProductA : Product {
override fun operation() {
println("제품 A의 동작을 수행합니다.")
}
}
class ConcreteProductB : Product {
override fun operation() {
println("제품 B의 동작을 수행합니다.")
}
}
abstract class Creator {
abstract fun factoryMethod(): Product
fun someOperation() {
val product = factoryMethod()
product.operation()
}
}
class ConcreteCreatorA : Creator() {
override fun factoryMethod(): Product {
return ConcreteProductA()
}
}
class ConcreteCreatorB : Creator() {
override fun factoryMethod(): Product {
return ConcreteProductB()
}
}
fun main() {
val creatorA = ConcreteCreatorA()
creatorA.someOperation()
val creatorB = ConcreteCreatorB()
creatorB.someOperation()
}
3. 옵서버 패턴
옵서버 패턴은 객체 사이에 일대다 종속성을 정의하며, 어떤 객체의 상태가 바뀌면 그 객체에 종속된 모든 객체들에게 자동으로 알림을 전달하는 패턴입니다. 코틀린에서 옵서버 패턴을 구현하는 방법은 다음과 같습니다.
interface Observer {
fun update(message: String)
}
class ConcreteObserverA : Observer {
override fun update(message: String) {
println("Observer A가 업데이트를 받았습니다: $message")
}
}
class ConcreteObserverB : Observer {
override fun update(message: String) {
println("Observer B가 업데이트를 받았습니다: $message")
}
}
class Subject {
private val observers = mutableListOf<Observer>()
fun attach(observer: Observer) {
observers.add(observer)
}
fun detach(observer: Observer) {
observers.remove(observer)
}
fun notify(message: String) {
for (observer in observers) {
observer.update(message)
}
}
}
fun main() {
val subject = Subject()
val observerA = ConcreteObserverA()
val observerB = ConcreteObserverB()
subject.attach(observerA)
subject.attach(observerB)
subject.notify("알림 메시지")
}
위의 예제 코드를 참고하여, 다양한 디자인 패턴을 코틀린으로 구현할 수 있습니다. ```