feat : Design Pattern - 널 객체(Null Object) 패턴 구현
This commit is contained in:
@@ -156,7 +156,13 @@
|
|||||||
- 프랜차이즈 기업은 이름을 갖는다.
|
- 프랜차이즈 기업은 이름을 갖는다.
|
||||||
- 프랜차이즈 가맹점은 이름을 갖는다.
|
- 프랜차이즈 가맹점은 이름을 갖는다.
|
||||||
|
|
||||||
### 널(Null) 객체 패턴
|
### 널 객체(Null Object) 패턴
|
||||||
|
|
||||||
|
#### 구현 요구사항
|
||||||
|
|
||||||
|
- 식당에서는 직원을 이름으로 관리하며 동명이인은 없다고 가정한다.
|
||||||
|
- 이름으로 직원을 찾을 수 있고, 해당 직원에게 근무일자를 할당할 수 있다.
|
||||||
|
- 직원은 근무일자를 고지 받으면 해당 날짜를 기억한다.
|
||||||
|
|
||||||
## 참고자료
|
## 참고자료
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package com.banjjoknim.soliddesignpatternsample.designpattern.nill.after
|
||||||
|
|
||||||
|
interface Employee {
|
||||||
|
companion object {
|
||||||
|
val NOT_FOUND = object : Employee {
|
||||||
|
override val name: String
|
||||||
|
get() = "존재하지 않음"
|
||||||
|
|
||||||
|
override fun memorizeWorkingDays(workingDays: List<Int>) {
|
||||||
|
// 아무 작업도 하지 않는다.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val name: String
|
||||||
|
var workingDays: List<Int>
|
||||||
|
get() = listOf()
|
||||||
|
set(workingDays) {
|
||||||
|
memorizeWorkingDays(workingDays)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun memorizeWorkingDays(workingDays: List<Int>)
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package com.banjjoknim.soliddesignpatternsample.designpattern.nill.after
|
||||||
|
|
||||||
|
class Restaurant(
|
||||||
|
private val employees: MutableList<Employee> = mutableListOf()
|
||||||
|
) {
|
||||||
|
fun addEmployee(employee: Employee) {
|
||||||
|
employees.add(employee)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun removeEmployee(employee: Employee) {
|
||||||
|
employees.remove(employee)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun showAllEmployeesWorkingDays() {
|
||||||
|
for (employee in employees) {
|
||||||
|
println("${employee.name}의 근무일은 ${employee.workingDays}일 입니다.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun assignWorkingDays(workingDays: List<Int>, employeeName: String) {
|
||||||
|
val employee = findEmployee(employeeName)
|
||||||
|
employee.memorizeWorkingDays(workingDays)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun findEmployee(employeeName: String): Employee {
|
||||||
|
return employees.find { it.name == employeeName } ?: Employee.NOT_FOUND
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package com.banjjoknim.soliddesignpatternsample.designpattern.nill.after
|
||||||
|
|
||||||
|
class RestaurantApplication
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
val restaurant = Restaurant()
|
||||||
|
restaurant.addEmployee(WorkingEmployee("banjjoknim"))
|
||||||
|
|
||||||
|
restaurant.assignWorkingDays(listOf(1, 4, 7, 14, 20, 27), "banjjoknim")
|
||||||
|
restaurant.assignWorkingDays(listOf(2, 5, 10, 17, 23, 29), "colt")
|
||||||
|
|
||||||
|
restaurant.showAllEmployeesWorkingDays()
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package com.banjjoknim.soliddesignpatternsample.designpattern.nill.after
|
||||||
|
|
||||||
|
class WorkingEmployee(
|
||||||
|
override val name: String,
|
||||||
|
override var workingDays: List<Int> = listOf()
|
||||||
|
) : Employee {
|
||||||
|
override fun memorizeWorkingDays(workingDays: List<Int>) {
|
||||||
|
this.workingDays = workingDays
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package com.banjjoknim.soliddesignpatternsample.designpattern.nill.before
|
||||||
|
|
||||||
|
class Employee(
|
||||||
|
val name: String,
|
||||||
|
var workingDays: List<Int> = listOf()
|
||||||
|
) {
|
||||||
|
fun memorizeWorkingDays(workingDays: List<Int>) {
|
||||||
|
this.workingDays = workingDays
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (javaClass != other?.javaClass) return false
|
||||||
|
|
||||||
|
other as Employee
|
||||||
|
|
||||||
|
if (name != other.name) return false
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
return name.hashCode()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
package com.banjjoknim.soliddesignpatternsample.designpattern.nill.before
|
||||||
|
|
||||||
|
class Restaurant(
|
||||||
|
private val employees: MutableList<Employee> = mutableListOf()
|
||||||
|
) {
|
||||||
|
fun addEmployee(employee: Employee) {
|
||||||
|
employees.add(employee)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun removeEmployee(employee: Employee) {
|
||||||
|
employees.remove(employee)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun showAllEmployeesWorkingDays() {
|
||||||
|
for (employee in employees) {
|
||||||
|
println("${employee.name}의 근무일은 ${employee.workingDays}일 입니다.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun assignWorkingDays(workingDays: List<Int>, employeeName: String) {
|
||||||
|
val employee = findEmployee(employeeName)
|
||||||
|
if (employee != null) {
|
||||||
|
employee.memorizeWorkingDays(workingDays)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun findEmployee(employeeName: String): Employee? {
|
||||||
|
return employees.find { it.name == employeeName }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package com.banjjoknim.soliddesignpatternsample.designpattern.nill.before
|
||||||
|
|
||||||
|
class RestaurantApplication
|
||||||
|
|
||||||
|
fun main() {
|
||||||
|
val restaurant = Restaurant()
|
||||||
|
restaurant.addEmployee(Employee("banjjoknim"))
|
||||||
|
|
||||||
|
restaurant.assignWorkingDays(listOf(1, 4, 7, 14, 20, 27), "banjjoknim")
|
||||||
|
restaurant.assignWorkingDays(listOf(2, 5, 10, 17, 23, 29), "colt")
|
||||||
|
|
||||||
|
restaurant.showAllEmployeesWorkingDays()
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user