From 21937f8dc841adbc0d06febb961582e093b72b32 Mon Sep 17 00:00:00 2001 From: banjjoknim Date: Sat, 12 Nov 2022 18:10:32 +0900 Subject: [PATCH] =?UTF-8?q?feat=20:=20Design=20Pattern=20-=20=ED=8C=8C?= =?UTF-8?q?=EC=82=AC=EB=93=9C(Facade)=20=ED=8C=A8=ED=84=B4=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solid-design-pattern-sample/README.md | 7 +++++++ .../designpattern/facade/after/InformationFinder.kt | 7 +++++++ .../designpattern/facade/after/MemberApplication.kt | 16 ++++++++++++++++ .../facade/after/MemberInformationFinder.kt | 17 +++++++++++++++++ .../designpattern/facade/before/MemberApplication.kt | 18 ++++++++++++++++++ .../designpattern/facade/common/Friend.kt | 6 ++++++ .../designpattern/facade/common/FriendFinder.kt | 10 ++++++++++ .../designpattern/facade/common/FriendInformation.kt | 11 +++++++++++ .../designpattern/facade/common/Information.kt | 3 +++ .../designpattern/facade/common/Member.kt | 6 ++++++ .../designpattern/facade/common/MemberFinder.kt | 9 +++++++++ .../designpattern/facade/common/MemberInformation.kt | 13 +++++++++++++ 12 files changed, 123 insertions(+) create mode 100644 놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/after/InformationFinder.kt create mode 100644 놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/after/MemberApplication.kt create mode 100644 놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/after/MemberInformationFinder.kt create mode 100644 놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/before/MemberApplication.kt create mode 100644 놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/Friend.kt create mode 100644 놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/FriendFinder.kt create mode 100644 놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/FriendInformation.kt create mode 100644 놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/Information.kt create mode 100644 놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/Member.kt create mode 100644 놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/MemberFinder.kt create mode 100644 놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/facade/common/MemberInformation.kt 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) } + ) +}