From 27311dc1ebaafa1cbed62c0de429bdae5b416503 Mon Sep 17 00:00:00 2001 From: banjjoknim Date: Fri, 11 Nov 2022 12:59:12 +0900 Subject: [PATCH] =?UTF-8?q?feat=20:=20Design=20Pattern=20-=20=ED=94=84?= =?UTF-8?q?=EB=A1=9D=EC=8B=9C(Proxy)=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 | 6 ++++++ .../designpattern/proxy/after/ExtendsProxyWallet.kt | 13 +++++++++++++ .../designpattern/proxy/after/ImplementsProxyWallet.kt | 15 +++++++++++++++ .../designpattern/proxy/after/Owner.kt | 13 +++++++++++++ .../designpattern/proxy/after/RealWallet.kt | 13 +++++++++++++ .../designpattern/proxy/after/Wallet.kt | 7 +++++++ .../designpattern/proxy/after/WalletApplication.kt | 9 +++++++++ .../designpattern/proxy/before/Owner.kt | 13 +++++++++++++ .../designpattern/proxy/before/Wallet.kt | 15 +++++++++++++++ .../designpattern/proxy/before/WalletApplication.kt | 9 +++++++++ 10 files changed, 113 insertions(+) create mode 100644 놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/after/ExtendsProxyWallet.kt create mode 100644 놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/after/ImplementsProxyWallet.kt create mode 100644 놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/after/Owner.kt create mode 100644 놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/after/RealWallet.kt create mode 100644 놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/after/Wallet.kt create mode 100644 놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/after/WalletApplication.kt create mode 100644 놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/before/Owner.kt create mode 100644 놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/before/Wallet.kt create mode 100644 놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/before/WalletApplication.kt diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/README.md b/놀이터(예제 코드 작성)/solid-design-pattern-sample/README.md index c5635fd..a6d9f66 100644 --- a/놀이터(예제 코드 작성)/solid-design-pattern-sample/README.md +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/README.md @@ -95,6 +95,12 @@ ### 프록시(Proxy) 패턴 +#### 구현 요구사항 + +- 지갑의 주인은 지갑에 대해 입금 또는 출금을 진행할 수 있다. +- 지갑의 동작은 입금 및 출금만 가능하도록 제한된다. +- 지갑에 대해 입금 또는 출금이 이루어질 때 메시지를 출력한다. + ### 어댑터(Adapter) 패턴 ### 옵저버(Observer) 패턴 diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/after/ExtendsProxyWallet.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/after/ExtendsProxyWallet.kt new file mode 100644 index 0000000..1a3e5ed --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/after/ExtendsProxyWallet.kt @@ -0,0 +1,13 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.proxy.after + +class ExtendsProxyWallet(balance: Int) : RealWallet(balance) { + override fun deposit(amount: Int) { + println("지갑에 $amount 원이 입금되었습니다.") + super.deposit(amount) + } + + override fun withdrawal(amount: Int) { + println("지갑에서 $amount 원이 출금되었습니다.") + super.withdrawal(amount) + } +} diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/after/ImplementsProxyWallet.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/after/ImplementsProxyWallet.kt new file mode 100644 index 0000000..d9e0e8c --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/after/ImplementsProxyWallet.kt @@ -0,0 +1,15 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.proxy.after + +class ImplementsProxyWallet( + private val realWallet: RealWallet +) : Wallet { + override fun deposit(amount: Int) { + println("지갑에 $amount 원이 입금되었습니다.") + realWallet.deposit(amount) + } + + override fun withdrawal(amount: Int) { + println("지갑에서 $amount 원이 출금되었습니다.") + realWallet.withdrawal(amount) + } +} diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/after/Owner.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/after/Owner.kt new file mode 100644 index 0000000..82b88da --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/after/Owner.kt @@ -0,0 +1,13 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.proxy.after + +class Owner( + private val wallet: Wallet +) { + fun deposit(amount: Int) { + wallet.deposit(amount) + } + + fun withdrawal(amount: Int) { + wallet.withdrawal(amount) + } +} diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/after/RealWallet.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/after/RealWallet.kt new file mode 100644 index 0000000..2d3f403 --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/after/RealWallet.kt @@ -0,0 +1,13 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.proxy.after + +open class RealWallet( + private var balance: Int = 0 +) : Wallet { + override fun deposit(amount: Int) { + this.balance += amount + } + + override fun withdrawal(amount: Int) { + this.balance -= amount + } +} diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/after/Wallet.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/after/Wallet.kt new file mode 100644 index 0000000..22a7a57 --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/after/Wallet.kt @@ -0,0 +1,7 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.proxy.after + +interface Wallet { + fun deposit(amount: Int) + + fun withdrawal(amount: Int) +} diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/after/WalletApplication.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/after/WalletApplication.kt new file mode 100644 index 0000000..64e2499 --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/after/WalletApplication.kt @@ -0,0 +1,9 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.proxy.after + +class ProxyWalletApplication + +fun main() { + val wallet = ImplementsProxyWallet(RealWallet()) + val owner = Owner(wallet) + owner.deposit(1000) +} diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/before/Owner.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/before/Owner.kt new file mode 100644 index 0000000..861b7bb --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/before/Owner.kt @@ -0,0 +1,13 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.proxy.before + +class Owner( + private val wallet: Wallet +) { + fun deposit(amount: Int) { + wallet.deposit(amount) + } + + fun withdrawal(amount: Int) { + wallet.withdrawal(amount) + } +} diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/before/Wallet.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/before/Wallet.kt new file mode 100644 index 0000000..73e2af3 --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/before/Wallet.kt @@ -0,0 +1,15 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.proxy.before + +class Wallet( + private var balance: Int = 0 +) { + fun deposit(amount: Int) { + println("지갑에 $amount 원이 입금되었습니다.") + this.balance += amount + } + + fun withdrawal(amount: Int) { + println("지갑에서 $amount 원이 출금되었습니다.") + this.balance -= amount + } +} diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/before/WalletApplication.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/before/WalletApplication.kt new file mode 100644 index 0000000..0033986 --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/proxy/before/WalletApplication.kt @@ -0,0 +1,9 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.proxy.before + +class WalletApplication + +fun main() { + val wallet = Wallet() + val owner = Owner(wallet) + owner.deposit(1000) +}