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();
}
}
}
Last updated