1. 전략 패턴이란?
알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘을 수정해서 쓸 수 있게 해주는 패턴이다.
2. 전략 패턴을 사용하는 이유?
오리의 종류에는 모형 오리, 장난감 오리, 청둥오리... 엄청나게 많은
오리가 존재한다.
그래서 오리라는 클래스를 만들어서 모든 종류의 오리가 공통된 기능을 상속받도록
제작할 것이다. 오리 클래스에는 오리가 가져야 할 기능인 울음 소리 메서드 Quack과
나는 메서드 Fly를 작성했다.
그렇게 오리의 종류 10만개에 오리 클래스를 상속 시켰고 Fly 메서드와 Quack 메서드를
오버라이드 해서 모두 기능을 작성했다.
여기서 생기는 1차적인 문제는 중복된 코드가 굉장히 많을 것이다.
나는 기능 3만개, 날지 못하는 기능 3만개, 로켓으로 나는 기능 4만개...이런 식으로 말이다.
아무튼 엄청난 노력으로 10만개의 클래스에 기능을 작성했지만
상사가 이렇게 말한다.
"날 수 있는 오리들의 Fly메서드를 부스터를 달아서 나는 메서드로
변경하라"
그럼 중복된 나는 기능 3만개를 다시 부스터를 달아서 나는 메서드로 변경해줘야한다.
여기서 생기는 문제점은 모든 오리의 기능을 파악하기 어려우며
기능 변경에 있어서 굉장히 취약하다는 것이다. -> 오류 발생 가능성 증가, 비효율적인 작업 증가
추가로 오리 클래스에 변경이 약간만 있어도 오리 클래스를 상속받는 10만개의 자식 오리 클래스에
영향이 갈 수 있다.
그래서 이러한 문제를 해결하기 위해 전략 패턴을 사용할 것이다.
오리 클래스에는 정말 변함없이 모두 공통적으로 사용할 기능만 적어놓고
파생될 수 있는 기능인 Fly와 Quack 은 인터페이스로 제작한다.
그럼 이 인터페이스를 상속받는 나는 행동들을 제작한다.
만들 종류로는 위에서 말한 날개로 날 수 있는 클래스 FlyWithWings,
날 수 없는 클래스 FlyNoWay, 로켓으로 나는 클래스 FlyRocketPowered를 제작할 것이다.
그럼 이 과정에서 나는 기능, 못 나는 기능, 로켓으로 나는 기능을 모듈화 했기 때문에
모든 종류의 오리들이 의존적이지 않고 독립적으로 갖다가 사용할 수 있다.
이뿐만 아니라 N만개의 중복코드가 생겼던 문제를 모듈 클래스로 해결할 수 있다.
예시를 들어서 설명하면
이런 형식으로 청둥오리 클래스에서 상속받는 오리 클래스에
내가 사용할 모듈 클래스를 직접 설정해준다.
그럼 청동오리의 종류가 3만개 있다고 가정하면 이 3만개의
청둥오리 클래스에서 FlyWithWings 모듈 클래스를 설정했을 것이다.
여기서 만약 상속만을 사용했다면 FlyWithWings 메서드에 변화가 생길 때
3만개의 코드를 수정해야 한다. 하지만 지금은 독립적으로 제작한 모듈을
사용했기 때문에 FlyWithWings 라는 클래스만 수정하면
문제를 해결할 수 있다.
결론
전략 패턴은 시스템의 재사용성과 유연성을 높이기 위해 사용한다.
'간단한 IT 지식' 카테고리의 다른 글
[오늘의 지식] OOP (Object-Oriented Programming) (0) | 2024.02.29 |
---|---|
[오늘의 지식] 바이트 정렬 (2) | 2024.02.28 |
[오늘의 지식] IPC (Inter Process Communication) (0) | 2024.02.26 |
[오늘의 지식] Unity에서 Enum형을 받을 때 주의점 (0) | 2024.02.23 |
[오늘의 지식] NGUI, UGUI (0) | 2024.02.22 |