Home
home
🏡 홈
home

디자인 패턴의 비판적 견해

분류
개발지식
태그
Design Pattern
작성자
작성일
2024/04/28 10:06
디자인 패턴은 소프트웨어 개발중 자주 발생하는 문제들을 해결하기 위한 맞춤형 개발 방식이다. 하지만, 많은 개발자들이 디자인 패턴을 처음 접하고 패턴을 만능 해결책으로 여기고 남용하는 경우가 많다. 패턴에 대한 오해들을 중심으로 올바른 사용법에 대해 생각해보자.

디자인 패턴에 대한 오해

1.
모든 상황에 있어서 대응할 수 있는 만능 해결책이다.
2.
패턴은 교과서처럼 정해진 것이며, 새로운 패턴이란 존재하지 않는다.
3.
현대의 모든 개발자들은 패턴에 대해 긍정적이다.
위의 1~3번은 개발자 입장에서 접할 수 있는 오해들을
생각나는 데로 정리해 본 것이다.
아래에서 조금 더 상세히 다뤄보려고 한다.

1. 디자인 패턴은 만능 해결책 ?

많은 초보자는 패턴을 갓 배운 후,
더 간단한 코드로도 문제 해결이 되는 상황에도 모든 곳에 패턴을 적용하려고 한다.
이것은 최근에 패턴에 익숙해진 많은 초보자를 괴롭히는 문제이다. (블로그 참고) 패턴은 특정한 문제 해결을 위한 일반적인 지침을 제공할 뿐이며,
모든 문제에 대해 완벽한 해결책을 제공하지는 않는다. 아래코드를 예시로 들어보자.
class Singleton { private static $instance; private function __construct() {} public static function getInstance() { if (!isset(self::$instance)) { self::$instance = new self(); } return self::$instance; } } $instance1 = Singleton::getInstance(); $instance2 = Singleton::getInstance(); var_dump($instance1 === $instance2); // 결과: true
PHP
복사
위 코드는 php 로 싱글톤 패턴을 구현한 것이다.
싱글톤의 목적은 인스턴스가 한번만 생성됨을 통해 얻는
전역 인스턴스의 중복제한과 성능적인 이점 등을 볼 수 있다.
하지만, 싱글톤을 사용할 필요없는 코드에서 사용하게 되면
오히려 혼란만 주고 성능을 저하시킬 수 있는 요소가 되며,
치명적인 코드오류를 발생시킬 수 있다.
따라서, 패턴의 용도를 정확히 파악하고,
학습과 경험을 통해 올바르게 사용하는 게 중요하다.

2. 패턴은 고정되어 있다 ?

실제로 많은 개발자들이 패턴을 교과서라도 된 마냥 정해진 규칙으로 여겨 따라하는 경우가 많다.
하지만, 개발 커뮤니티에서는 지속적으로 새로운 패턴이 발견되거나 개발되고 있으며,
기존의 패턴을 조합하거나 변형시켜 새로운 문제에 대응할 수 있다.
아래의 예시는 람다함수가 적극적으로 사용되면서,
전략(Strategy)패턴을 쓰지 않고도, 그 목적을 어느 정도 달성할 수 있게 된 경우이다.
이를 통해 패턴은 지속적으로 발전하고 변화되고 있다는 것을 알 수 있다.
// 전략 인터페이스 interface Strategy { public function execute($data); } // 전략 클래스들 class ConcreteStrategyAdd implements Strategy { public function execute($data) { return $data + 10; } } class ConcreteStrategySubtract implements Strategy { public function execute($data) { return $data - 5; } } // 컨텍스트 클래스 class Context { private $strategy; public function setStrategy(Strategy $strategy) { $this->strategy = $strategy; } public function executeStrategy($data) { return $this->strategy->execute($data); } } // 람다 함수를 이용한 전략 패턴 사용 $context = new Context(); // 덧셈 전략 $context->setStrategy(new class implements Strategy { public function execute($data) { return $data + 10; } }); echo $context->executeStrategy(5); // Output: 15 // 뺄셈 전략 $context->setStrategy(new class implements Strategy { public function execute($data) { return $data - 5; } }); echo $context->executeStrategy(10); // Output: 5
PHP
복사

3. 모든 개발자들은 대부분 패턴을 긍정적으로 본다 ?

물론, 비율적으로 봤을 때 패턴을 긍정하고 적극 사용하는 추세이긴 하지만,
그렇다고 모든 개발자들이 긍정하는 것 또한 아니다.
아래는 패턴에 대한 부정적인 견해를 가질만한 대상과 상황들을
5가지로 정리해본 내용들이다.
1.
경험과 업계 지식이 풍부한 개발자들: 고급 개발자들이 종종 디자인 패턴을 사용하기보다는 간결하고 직접적인 솔루션을 선호합니다. 이들은 실제 상황에 따라 상황에 맞게 코드를 작성하는 것을 선호합니다.
2.
기술적으로 진보한 개발자들: 새로운 언어 및 기술을 활용하여 전통적인 패턴을 대체할 수 있는 더 간결하고 성능이 우수한 솔루션을 찾는 경향이 있습니다.
3.
함수형 프로그래밍을 선호하는 개발자들: 함수형 프로그래밍을 선호하는 개발자들은 람다 함수와 같은 기능을 통해 디자인 패턴을 대체할 수 있다고 주장합니다. 이들은 상태 변경을 피하고 불변성을 유지하는 함수형 스타일을 선호합니다.
4.
빠른 개발과 배포를 중시하는 업계: 애자일 및 린 스타트업과 같이 빠른 개발과 배포를 추구하는 기업에서는 시간을 절약하고 코드를 간결하게 유지하는 것이 중요시됩니다.
5.
디자인 패턴의 복잡성에 대한 우려: 일부 개발자들은 디자인 패턴을 사용할 때의 복잡성과 오버 엔지니어링에 대한 우려를 가집니다. 이들은 패턴의 오용으로 인한 코드의 복잡성과 이해하기 어려움을 우려합니다.
고급 개발자로 갈수록 패턴에 의지하거나 남발하는 것보다는
문제에 맞는 최적의 솔루션을 찾기 위해 조심스럽게 사용하거나,
혁신적인 솔루션을 위한 새로운 패턴을 연구하는 걸 선호하기도 한다.
최근 자바스크립트나 파이썬같은 스크립트 언어가 성행하면서
패턴이 오히려 자율도를 방해하는 측면도 없지 않다.

마무리

디자인패턴은 개발자들이 자주 겪는 문제들을 해결해 주어
최적화된 프로그래밍을 할 수 있도록 도와준다.
하지만, 맹목적으로 사용하게 되어 더 나은 모델 설계의 방향을 막고
비효율적인 코드를 발생 시킬 수 있는 원인이 되기도 한다.
패턴의 용도와 목적을 정확히 학습하고
많은 경험을 통해 최적의 솔루션을 개발하기 위한 도구로 사용하는 것이
올바른 디자인 패턴 사용법이라고 생각한다.

참고