본문 바로가기
목차훔치기/면접을 위한 CS 전공지식 노트

전략 패턴(면접을 위한 CS 전공지식 노트)

by 해삼2 2023. 8. 9.
728x90
반응형
전략 패턴

전략 패턴

전략 패턴은 소프트웨어 디자인 패턴의 하나로, 객체 지향 프로그래밍에서 자주 사용되는 개념입니다. 

이 패턴은 다양한 상황에서 유용하게 적용할 수 있는 알고리즘 또는 동작 방식을 캡슐화하고, 

이를 객체로 만들어 상황에 맞게 교체하거나 조합할 수 있는 유연성을 제공합니다. 

이를 통해 시스템의 유지 보수성과 확장성을 향상할 수 있습니다.

 

전략 패턴 구성 요소

전략(Strategy): 

알고리즘을 추상화한 인터페이스나 추상 클래스입니다. 

여러 다른 알고리즘들이 구체적으로 구현되어 이 인터페이스를 따르게 됩니다.

구체적인 전략(Concrete Strategies): 

실제 알고리즘 구현체로, 전략 인터페이스를 구현하여 특정한 동작을 수행하는 클래스들입니다.

전략 컨텍스트(Context): 

전략 객체를 사용하는 클래스입니다. 

콘텍스트는 전략 객체를 갖고 있으며, 필요할 때마다 해당 전략을 호출하여 원하는 작업을 수행합니다.

 

 

전략 패턴의 장점

유연성과 확장성:

전략 패턴은 새로운 알고리즘을 쉽게 추가하거나 기존 알고리즘을 변경하며 시스템을 확장할 수 있는

유연성을 제공합니다.

코드 재사용: 

비슷한 동작을 하는 알고리즘을 다양한 콘텍스트에서 재사용할 수 있습니다. 

이로써 코드 중복을 피하고 개발 시간을 단축시킬 수 있습니다.

가독성과 유지 보수성: 

전략 패턴은 각 알고리즘을 별도의 클래스로 분리하므로 코드가 더 간결하고 가독성이 높아지며, 

유지 보수가 용이해집니다.

런타임에 유연한 알고리즘 선택: 

컨텍스트는 런타임에 원하는 전략 객체를 선택하거나 변경할 수 있어서 동적으로 알고리즘을 선택할 수 

있습니다.

 

전략 패턴의 단점

클래스 증가:

많은 전략들이 필요한 경우, 클래스 수가 증가할 수 있습니다.

이로 인해 클래스 관리 및 프로젝트 크기 증가에 대한 고려가 필요합니다.

복잡성 증가: 

전략 패턴을 적용하면 알고리즘과 콘텍스트 간의 통신이 더 복잡해질 수 있습니다. 

이로 인해 코드가 복잡해질 수 있습니다.

오버헤드: 

런타임에 알고리즘을 교체하거나 선택하는 과정에서 약간의 오버헤드가 발생할 수 있습니다. 

하지만 대부분의 경우 이런 오버헤드는 미미합니다.

알고리즘 변경 빈도가 낮을 경우 불필요: 

알고리즘 변경이 매우 드물거나 거의 없는 경우에는 전략 패턴을 적용하는 것이 불필요할 수 있습니다.

전략 패턴은 많은 경우에 유용하지만, 프로젝트의 요구사항과 복잡성을 고려하여 사용해야 합니다. 

견고한 설계와 관리가 필요한 상황에서 장점을 최대한 활용할 수 있습니다.

 

전략 패턴 자세히 알기!

해성이는 수학, 영어, 과학 과목을 공부하고 있습니다. 각 과목마다 시험을 보며, 각각 다른 점수 

계산 방식이 적용됩니다. 

전략 패턴을 이용하면 이러한 다양한 점수 계산 방식을 더 유연하게 관리할 수 있습니다.


전략(Strategy): 

시험 점수를 계산하는 방식을 추상화한 인터페이스입니다. 

이렇게 인터페이스를 만들면 다른 점수 계산 방식을 쉽게 추가할 수 있습니다.

* '추상화한 인터페이스'란 것은 어떤 특정한 개념이나 기능을 표현하기 위해 필요한 공통된 특성을 정의한 것입니다. 


구체적인 전략(Concrete Strategies): 

수학, 영어, 과학과 같이 각 과목마다 다른 점수 계산 방식을 구체적으로 정의합니다. 

이 구체적인 전략들은 모두 전략 인터페이스를 구현합니다.

전략 컨텍스트(Context): 

해성이의 시험 점수를 계산하는 클래스입니다. 

이 클래스는 어떤 전략을 사용할지 결정하고, 해당 전략에 따라 점수를 계산합니다.

해성이가 시험을 보고 점수를 받을 때마다, 콘텍스트는 해당 과목의 점수 계산 전략을 설정하고, 

그에 따라 점수를 계산합니다. 

이렇게 해서 해성이는 각 과목마다 다른 점수 계산 방식을 적용받을 수 있게 되는 것입니다.

 

 

*바쁜 사람을 위한 깜찍한 정리

전략 패턴이란 소프트웨어 디자인 패턴 기술중 하나로 객체 지향에서 많이 사용되고 어떤 상황에 맞춰 알고리즘을 만들어 놓아서 다양한 상황에서 유용하게 적용할 수 있게 만드는 것으로 교체하거나 조합할 수 있는 유연성을 제공하는 것이 전략 패턴이라고 합니다. 예를 들어 슈퍼마켓에서 다양한 제품들의 가격 기준을 해당 물가에 비례에 맞게 가격을 만들어 놓는 알고리즘을 만들면 객체 즉 제품만 추가해 주면 그 만들어진 알고리즘을 사용해 개발 속도와 코드를 재활용할 수 있습니다. 즉 api를 만들어 놓는 것을 의미하는 것 같다.
728x90
반응형