diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/README.md b/놀이터(예제 코드 작성)/solid-design-pattern-sample/README.md index 7c410f4..8243061 100644 --- a/놀이터(예제 코드 작성)/solid-design-pattern-sample/README.md +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/README.md @@ -126,6 +126,13 @@ ### 파사드(Facade) 패턴 +#### 구현 요구사항 + +- 회원의 모든 정보를 조회한다. +- 회원의 모든 정보에는 회원의 기본 정보와 친구들에 대한 정보가 있다. + - 회원의 기본 정보에는 이름, 나이가 있다. + - 회원의 친구 정보에는 친구의 이름, 나이가 있다. + ### 추상 팩토리(Abstract Factory) 패턴 ### 컴포지트(Composite) 패턴 diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/after/InformationFinder.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/after/InformationFinder.kt new file mode 100644 index 0000000..ee8103e --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/after/InformationFinder.kt @@ -0,0 +1,7 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.facade.after + +import com.banjjoknim.soliddesignpatternsample.designpattern.facade.common.Information + +interface InformationFinder { + fun findInformation(): Information +} diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/after/MemberApplication.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/after/MemberApplication.kt new file mode 100644 index 0000000..ccd0fd1 --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/after/MemberApplication.kt @@ -0,0 +1,16 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.facade.after + +import com.banjjoknim.soliddesignpatternsample.designpattern.facade.common.FriendFinder +import com.banjjoknim.soliddesignpatternsample.designpattern.facade.common.MemberFinder + +class MemberApplication + +fun main() { + val memberFinder = MemberFinder() + val friendFinder = FriendFinder() + + val memberInformationFinder = MemberInformationFinder(memberFinder, friendFinder) + + val memberInformation = memberInformationFinder.findInformation() + println(memberInformation) +} diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/after/MemberInformationFinder.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/after/MemberInformationFinder.kt new file mode 100644 index 0000000..92ae124 --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/after/MemberInformationFinder.kt @@ -0,0 +1,17 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.facade.after + +import com.banjjoknim.soliddesignpatternsample.designpattern.facade.common.FriendFinder +import com.banjjoknim.soliddesignpatternsample.designpattern.facade.common.Information +import com.banjjoknim.soliddesignpatternsample.designpattern.facade.common.MemberFinder +import com.banjjoknim.soliddesignpatternsample.designpattern.facade.common.MemberInformation + +class MemberInformationFinder( + private val memberFinder: MemberFinder, + private val friendFinder: FriendFinder, +): InformationFinder { + override fun findInformation(): Information { + val member = memberFinder.findMember() + val friends = friendFinder.findFriends(member) + return MemberInformation(member, friends) + } +} diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/before/MemberApplication.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/before/MemberApplication.kt new file mode 100644 index 0000000..b247b37 --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/before/MemberApplication.kt @@ -0,0 +1,18 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.facade.before + +import com.banjjoknim.soliddesignpatternsample.designpattern.facade.common.FriendFinder +import com.banjjoknim.soliddesignpatternsample.designpattern.facade.common.MemberFinder +import com.banjjoknim.soliddesignpatternsample.designpattern.facade.common.MemberInformation + +class MemberApplication + +fun main() { + val memberFinder = MemberFinder() + val friendFinder = FriendFinder() + + val member = memberFinder.findMember() + val friends = friendFinder.findFriends(member) + + val memberInformation = MemberInformation(member, friends) + println(memberInformation) +} diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/Friend.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/Friend.kt new file mode 100644 index 0000000..7c3f4c6 --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/Friend.kt @@ -0,0 +1,6 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.facade.common + +data class Friend( + val name: String, + val age: Int +) diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/FriendFinder.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/FriendFinder.kt new file mode 100644 index 0000000..c19a76e --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/FriendFinder.kt @@ -0,0 +1,10 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.facade.common + +import com.banjjoknim.soliddesignpatternsample.designpattern.facade.common.Friend +import com.banjjoknim.soliddesignpatternsample.designpattern.facade.common.Member + +class FriendFinder { + fun findFriends(member: Member): List { + return listOf(Friend("colt", 29)) + } +} diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/FriendInformation.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/FriendInformation.kt new file mode 100644 index 0000000..5b673bc --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/FriendInformation.kt @@ -0,0 +1,11 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.facade.common + +data class FriendInformation( + val name: String, + val age: Int +) : Information { + constructor(friend: Friend) : this( + name = friend.name, + age = friend.age + ) +} diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/Information.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/Information.kt new file mode 100644 index 0000000..ccc810d --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/Information.kt @@ -0,0 +1,3 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.facade.common + +interface Information diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/Member.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/Member.kt new file mode 100644 index 0000000..c047f55 --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/Member.kt @@ -0,0 +1,6 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.facade.common + +class Member( + val name: String, + val age: Int +) diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/MemberFinder.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/MemberFinder.kt new file mode 100644 index 0000000..c8f70dc --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/MemberFinder.kt @@ -0,0 +1,9 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.facade.common + +import com.banjjoknim.soliddesignpatternsample.designpattern.facade.common.Member + +class MemberFinder { + fun findMember(): Member { + return Member("banjjoknim", 29) + } +} diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/MemberInformation.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/MemberInformation.kt new file mode 100644 index 0000000..c83ba2b --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/MemberInformation.kt @@ -0,0 +1,13 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.facade.common + +data class MemberInformation( + val memberName: String, + val memberAge: Int, + val friendsInformation: List +): Information { + constructor(member: Member, friends: List) : this( + memberName = member.name, + memberAge = member.age, + friendsInformation = friends.map { FriendInformation(it) } + ) +}