설계패턴 week 3

Ethan·2025년 9월 16일

디자인패턴
언어중립적인 형태로
uml 클래스 다이어그램
정적인 측면을 묘사

uml 시퀀스 다이어그램
동적인 측면을 묘사

중요 문제 1

<코드>를 가장 잘 표현한 다이어그램을 그려라
<코드>

abstract class Shape {
    abstract public double area();
}
class Circle extends Shape {
    private double r;
    public Circle(double r) { this.r = r; }
    public double area() { return Math.PI * r * r; }
}

중요문제 2
다형성!(형태를 바꿀 수 있는 제우스를 만들어라)
<코드>를 통해서 알 수 있는 사실을 모두 고르시오. (주의. 오답을 포함하여 선택하면 0점 처리)
<코드>

interface Payment {
    void pay(int amount);
}
class CardPayment implements Payment {
    public void pay(int amount) { /* 카드 결제 로직 */ }
}
class BankTransfer implements Payment {
    public void pay(int amount) { /* 계좌이체 로직 */ }
}
class Checkout {
    // 새로운 결제 수단이 생겨도 이 메서드는 수정하지 않는다
    void process(Payment payment, int amount) {
        payment.pay(amount); // 다형적 호출
    }
}

Select one or more:
a. 다형성이 적용되었다.
b. 결제 수단이 추가될 때마다 if-else 분기를 process 메소드에 반드시 추가해야 한다
c.  새로운 결제 수단 추가 시 기존 코드를 수정하지 않아도 된다
d. 실체화 관계을 사용하였다.

전략패턴 사용

3번 문제
<시퀀스 다이어그램>은 <코드>의 행위를 모델링한 것이다.  A에 들어갈 적합한 메시지 이름은?
<코드>

class A1 {
    public void doA1() {
        A2 a2 = new A2();
        a2.doA2(this);
        A3 a3 = new A3();
        a3.doA3(a2);
    }
    public void doIt() {
            ...
    }
}
class A2 {
    public void doA2(A1 a1) {
        a1.doIt();
    }
}

<시퀀스 다이어그램>
(첨부한 사진)
Select one:
a. doIt
b. doA3
c. doA1
d. doA2

profile
코딩하는 알파카

0개의 댓글