Role Change
์ญํ ๋ณ๊ฒฝ ํจํด(Role Change Pattern)์ ๊ฐ์ฒด๊ฐ ์ํฉ์ ๋ฐ๋ผ ๋์ ์ผ๋ก ์์ ์ ์ญํ (ํ์)์ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ถ๊ฐํ ์ ์๋๋ก ํ๋ ํจํด์ ๋๋ค.
+--------------+
| Person | <-- ํต์ฌ ๊ฐ์ฒด (์ญํ ์ ๋์ ์ผ๋ก ๊ด๋ฆฌ)
+--------------+
| - roles: List<Role> |
+--------------+
โ
โ ์ญํ ์์
โผ
+--------------+
| Role | <-- ์ญํ ์ธํฐํ์ด์ค (๊ณตํต ํ์ ์ ์)
+--------------+
| + execute() |
+--------------+
/ \
/ \
โผ โผ
+----------------+ +------------------+
| StudentRole | | EmployeeRole |
| (๊ตฌ์ฒด์ ์ญํ ) | | (๊ตฌ์ฒด์ ์ญํ ) |
+----------------+ +------------------+
์ฆ, ํต์ฌ ๊ฐ์ฒด(์: Person)๊ฐ ๋ค์ํ ์ญํ (Role)๋ค์ ์ธ๋ถ์์ ๋ถ์ฌ๋ฐ์, ๊ทธ ์ญํ ์ ๋ฐ๋ฅธ ํ๋์ ์คํํ ์ ์๋๋ก ํ๋ ๋ฐฉ์์ ๋๋ค.
์ด ํจํด์ ์์ ๋์ ๊ตฌ์ฑ์ ์ฌ์ฉํ์ฌ, ๋ฐํ์ ์ ์ญํ ์ ์ถ๊ฐ/์ ๊ฑฐํ๊ฑฐ๋ ๋ณ๊ฒฝํ ์ ์๋ ์ ์ฐํ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
How do Code?
public interface Role {
void execute();
}
// StudentRole: Role ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ ํ์ ์ญํ ์ ์ํ
public class StudentRole implements Role {
@Override
public void execute() {
System.out.println("StudentRole: ๊ณต๋ถํ๋ ์ค...");
}
}
// EmployeeRole: Role ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ ์ง์ ์ญํ ์ ์ํ
public class EmployeeRole implements Role {
@Override
public void execute() {
System.out.println("EmployeeRole: ์ผํ๋ ์ค...");
}
}
// Person ํด๋์ค: ์ญํ ์ ๋์ ์ผ๋ก ๊ด๋ฆฌํ๋ ํต์ฌ ๊ฐ์ฒด
import java.util.ArrayList;
import java.util.List;
public class Person {
private List<Role> roles = new ArrayList<>();
// ์ญํ ์ถ๊ฐ
public void addRole(Role role) {
roles.add(role);
}
// ์ญํ ์ ๊ฑฐ
public void removeRole(Role role) {
roles.remove(role);
}
// ๋ถ์ฌ๋ ๋ชจ๋ ์ญํ ์ ํ๋์ ์คํ
public void performRoles() {
for (Role role : roles) {
role.execute();
}
}
}interface Role {
fun execute()
}
// StudentRole: Role ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ ํ์ ์ญํ ์ ์ํ
class StudentRole : Role {
override fun execute() {
println("StudentRole: ๊ณต๋ถํ๋ ์ค...")
}
}
// EmployeeRole: Role ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ ์ง์ ์ญํ ์ ์ํ
class EmployeeRole : Role {
override fun execute() {
println("EmployeeRole: ์ผํ๋ ์ค...")
}
}
// Person ํด๋์ค: ์ญํ ์ ๋์ ์ผ๋ก ๊ด๋ฆฌํ๋ ํต์ฌ ๊ฐ์ฒด
class Person {
private val roles = mutableListOf<Role>()
// ์ญํ ์ถ๊ฐ
fun addRole(role: Role) {
roles.add(role)
}
// ์ญํ ์ ๊ฑฐ
fun removeRole(role: Role) {
roles.remove(role)
}
// ๋ถ์ฌ๋ ๋ชจ๋ ์ญํ ์ ํ๋์ ์คํ
fun performRoles() {
roles.forEach { it.execute() }
}
}Last updated