[Java] SOLID 실습 짱구의 매너전략

2025. 10. 15. 13:16·컴퓨터공학과/Java 1 & 2

조금 더 알아보자!

 

OCP 원칙을 준수하며 유연성이 강한 전략패턴을 짱구에 적용해보자.

 

전략패턴? Strategy

WHEN : 알고리즘을 교체해야할 때 사용한다.

 

 

인터페이스를 사용하는 당사자를 컨텍스트라고 한다. 

 

짱구는 strategy를 사용한다.

필요한 것 : 전략 인터페이스, 전략의 구현된 구체클래스, 전략을 쓸지 결정하는 컨텍스트 클래스.

구조를 그려봅시다.

짱구

  • 철없는 모습 - 춤추는모습
  • 잠자는 모습 - 귀찮은것들은 회피
  • 멋있는 액션가면모드 장착
package week6DesignLab;

public interface IBehaviorStrategy{
	public void behave(String context);
}

모든것의 시초가 되는 인터페이스.

package week6DesignLab;

public class DanceStrategy implements IBehaviorStrategy{

	@Override
	public void behave(String context) {
		// TODO Auto-generated method stub
		System.out.println(context+ "상황.. 개구쟁이모드! 매너 그런거 없다"); //자는척한다. 회피한다 아는척하면
		System.out.println("울라 울라 춤을 추어요. )) )  )) 방귀 뿡 =3=3");
	}

}
package week6DesignLab;

public class ActionMaskStrategy implements IBehaviorStrategy{

	@Override
	public void behave(String context) {
		// TODO Auto-generated method stub
		System.out.println(context+ "상황! 액션가면 출동!");
		System.out.println("약자를 도와 정의의 이름으로 심판합니다!");
	}
	
	
}
package week6DesignLab;

public class SleepStrategy implements IBehaviorStrategy{

	@Override
	public void behave(String context) {
		// TODO Auto-generated method stub
		System.out.println(context+ "상황.. 갑자기 잠이 옵니다."); //자는척한다. 회피한다 아는척하면
		System.out.println("눈을 감고 자는척을 하자~!!");
		
	}

}

구체적인 전략. 상황에 따라 행동지침을 바꾼다.

package week6DesignLab;

public class 짱구 {
	private IBehaviorStrategy strategy = null;	
	
	public void setStrategy(IBehaviorStrategy strategy) {
		this.strategy = strategy; //외부에서 주입받고있음.
		System.out.println("--- 현재 짱구의 매너전략(마음가짐) 변경: "+ this.strategy.getClass().getSimpleName()+" 장착완료!"); //getname은 패키지까지해서이름, simple네임은 클래스이름만
	}
	
	public void encounterSituation(String situation) {
		System.out.println("[상황발생!]" + situation);
		
		//전략이 없다면?초기값을 넣어준다. 기본적으로 개구쟁이니까
		if(this.strategy == null) {
			System.out.println("현재 전략 없음 무념무상상태");
			System.out.println("그냥놀고있어요~");
			return;
		}
		this.strategy.behave(situation); // 해당 상황의 동작을 수행하자.
		
	}
	

}

실제 행동을수행할 짱구. 짱구는 구체적인 행동 모두를 포함하는 상위인 인터페이스를 가지도록한다. 그리고 전략을 바꿀 수 있다.



package week6DesignLab;

public class Main {
	public static void main(String args[]) {
		짱구 a = new 짱구();
		
		//전략이 없는상황
		a.encounterSituation("내일 갑자기 시험을 본다!");
		//1. 엄마가 심부름 시키려고 해보자.
		a.setStrategy(new SleepStrategy());
		a.encounterSituation("엄마가 귀찮은 심부름을 시키려고 할 때");
		
		//2. 훈이가 괴롭힘당하는상황
		a.setStrategy(new ActionMaskStrategy());
		a.encounterSituation("훈이가 괴롭힘 당하고있어요");
		
		a.setStrategy(new DanceStrategy());
		a.encounterSituation("친구들과 놀이터에서 놀고있을 때");
		
		//
		a.setStrategy(new DanceStrategy());
		a.setStrategy(new SleepStrategy());
		a.setStrategy(new ActionMaskStrategy());
		
		
	}

}

 

실행결과 
근데 전략을 먼저 변경하고 -> 상황을 시키는게 뭔가 이상하다.

그럼 어떻게 해야할까...?  이후에 수정해보자....

'컴퓨터공학과 > Java 1 & 2' 카테고리의 다른 글

[Java]#12주차 . DB&JDBC 정리 및 실습복기  (0) 2025.11.16
[java] Gui (+Thread) 실습#6  (1) 2025.11.02
[Java] 커피메이커 리팩토링 - SOLID 원칙 적용 +V2,V3 | 추가패턴조사  (0) 2025.10.11
[Java] Thread  (0) 2025.09.22
[Java] Set과 Map  (0) 2025.09.17
'컴퓨터공학과/Java 1 & 2' 카테고리의 다른 글
  • [Java]#12주차 . DB&JDBC 정리 및 실습복기
  • [java] Gui (+Thread) 실습#6
  • [Java] 커피메이커 리팩토링 - SOLID 원칙 적용 +V2,V3 | 추가패턴조사
  • [Java] Thread
sihyes
sihyes
24학번 컴퓨터공학과
  • sihyes
    시혜적으로개발
    sihyes
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (114)
      • 단순 설정 (10)
      • 백엔드 공부(BE, AWS) (8)
        • 로그인&회원가입 (3)
        • 파일업로드&GPT (2)
      • 컴퓨터공학과 (51)
        • 운영체제 (0)
        • Artificial Intelligence (0)
        • Java 1 & 2 (23)
        • 컴퓨터네트워크 (3)
        • 모앱JavaScript (0)
        • Data structures (9)
        • 소프트웨어공학 (5)
        • 오픈SW플랫폼 제출용 (5)
        • Python - 문해프 (1)
      • 개인 프로젝트 (2)
        • 알바솔로몬 (1)
        • PLACO 프로젝트 (0)
      • 도서 공부(정리) (20)
        • 알고리즘 코딩 테스트 자바 편 (1)
        • SQL첫걸음 (8)
        • 코딩 자율학습 스프링 부트 3 자바 백엔드 개발 .. (6)
        • Do it! 지옥에서 온 문서 관리자 깃&깃허브 .. (5)
      • 개인공부정리페이지 (12)
        • 백준 & 프로그래머스 (3)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ㅇ
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.4
sihyes
[Java] SOLID 실습 짱구의 매너전략
상단으로

티스토리툴바