보뇨 다이어리

코틀린 디자인 패턴 - 생성패턴 사용하기 본문

컴퓨터 관련/Kotlin 정보

코틀린 디자인 패턴 - 생성패턴 사용하기

보뇨 2024. 11. 28. 14:09
반응형

 

싱글턴 패턴

- object class 를 선언해서 사용해라 

1
2
3
4
5
6
7
8
9
10
11
12
13
    object StringConstant {
        const val HOSTNAME = "user"
        
        fun addPrefix(text: String): String {
            return "$text, $HOSTNAME"
        }
    }
    
    @Test
    fun singletonTest() {
        println(StringConstant.HOSTNAME) // user
        println(StringConstant.addPrefix("hello")) // hello, user
    }
cs

 

빌더패턴 

- 명명인수를 사용해서 대체하라 

 

// 추가 내용

책에 있는 내용을 공부하다가 리시버를 사용하는경우가 있는데 이걸 활요하면 빌더패턴을 다른식으로도 표현가능

다만 이때 객체는 미리 선언해야하기때문에 생성자로 들어간것들은 초기화하지못함

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
class Chapter04Interpreter {
 
    @Test
    fun builderTest() {
        // 명명인수 사용 
        val mail = Mail(to = listOf(), title = "title~")
 
        // 리시버 사용
        val anotherMail = buildMail {
            to = listOf("hello", "mail")
        }
 
        println(mail.to)
        println(anotherMail.to)
    }
 
    data class Mail(
        var to: List<String> = listOf(),
        private var cc: List<String> = listOf(),
        private var title: String = "",
        private var message: String = "",
        private var important: Boolean = false
    )
 
    fun buildMail(block: Mail.() -> Unit) = run {
        val mail = Mail()
        mail.block()
        mail
    }
}
cs

 

 

프로토타입패턴

- java 의 clone 보다 더 개선된 copy 메소드를 쓰도록하자 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    @Test
    fun prototypeTest() {
        val user = User(name = "lee", role = Role.REGULAR_USER, permissions = mutableSetOf("hello"))
        val copyUser = user.copy()
 
        print(user == copyUser) // true
    }
 
    data class User(
        val name: String,
        val role: Role,
        val permissions: Set<String>
    )
 
    enum class Role {
        ADMIN, SUPER_ADMIN, REGULAR_USER
    }
cs

 

반응형