일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- docker
- github
- c#
- Spring
- MySQL
- Python
- 도커
- 쿠버네티스
- springboot
- Kotlin
- kubernetes
- git
- 리액트
- 코틀린
- machine-learning
- design pattern
- 마이바티스
- Spring Boot
- AWS
- react
- 리팩토링
- 스프링
- 자바
- Java
- Winform
- VOA
- DataGridView
- 파이썬
- mybatis
- 스프링부트
Archives
- Today
- Total
보뇨 다이어리
코틀린 디자인 패턴 - 구조 패턴 이해하기 (상태) 본문
반응형
개인적으로 자바에서 상태패턴 작성할때 고민이 되던 부분이였는데 코틀린 언어적으로 처리가 가능한게 신기해서 기록해봄.
무엇보다 switch case 문은 저도 별루지만 그 기능을 만든건 다 이유가 있다고 생각하니...
우선 sealed 키워드없이 abstract 를 쓰거나 아무것도 안적게 되면 Dead 클래스에 따른 requireMoodMessage 처리가 아직 반영되지않았기때문에 에러가 발생한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
class Chapter03Test {
@Test
fun sealedTest() {
println(requireMoodMessage(Still()))
println(requireMoodMessage(Aggressive()))
println(requireMoodMessage(Dead()))
}
sealed class Mood
class Still : Mood()
class Aggressive : Mood()
class Dead : Mood()
fun requireMoodMessage(mood: Mood): String {
return when (mood) {
is Still -> "still doing something"
is Aggressive -> "idk why he is so aggressive"
}
}
}
|
cs |
그래서 아래와 같이 수정하게되면 더이상 에러 메시지가 나오진않는다.
다만, class 선언한쪽에서 warning 이 발생하는데 해당 이유는 equals, hashCode 를 오버라이딩해달라는 소리
이때 생각해보면 어차피 상태라는것이 중복될필요가 없기도해서 (특정 케이스의 경우 제외) 싱글톤으로 작성하면 된다.
그래서 방법은 아래를 계속 이어서 확인하면된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
class Chapter03Test {
@Test
fun sealedTest() {
println(requireMoodMessage(Still()))
println(requireMoodMessage(Aggressive()))
println(requireMoodMessage(Dead()))
}
sealed class Mood
class Still : Mood()
class Aggressive : Mood()
class Dead : Mood()
fun requireMoodMessage(mood: Mood): String {
return when (mood) {
is Still -> "still doing something"
is Aggressive -> "idk why he is so aggressive"
is Dead -> "walking dead"
}
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
// 방법 1
data object Aggressive : Mood()
// 방법 2
class Dead : Mood() {
override fun equals(other: Any?): Boolean {
return this === other
}
override fun hashCode(): Int {
return System.identityHashCode(this)
}
}
|
cs |
반응형
'컴퓨터 관련 > Kotlin 정보' 카테고리의 다른 글
코틀린 디자인 패턴 - 동작 패턴 이해하기 (책임연쇄) (0) | 2024.12.16 |
---|---|
코틀린 디자인 패턴 - 동작 패턴 이해하기 (커맨드) (0) | 2024.12.16 |
코틀린 디자인 패턴 - 구조 패턴 이해하기 (퍼사드, 프록시) (2) | 2024.12.13 |
코틀린 디자인 패턴 - 구조 패턴 이해하기 (브릿지) (0) | 2024.12.11 |
코틀린 디자인 패턴 - 구조 패턴 이해하기 (데코레이터) (0) | 2024.11.28 |