우아한 프로그래밍
article thumbnail

안녕하세요.

오늘은 스트레지티패턴 (전략 패턴)에 대해서 설명을 해보도록 하겠습니다.

전략 패턴이 뭐냐고요?

말 그대로 전략입니다.

 

예를 들어보겠습니다.

전쟁에서의 전략은 무엇일까요? 영화 "명량"에서 보여주었던 이순신장군의 학익진 같은 것

혹은

수나라 군사를 몰살시켰던 을지문덕장군의 청천강에서의 전략

이라고 생각 할 수 있겠죠?

 

자 그럼 프로그래밍에서의 전략은 무었일까요?

아주 극단적인 예를 들어서

고객이 말합니다.

"A+B를 덧샘을 하는 메소드를 만들어주세요"

 

그럼 개발자는 생각하겠죠. A를 앞에 쓰고 B를 뒤에쓸까?

B를 앞에 쓰고 A를 뒤에써서 합산을 할까?

물론 결과는 똑같습니다.

하지만 알고리즘이 바뀌게 되지요?

 

바로 프로그래밍에서의 전략은 "알고리즘" 입니다.

다시 쉽게 풀어쓰면

어떤 작업을 수행하기 위해서 능동적으로 알고리즘을 변경 할 수 있는 패턴

이게 바로 스트레티지( 전략) 패턴 입니다.

 

 

그럼 아래의 구조도를 보시죠.

먼저 Interface Strategy는 합산하는 메소드인 add를 가지고 있습니다.

그리고 이 인터페이스를 구현한 MinusStrategy 클래스와

PlusStrategy 클래스가 있습니다.

이 클래스는 각각 100이라는 숫자를 더하고 빼는 등의 전략을 구사하는 클래스 입니다.

이 후 실제 이 전략을 가져다 쓰는 calculator 클래스를 만들었고

실제 이 클래스는 클라이언트 클래스인 Mian 클래스에서 사용됩니다.

 

폴더 구조를 보면 아래와 같습니다.

 

먼저 Main클래스를 보시면 Calculator클래스를 활용하여 계산을 수행하고 결과를

출력하고 있습니다.

 

Calculator 클래스를 보시면 생성자에 Strategy를 받아서 포함을 시키고

실제 add메소드가 호출이 되었을 때 Strategy클래스에게 위임시켜 결과를 리턴하고 있습니다.

Strategy가 Plus인지 Minus인지는 관심없습니다.

그저 위임하고 계산하여 값을 리턴할 뿐이지요.

 

스트레티지 클래스의 인터페이스는 아래와 같습니다.

 

Strategy 인터페이를 구현한 MinusStrategy클래스는 아래와 같습니다.

 

 

Strategy 인터페이를 구현한 PlusStrategy클래스는 아래와 같습니다.

 

생성자를 PlusStrategy로한 결과를 실행시키면 아래와 같습니다.

 

생성자를 MinusStrategy클래스로 변경을 하면 결과값은

 

아래 그림과 같이 바뀝니다.

profile

우아한 프로그래밍

@자바조아!

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!