디자인패턴
언어중립적인 형태로
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
