일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- V2X
- 청년원가주택
- 리츠주택
- ESP-DL
- WPF
- SpringBoot
- ESP32
- 아두이노 개발
- 삼성의료원부지
- C-V2X
- 아두이노라이브러리
- C#
- ListView
- DataBinding
- spring
- C-ITS
- Ai
- http
- wave
- 아두이노
- Spring 웹
- ObjectNode
- 50만호공급
- 공릉아파트부지
- 구체화하기
- java programming
- 웹개발
- Spring 웹개발
- 대방동군부지
- onnxruntime
- Today
- Total
John's 개발자의 관심노트
JAVA Design Pattern, Strategy Pattern, 전략 패턴 본문
전략패턴 (Strategy Pattern) 이란 무엇인가?
전략패턴(Strategy Pattern) 또는 정책패턴 (Policy Pattern) 이라고도 불리는 이 패턴은,
특정한 계열의 여러개의 알고리즘들을 정의하고, 그 계열안에서 알고리즘 간에 상호 교체가 가능하도록 만드는 패턴이다.
즉, 여러개의 행동 패턴을 만들어두고, 필요에 의해서 행동의 패턴을 변경하고자 하는 경우,
동적으로 변경 가능하도록 만든 패턴이다.
전략패턴 (Strategy Pattern) 을 사용하는 이유!
예를들어 핸드폰 충전기를 생각해보면, 충전기의 방식을 여러개로 나누어 볼 수 있다.
아이폰 충전, 삼성폰 충전, 무선충전 등의 행위로 나눌 수 있고,
충전기는 어떤 충전을 할 것이냐에 따라 충전 방식이 바뀌게 된다.
이때, 충전기를 만들고 내부 내용을 아이폰 충전기로 구성을 했다면,
이후에 삼성폰 충전을 위해서는 그 내부 내용을 수정해주어야 하는데, 소규모 프로젝트에서는 그냥 몇줄 수정하고 말겠지만,
점차 대규모로 나아갈 수록 유지보수 측면에서 어려움이 생기며,
또 위와 같이 수정하는 방법은 SOLID 원칙을 위배하는 것이라고 한다.
SOLID 원칙에 대해서 아직 익숙하지 않아, 다음에 글로 포스팅을 하면서 좀 더 자세히 알아보아야 할 것 같다.
Example
위에서 예시로 들은 충전기를 예제코드로 작성해보려고한다.
충전기는 총 3가지의 행동방식을 정의하고, 1개의 충전기에서 3가지를 변경해보면서 충전하는 프로그램이다.
먼저 Charger Interface 를 만든다.
public interface ICharger {
public void charging();
}
그 다음, Samsung Phone 충전기를 만든다.
public class Samsung implements ICharger{
@Override
public void charging() {
System.out.println("Samsung Charger!");
}
}
IPhone 충전기,
public class Iphone implements ICharger{
@Override
public void charging() {
System.out.println("Iphone Charger!");
}
}
무선 충전기,
public class Wireless implements ICharger{
@Override
public void charging() {
System.out.println("Wireless Charger!");
}
}
이제 실제 사용할 충전기 클래스를 전략패턴을 이용해서 작성한다.
똑같이 "ICharger" Interface 를 구현해준다.
추가적으로, 내부 처리에서 충전방식을 변경할 수 있도록 변경 가능한 Method 또한 작성해준다.
public class Charger implements ICharger{
private ICharger charger;
@Override
public void charging() {
charger.charging();
}
public void setChargerType(ICharger charger){
this.charger = charger;
}
}
이렇게 해서 전략 패턴으로 작성한 충전기가 만들어지고 이를 Main() 에서 직접 사용해보면,
public class Main {
public static void main(String[] args) {
// 충전기 생성
Charger charger = new Charger();
// 아이폰 충전 타입으로 변경
charger.setChargerType(new Iphone());
charger.charging();
// 삼성폰 충전 타입으로 변경
charger.setChargerType(new Samsung());
charger.charging();
// 무선 충전 타입으로 변경
charger.setChargerType(new Wireless());
charger.charging();
}
}
위와 같은 코드를 만들 수 있고, 빌드 및 실행을 해보면 아래와 같은 결과를 볼 수 있다.
실제 웹 개발을 시작하게되면 전략패턴이 어떻게 사용될지는 아직 감이 잘 안잡힌다.
JAVA 에서 S/W 개발 시 사용하는 개발 패턴에 대해 알아보았는데, 아직까지는 실제로 어떻게 쓰여질지는
계속 공부해가면서 감을 익혀나가야 할 것 같다.
개인적으로 이해한 내용을 바탕으로 한 글이므로 잘못된 부분이 있다면 다양한 의견 부탁드립니다.
'[개발] > Spring WEB' 카테고리의 다른 글
HTTP Method 구현하기, "GET Method" with SpringBoot (0) | 2022.10.17 |
---|---|
HTTP Protocol Test 프로그램 사용법 "Talend API Tester" (0) | 2022.10.14 |
JAVA Design Pattern, Facade Pattern 파사드 패턴 (0) | 2022.10.13 |
JAVA Design Pattern, Proxy Pattern 프록시 패턴 (0) | 2022.10.12 |
JAVA Design Pattern, Adapter Pattern 어뎁터 패턴 (0) | 2022.10.12 |