1. 디자인 패턴 기초
디자인 패턴 : 가장 효율적이고 검증된 설계 방법으로, SOLID 원칙을 코드에 실제로 녹여내는 가장 실용적인 방법 중 하나.
- 대표적인 디자인 패턴
1) 전략 패턴 :: 알고리즘을 쉽게 바꾸는 것이 목표인 패턴. OCP의 정석!
- 알고리즘(전략)을 통째로 갈아 끼울 수 있게 만드는 패턴.
- 이전 실습인 커피메이커에서 if/else문으로 조건문을 만들어 결제수단을 만들면, 결제수단이 새로 추가된다면 if문이 늘어나고 수정도 불편해진다! 즉 OCP 원칙을 적용해 코드를 수정하기 위해 전략 패턴을 사용할 수 있음. (결제수단의 전략을 클래스로 구현하기)
2) 팩토리 메소드 패턴 :: 직접 'new'하지 않고 객체 생성 방법을 공장에 대신 깔끔히 맡기는(위임하는) 패턴
- 생성 로직을 캡슐화하고 싶을 때 사용.
- 이전 실습인 커피메이커에서 커피를 주문할 때 제조는 Factory에서 하도록 만드는 것이 그 예시다! CoffeeFactory.java도 수정하고 싶지 않다면 레지스트리를 쓰라고 한다..
3) 데코레이터 패턴 :: 기존 객체에 기능을 겹겹이 덧붙여 꾸미는 패턴.
- 추가기능을 기존 기능의 조합으로 확장하고 싶지만 기존 클래스는 건드리고 싶지 않을 때 사용하는 패턴.
- 이전 실습인 커피메이커에서, 아이스초코라떼라는 기능이 새로 추가되어서 이를 만들 때 기능을 계층적으로 조합해서 음료를 제조할 수 있다.

4) 싱글톤 패턴 :: 클래스의 인스턴스가 오직 하나만 존재하도록 보장하는 패턴, 유일무이한 객체를 만듦.
+) 템플릿 메소드 패턴
2. 짱구 전략패턴 실습
- 각 상황에 따라 알맞은 전략을 취하는 짱구
- 행동 전략 인터페이스
public interface IBehaviorStrategy {
public void behave(String context);
}
- 세 가지 하위 행동 전략이 있음. (비매너전략 / 매너전략 / 회피전략)
package c20251015;
public class DanceStrategy implements IBehaviorStrategy{
@Override
public void behave(String context) {
// TODO Auto-generated method stub
System.out.println(context + " 상황..");
System.out.println("비매너모드!");
}
}
package c20251015;
public class ActionMaskStrategy implements IBehaviorStrategy {
@Override
public void behave(String context) {
// TODO Auto-generated method stub
System.out.println(context + " 상황..");
System.out.println("용감해져요!");
}
}
package c20251015;
public class SleepStrategy implements IBehaviorStrategy{
@Override
public void behave(String context) {
// TODO Auto-generated method stub
System.out.println(context + " 상황..");
System.out.println("눈을 감고 상황을 회피!");
}
}
- (전략대로 행동을 취할) 짱구 클래스.
package c20251015;
public class 짱구{
//private final IBehaviorStrategy strategy = null; 써도 됨 . 안됨 수정필요할ㄷ듯
private IBehaviorStrategy strategy;
public void setStrategy(IBehaviorStrategy strategy) {
this.strategy = strategy;
System.out.println("현재 짱구의 매너 전략 : " + this.strategy.getClass().getSimpleName() + "장착!");
}
public void encountSituation(String situation) {
System.out.println("[상황발생]! ::"+ situation);
if(this.strategy == null) {
System.out.println("전략 그런 거 없고 놀게용");
return;
}
strategy.behave(situation);
}
}
- 실행할 메인 파일. 각각의 상황이 주어지고 적용할 전략을 불러줌!
package c20251015;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
짱구 a = new 짱구();
//전략없음
a.encountSituation("내일 시험봄");
a.setStrategy(new DanceStrategy());
a.encountSituation("친구들과 놀기");
a.setStrategy(new SleepStrategy());
a.encountSituation("엄마가 귀찮은 심부름을 시킴");
a.setStrategy(new ActionMaskStrategy());
a.encountSituation("훈이가 괴롭힘당함");
}
}

'Develop > Java' 카테고리의 다른 글
| [10주차] SpringBoot - 1 (0) | 2025.11.23 |
|---|---|
| [9주차] DB & JDBC (0) | 2025.11.16 |
| [8주차] GUI + Event + Thread를 이용한 망나니 잡기 (0) | 2025.11.02 |
| [7주차-2] 디자인패턴 추가조사 - 데코레이터 패턴 (0) | 2025.10.18 |
| [6주차] 커피메이커 v2 리팩토링 (0) | 2025.10.11 |