CS

[CS] 디자인 패턴 - 전략 패턴

장아장 2023. 4. 30. 21:11

싱글톤과 팩토리 패턴의 디자인은 만들면서 새롭다는 느낌, 활용하기 좋다는 느낌을 받았다. 

'객체지향의 사실과 오해' 책을 보면서 이를 팩토리 패턴과 함께 활용하면 좋겠다, 싱글톤 패턴의 아쉬운 부분들이 무엇일까를 고민하게 해주었다. 

 

하지만, 이와 반대로 전략 패턴은 오히려 객체지향의 사실과 오해에서 공부했던 부분들을 하나의 패턴으로써 정의했다고 생각한다. 

전략패턴이라는 것이 무엇일까?

소스코드 : https://github.com/JangAJang/cs/tree/main/src/design/strategy


전략패턴이란?

전략패턴을 이해하는 과정에서 객체지향의 사실과 오해 3장에서 배웠던 추상화를 생각나게 한다. 

객체들의 역할은 대체될 수 있다는 문구가 있었다. 

A라는 역할을 수행하는 a객체가 있는데, b라는 객체가 A라는 역할을 대체할 수 있다는 뜻이다. 

 

이를 반대로 보면, A라는 역할을 수행하게 만들어두면, a객체건, b객체건 일을 수행할 수 있게 해주는 것이다. 

반대로 A라는 역할을 수행할 때, a와 b가 일을 수행하는 방식이 서로 다를 때, 이를 각자에 맞게 캡슐화 시킨 알고리즘으로 조작할 수 있다는 뜻이다. 

 

이렇게, 각자의 전략에 따라 일을 수행하게 해주는 패턴이라고 생각한다. 


자바로 만들어보기

자바로 구현하는 과정은 크게 어렵지 않았다. 

객체의 역할을 인터페이스로 만든다 - 해당 인터페이스를 파라미터로 받는 기능을 구현한다 - 인터페이스를 구현한 객체의 동작과정은 해당 객체 내의 코드로 구현한다. 

정도로 생각을 했다. 

 

코드로 만든 과정은, 웹페이지 결제 방식을 생각했다. 

카트에 사려는 항목을 담아둔다. 쇼핑카트.결제(결제수단) 의 형식으로, 결제수단의 역할(인터페이스)를 이용한 로직으로 구현한다. 

결제수단의 역할을 하는 현금, 신용카드에서 각자 객체에 맞게 결제방식을 구현한다(인터페이스 Override)

이렇게 결제수단이라는 역할을 생성했다.
장바구니는 checkPayment라는 메시지를 통해 결제수단을 활용한다
결제 수단의 역할을 하는 카드와 현금은 각자의 기능에 맞게 PaymentStrategy역할의 기능인 지불 메시지를 전달할 수 있다.

이런 식으로 구현했을 때, 장바구니는 현금과 카드 중에 각 상황에 맞게 사용할 수 있다. 또한, 현금과 카드는 각자의 전략에 맞게 '지불' 이라는 기능을 수행할 수 있게 된다. 


개인적인 느낌

전략패턴은, 어찌보면 우리가 무의식적으로 사용하고 있던 방식이 하나의 표본으로써 보여질 수 있다는 느낌을 받았다. 

우아한 테크코스에서도 interface를 이용한 코드를 요구하기도 했다. 

사실 이러한 방식이 하나의 패턴으로써, 즉 하나의 표본으로써 정의된 방식이었다는 것을 느꼈다. 

 

우리가 지금까지 공부해온 것들 중에, 우리가 가볍게 읽고 넘기고, 아무렇지 않게 써오던 기술들도 어쩌면 기능적으로 누군가에 의해

정의된 '전형적인 구조' 일 수 있다는 느낌도 든다. 

과거의 공부를 가볍게 넘기지 말아야겠다고 생각한다. 

사실 이 부분을 읽고 싱글톤 패턴을 다시 공부해보기도 했다. 

 

우리가 기본적으로 구현하는 방식들이 싱글톤 패턴이라는 이야기를 들었다. 

그렇기에 가볍게 공부하고 넘어가기도 했는데, 이 부분도 어찌보면 다시 돌아봐야 할 수 있다고 느낀다. 

우리가 항상 썼기에, 가볍게 넘길 수 있을까? 라는 생각도 든다. 

 

오늘은 뭔가 새로운 무언가를 공부하는 것도 있지만, 과거의 것들을 다시 한번 돌아봐야겠다는 생각이 든다. 

 

그럼...twenty thousand...🔥

'CS' 카테고리의 다른 글

[CS] 디자인 패턴 - 옵저버 ( 야 야 너 뭐하냐? )  (1) 2023.05.09
[CS] 디자인 패턴 - 팩토리  (0) 2023.04.21
[CS] 디자인 패턴 - 싱글톤  (0) 2023.04.21