일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- design pattern
- 코틀린
- 쿠버네티스
- 도커
- Kotlin
- VOA
- MySQL
- AWS
- Spring
- 마이바티스
- DataGridView
- Spring Boot
- 리팩토링
- Python
- git
- c#
- 파이썬
- 스프링
- 스프링부트
- kubernetes
- springboot
- react
- Winform
- 리액트
- github
- 자바
- Java
- mybatis
- machine-learning
- docker
Archives
- Today
- Total
보뇨 다이어리
코틀린 디자인 패턴 - 동작 패턴 이해하기 (커맨드) 본문
반응형
책에서 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 |
반응형
'컴퓨터 관련 > Kotlin 정보' 카테고리의 다른 글
코틀린 디자인 패턴 - 동작 패턴 이해하기 (해석기) (0) | 2024.12.16 |
---|---|
코틀린 디자인 패턴 - 동작 패턴 이해하기 (책임연쇄) (0) | 2024.12.16 |
코틀린 디자인 패턴 - 구조 패턴 이해하기 (상태) (2) | 2024.12.13 |
코틀린 디자인 패턴 - 구조 패턴 이해하기 (퍼사드, 프록시) (2) | 2024.12.13 |
코틀린 디자인 패턴 - 구조 패턴 이해하기 (브릿지) (0) | 2024.12.11 |