diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/README.md b/놀이터(예제 코드 작성)/solid-design-pattern-sample/README.md index a6d9f66..2037f4e 100644 --- a/놀이터(예제 코드 작성)/solid-design-pattern-sample/README.md +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/README.md @@ -98,11 +98,21 @@ #### 구현 요구사항 - 지갑의 주인은 지갑에 대해 입금 또는 출금을 진행할 수 있다. -- 지갑의 동작은 입금 및 출금만 가능하도록 제한된다. +- 지갑의 동작은 입금 및 출금만 가능하도록 제한된다. - 지갑에 대해 입금 또는 출금이 이루어질 때 메시지를 출력한다. ### 어댑터(Adapter) 패턴 +#### 구현 요구사항 + +- 발전소는 정해진 요청 규격에 따라 전기를 생산한다. +- 가정은 정해진 규격에 따라 전기를 얻는다. +- 발전소와 가정에서 사용하는 전기는 각각 다르다. +- 발전소에서 생산한 전기를 가정용으로 변환하는 계산식은 아래와 같다. + - 생산된 전류량 * (발전소 전압 / 가정용 전압) + - 발전소에서 생산한 전기의 전압은 11000V 이다. + - 가정에서 사용하는 전기의 전압은 220V 이다. + ### 옵저버(Observer) 패턴 ### 미디에이터(Mediator) 패턴 diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/adapter/after/ElectricService.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/adapter/after/ElectricService.kt new file mode 100644 index 0000000..101915e --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/adapter/after/ElectricService.kt @@ -0,0 +1,7 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.adapter.after + +import com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common.HomeElectric + +interface ElectricService { + fun generateElectric(current: Int): HomeElectric +} diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/adapter/after/HomePowerStationElectricAdapter.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/adapter/after/HomePowerStationElectricAdapter.kt new file mode 100644 index 0000000..5d0d7be --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/adapter/after/HomePowerStationElectricAdapter.kt @@ -0,0 +1,15 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.adapter.after + +import com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common.HomeElectric +import com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common.PowerStation +import com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common.PowerStationElectricRequest + +class HomePowerStationElectricAdapter( + private val powerStation: PowerStation +): ElectricService { + override fun generateElectric(current: Int): HomeElectric { + val powerStationElectricRequest = PowerStationElectricRequest(current) + val powerStationElectric = powerStation.generateElectric(powerStationElectricRequest) + return powerStationElectric.toHomeElectric() + } +} diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/adapter/after/PowerStationApplication.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/adapter/after/PowerStationApplication.kt new file mode 100644 index 0000000..3deeb2a --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/adapter/after/PowerStationApplication.kt @@ -0,0 +1,16 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.adapter.after + +import com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common.Home +import com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common.PowerStation + +class PowerStationApplication + +fun main() { + val powerStation = PowerStation() + val homePowerStationElectricAdapter = HomePowerStationElectricAdapter(powerStation) + + val homeElectric = homePowerStationElectricAdapter.generateElectric(1000) + + val home = Home() + home.takeElectric(homeElectric) // 가정은 발전소의 전기를 사용하는 클라이언트 역할을 한다. +} diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/adapter/before/PowerStationApplication.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/adapter/before/PowerStationApplication.kt new file mode 100644 index 0000000..d4ff732 --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/adapter/before/PowerStationApplication.kt @@ -0,0 +1,19 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.adapter.before + +import com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common.Home +import com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common.PowerStation +import com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common.PowerStationElectricRequest + +class PowerStationApplication + +fun main() { + val powerStation = PowerStation() + + val electricRequest = PowerStationElectricRequest(1000) + val powerStationElectric = powerStation.generateElectric(electricRequest) + + val homeElectric = powerStationElectric.toHomeElectric() + + val home = Home() + home.takeElectric(homeElectric) // 가정은 발전소의 전기를 사용하는 클라이언트 역할을 한다. +} diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/adapter/common/Home.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/adapter/common/Home.kt new file mode 100644 index 0000000..d9aea56 --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/adapter/common/Home.kt @@ -0,0 +1,9 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common + +class Home( + private var electric: HomeElectric = HomeElectric(0) +) { + fun takeElectric(electric: HomeElectric) { + this.electric = electric + } +} diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/adapter/common/HomeElectric.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/adapter/common/HomeElectric.kt new file mode 100644 index 0000000..d4bfc8d --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/adapter/common/HomeElectric.kt @@ -0,0 +1,5 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common + +data class HomeElectric( + val current: Int, +) diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/adapter/common/PowerStation.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/adapter/common/PowerStation.kt new file mode 100644 index 0000000..b75ece9 --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/adapter/common/PowerStation.kt @@ -0,0 +1,7 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common + +class PowerStation { + fun generateElectric(request: PowerStationElectricRequest): PowerStationElectric { + return PowerStationElectric(request.current) + } +} diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/adapter/common/PowerStationElectric.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/adapter/common/PowerStationElectric.kt new file mode 100644 index 0000000..5f93f21 --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/adapter/common/PowerStationElectric.kt @@ -0,0 +1,9 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common + +data class PowerStationElectric( + val current: Int, +) { + fun toHomeElectric(): HomeElectric { + return HomeElectric(this.current * (11000 / 220)) + } +} diff --git a/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/adapter/common/PowerStationElectricRequest.kt b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/adapter/common/PowerStationElectricRequest.kt new file mode 100644 index 0000000..f4f87cf --- /dev/null +++ b/놀이터(예제 코드 작성)/solid-design-pattern-sample/src/main/kotlin/com/banjjoknim/soliddesignpatternsample/designpattern/adapter/common/PowerStationElectricRequest.kt @@ -0,0 +1,5 @@ +package com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common + +data class PowerStationElectricRequest( + val current: Int +)