[객사오] 역할이 답이다

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