보뇨 다이어리

코틀린 디자인 패턴 - 동작 패턴 이해하기 (커맨드) 본문

컴퓨터 관련/Kotlin 정보

코틀린 디자인 패턴 - 동작 패턴 이해하기 (커맨드)

보뇨 2024. 12. 16. 17:09
반응형

책에서 typealias 를 통해 interface 나 class 선언없이 하는 방법을 많이 소개해주는거같은데 

지금도 그렇지만 이게 객체지향적인가? 반발감이 있긴하다..(이런식으로 쓰는건 상상도못했기때문에 어색..)

근데 어떻게보면 쉬운방법으로 사고전환이 가능해서 해당 언어가 지원해주는 방법을 많이 활용하는게 좋을꺼같다

Java 컨벤션대로 짜면 결국 Java 코드이니까 특정 언어를 만든 개발자의 의도를 따라가다보면 이점을 깨닫게 될지도...?

 

아래 기능에서는 undo 기능이 추가되어야하는데

커맨드패턴같은경우 저라면 그냥 interface 구현식으로 할꺼같아서 추가로 기능개발은 하지않았다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
typealias Command = () -> Unit
 
class Chapter04 {
 
    @Test
    fun test() {
        val t = Trooper()
 
        t.addOrder(moveGenerator(t, 1, 1))
        t.addOrder(moveGenerator(t, 2, 2))
        t.addOrder(moveGenerator(t, 3, 3))
        t.addOrder { t.move(4, 4) }
 
        t.executeOrders()
    }
 
    open class Trooper {
        private val orders = mutableListOf<Command>()
 
        fun addOrder(order: Command) {
            this.orders.add(order)
        }
 
        fun executeOrders() {
            while (orders.isNotEmpty()) {
                val order = orders.removeFirst()
                order()
            }
        }
 
        fun move(x: Int, y: Int) {
            println("Moving to $x:$y")
        }
        
    }
 
    val moveGenerator = fun(s: Trooper, x: Int, y: Int): Command {
        return fun() { s.move(x, y) }
    }
}
cs
반응형