전략 패턴
전략 패턴
전략 패턴은 소프트웨어 디자인 패턴의 하나로, 객체 지향 프로그래밍에서 자주 사용되는 개념입니다.
이 패턴은 다양한 상황에서 유용하게 적용할 수 있는 알고리즘 또는 동작 방식을 캡슐화하고,
이를 객체로 만들어 상황에 맞게 교체하거나 조합할 수 있는 유연성을 제공합니다.
이를 통해 시스템의 유지 보수성과 확장성을 향상할 수 있습니다.
전략 패턴 구성 요소
전략(Strategy):
알고리즘을 추상화한 인터페이스나 추상 클래스입니다.
여러 다른 알고리즘들이 구체적으로 구현되어 이 인터페이스를 따르게 됩니다.
구체적인 전략(Concrete Strategies):
실제 알고리즘 구현체로, 전략 인터페이스를 구현하여 특정한 동작을 수행하는 클래스들입니다.
전략 컨텍스트(Context):
전략 객체를 사용하는 클래스입니다.
콘텍스트는 전략 객체를 갖고 있으며, 필요할 때마다 해당 전략을 호출하여 원하는 작업을 수행합니다.
전략 패턴의 장점
유연성과 확장성:
전략 패턴은 새로운 알고리즘을 쉽게 추가하거나 기존 알고리즘을 변경하며 시스템을 확장할 수 있는
유연성을 제공합니다.
코드 재사용:
비슷한 동작을 하는 알고리즘을 다양한 콘텍스트에서 재사용할 수 있습니다.
이로써 코드 중복을 피하고 개발 시간을 단축시킬 수 있습니다.
가독성과 유지 보수성:
전략 패턴은 각 알고리즘을 별도의 클래스로 분리하므로 코드가 더 간결하고 가독성이 높아지며,
유지 보수가 용이해집니다.
런타임에 유연한 알고리즘 선택:
컨텍스트는 런타임에 원하는 전략 객체를 선택하거나 변경할 수 있어서 동적으로 알고리즘을 선택할 수
있습니다.
전략 패턴의 단점
클래스 증가:
많은 전략들이 필요한 경우, 클래스 수가 증가할 수 있습니다.
이로 인해 클래스 관리 및 프로젝트 크기 증가에 대한 고려가 필요합니다.
복잡성 증가:
전략 패턴을 적용하면 알고리즘과 콘텍스트 간의 통신이 더 복잡해질 수 있습니다.
이로 인해 코드가 복잡해질 수 있습니다.
오버헤드:
런타임에 알고리즘을 교체하거나 선택하는 과정에서 약간의 오버헤드가 발생할 수 있습니다.
하지만 대부분의 경우 이런 오버헤드는 미미합니다.
알고리즘 변경 빈도가 낮을 경우 불필요:
알고리즘 변경이 매우 드물거나 거의 없는 경우에는 전략 패턴을 적용하는 것이 불필요할 수 있습니다.
전략 패턴은 많은 경우에 유용하지만, 프로젝트의 요구사항과 복잡성을 고려하여 사용해야 합니다.
견고한 설계와 관리가 필요한 상황에서 장점을 최대한 활용할 수 있습니다.
전략 패턴 자세히 알기!
해성이는 수학, 영어, 과학 과목을 공부하고 있습니다. 각 과목마다 시험을 보며, 각각 다른 점수
계산 방식이 적용됩니다.
전략 패턴을 이용하면 이러한 다양한 점수 계산 방식을 더 유연하게 관리할 수 있습니다.
전략(Strategy):
시험 점수를 계산하는 방식을 추상화한 인터페이스입니다.
이렇게 인터페이스를 만들면 다른 점수 계산 방식을 쉽게 추가할 수 있습니다.
* '추상화한 인터페이스'란 것은 어떤 특정한 개념이나 기능을 표현하기 위해 필요한 공통된 특성을 정의한 것입니다.
구체적인 전략(Concrete Strategies):
수학, 영어, 과학과 같이 각 과목마다 다른 점수 계산 방식을 구체적으로 정의합니다.
이 구체적인 전략들은 모두 전략 인터페이스를 구현합니다.
전략 컨텍스트(Context):
해성이의 시험 점수를 계산하는 클래스입니다.
이 클래스는 어떤 전략을 사용할지 결정하고, 해당 전략에 따라 점수를 계산합니다.
해성이가 시험을 보고 점수를 받을 때마다, 콘텍스트는 해당 과목의 점수 계산 전략을 설정하고,
그에 따라 점수를 계산합니다.
이렇게 해서 해성이는 각 과목마다 다른 점수 계산 방식을 적용받을 수 있게 되는 것입니다.
*바쁜 사람을 위한 깜찍한 정리
전략 패턴이란 소프트웨어 디자인 패턴 기술중 하나로 객체 지향에서 많이 사용되고 어떤 상황에 맞춰 알고리즘을 만들어 놓아서 다양한 상황에서 유용하게 적용할 수 있게 만드는 것으로 교체하거나 조합할 수 있는 유연성을 제공하는 것이 전략 패턴이라고 합니다. 예를 들어 슈퍼마켓에서 다양한 제품들의 가격 기준을 해당 물가에 비례에 맞게 가격을 만들어 놓는 알고리즘을 만들면 객체 즉 제품만 추가해 주면 그 만들어진 알고리즘을 사용해 개발 속도와 코드를 재활용할 수 있습니다. 즉 api를 만들어 놓는 것을 의미하는 것 같다.
'목차훔치기 > 면접을 위한 CS 전공지식 노트' 카테고리의 다른 글
이터레이터 패턴(면접을 위한 CS 전공지식 노트) (0) | 2023.08.12 |
---|---|
프록시 패턴과 프록시 서버(면접을 위한 CS 전공지식 노트) (0) | 2023.08.11 |
옵저버 패턴(면접을 위한 CS 전공지식 노트) (0) | 2023.08.10 |
팩토리 패턴(면접을 위한 CS 전공지식 노트) (0) | 2023.08.08 |
싱글톤 패턴(면접을 위한 CS 전공지식 노트) (0) | 2023.08.07 |