1. 개요
객체지향 프로그래밍에서 역할
, 책임
, 협력은
핵심 요소입니다.
유사한 협력을 하나의 추상화된 협력으로 만들기 위해 역할이 사용
됩니다.
2. 협력 추상화를 위한 역할 사용
2.1 협력의 유사성
세 가지 협력이 주어지고, 그 과정이 유사하므로 하나의 협력으로 다루고 싶은 경우
, 역할이
사용될 수 있습니다.
2.2 역할의 정의
역할은 협력 과정 속에서 특정 객체가 수행하는 책임의 집합
을 나타냅니다. 예를 들어, '판사'와 '증인'의 역할을 통해 세 가지 협력을 하나로 추상화할 수 있습니다.
3. 역할 대체의 조건
3.1 메시지 이해
객체가 다른 역할을 대체하려면, 해당 역할이 수신할 수 있는 메시지를 동일한 방식으로 이해해야 합니다.
3.2 동일한 책임 수행
동일한 역할을 수행할 수 있는 객체들은 협력 내에서 동일한 책임의 집합을 수행할 수 있어야 합니다.
4. 역할의 장점
- 단순성: 유사한 협력을 추상화하여 인지 과부하를 줄일 수 있습니다.
- 유연성: 다양한 객체들이 협력에 참여할 수 있으므로 유연합니다.
- 재사용성: 다양한 객체들이 동일한 협력에 참여할 수 있으므로 재사용성이 높아집니다.
5. 사용예시 (자바 코드)
interface JudgeRole {
void judge();
void callWitness();
}
interface WitnessRole {
void enterWitnessStand();
void testify();
}
class HeartQueen implements JudgeRole {
public void judge() { /* ... */ }
public void callWitness() { /* ... */ }
}
class Alice implements WitnessRole {
public void enterWitnessStand() { /* ... */ }
public void testify() { /* ... */ }
}
public class Court {
public void startTrial(JudgeRole judge, WitnessRole witness) {
judge.judge();
judge.callWitness();
witness.enterWitnessStand();
witness.testify();
}
}
위 코드는 '판사'와 '증인' 역할을 인터페이스로 정의하고, 특정 클래스가 이 역할을 수행할 수 있도록 구현한 예시입니다. startTrial
메소드는 이 역할을 사용하여 협력을 수행합니다.
Uploaded by N2T
'자바 > 객사오' 카테고리의 다른 글
[객사오] 협력 - 요청하고 응답하며 협력하는 사람들 (0) | 2023.08.16 |
---|---|
[객사오] 재판 속의 협력 (0) | 2023.08.16 |
[객사오] 책임 - 책임의 분류 (0) | 2023.08.16 |
[객사오] 책임과 메시지 (0) | 2023.08.16 |
[객사오] 역할 - 책임의 집합의 의미하는 것 (0) | 2023.08.16 |