소프트웨어 개발하다보면요, "이거 진짜 나만 겪는 문제인가?" 싶은 순간 많잖아요 ㅠㅠ
분명히 뭔가 잘 만들어봤는데... 유지보수 들어가면 코드가 날개 없이 추락하는 느낌?
그럴 때마다 드는 생각은 하나... "아 누가 이거 미리 좀 정리해놨으면 얼마나 좋을까~!" 였는데요!
그런데 말입니다!
GoF(Gang of Four) 디자인 패턴이 딱 그 역할을 해준답니다!
소프트웨어 설계하면서 자주 겪는 문제들을 미리 유형화해서,
“이럴 땐 이렇게~” 하고 쓸 수 있도록 정리해놓은 디자인 패턴 모음집이라고 보면 됩니당!
개발 초심자든, 어느정도 짬이 된 분이든 한 번쯤 들어봤을
추상 팩토리, 싱글톤, 어댑터, 옵저버... 이런 이름들!
이 글에서는 그런 GoF 패턴들, 도대체 왜 쓰는 건지~ 어떻게 분류되는지~
그리고 각각이 어떤 상황에서 필요한지 요약해서 정리해드릴게요!
막 코드 예제 잔뜩 들이미는 글 아니구요~
개념 위주로, 설명 위주로, 아~ 이런 거구나 싶게 풀어봤어요ㅎㅎ
이거 한 번 읽고 나면 코드 짤 때 머릿속에 전략 하나쯤 더 챙겨가는 기분 드실걸요?!
생성 패턴? 객체를 '어떻게 만들지'가 핵심이에요 🔧
이 패턴들은 말 그대로 객체를 '어떻게' 만들지를 정하는 패턴들이에요.
왜냐면 객체를 막 아무 데서나 만들면 유지보수하다 진짜 지옥을 맛보게 되거든요ㅋㅋ
예를 들어, "싱글톤 패턴"은 딱 하나만 존재해야 하는 객체를 만들 때 써요.
그거 아시죠? 앱에서 설정 같은 건 하나만 있으면 되잖아요?
그런 거 만들 때 엄청 유용하구요~
그 외에 "추상 팩토리"나 "빌더", "팩토리 메서드" 등은
서로 다른 조건에서도 일관성 있게 객체를 생성할 수 있도록 도와줘요!
특히 빌더 패턴은 진짜 복잡한 객체 만들 때, 순서대로 만들 수 있어서 좋더라구요!
구조 패턴은 조립의 기술! 🏗️
구조 패턴은 말 그대로 '구조'에 관련된 거예요.
객체들이 어떻게 연결돼서 큰 시스템을 이루는지에 대한 방식?
쉽게 말하면 "레고 블럭을 어떻게 끼울지" 정하는 느낌이랄까용ㅎㅎ
예를 들어 "어댑터 패턴"은 A랑 B가 원래 안 맞는데
중간에 연결해주는 거죠! 충전기 변환 어댑터 생각하시면 딱이에요ㅋㅋ
"퍼사드"는 복잡한 시스템을 단순한 인터페이스 하나로 감싸는 거고,
"데코레이터"는 기존 기능에 덧붙이는 식으로 확장할 때 쓰여요~
딱히 상속하지 않고도 기능 확장 가능해서 유연성 최고👍
행동 패턴은... 객체들의 '대화법'이에요! 🗣️
행동 패턴은 객체들이 '어떻게 상호작용하냐'에 중점을 둔 거예요.
객체들이 역할을 나누고 협력하는 구조라서,
복잡한 흐름도 깔끔하게 정리할 수 있게 해줘요!
대표적으로는 "옵저버" 패턴! 하나의 상태가 바뀌면, 그걸 구독하는 객체들이 다 반응하는 거죠~
뉴스 알림, 이메일 알림 이런 데 많이 쓰이구요!
"커맨드 패턴"은 요청을 하나의 객체로 만들어버려서
요청을 큐에 담아 처리하거나 로그로 남기기 좋아요.
되돌리기 기능 만들 때 특히 유용하쥬~
왜 이렇게 쪼개서 패턴을 나눴을까용?
이유는 간단해요. '관심사 분리' 때문이에요.
무엇을 만들지, 어떻게 연결할지, 어떻게 상호작용할지를
각각 따로 설계할 수 있어야 진짜 유연하고 관리 잘 되는 시스템이 되거든요!
만약 모든 걸 한 클래스가 다 처리하게 만들면요...
버그 한 번 나면 어디서 터졌는지도 모르고, 고치기도 엄청 빡세요ㅠㅠ
그래서 이 패턴들은, 각자의 책임을 잘게 나눠서
모듈성 있게, 재사용 가능하게 코드를 짤 수 있도록 도와주는 거죠!
"디자인 패턴" 하면 괜히 어려워 보이지만요~
솔직히 처음엔 생소한 이름들 때문에 머리 터질 뻔했거든요ㅋㅋ
근데 알고 보면 일상 속에 있는 패턴들이더라구요~
예를 들어 데코레이터 패턴?
카페에서 커피에 시럽 추가하는 거랑 똑같아요!
팩토리 패턴은 편의점 도시락처럼
같은 포맷으로 다양한 메뉴 찍어내는 느낌~
이런 식으로 일상 비유랑 함께 보면 금방 이해돼요ㅎㅎ
무조건 암기하려고 하지 말고,
"이거 어디서 써봤지?" 느낌으로 접근하면 좋아요!
그래서, 어떤 패턴부터 써야 할까?
정답은... 상황 따라 달라요ㅋㅋ
어떤 문제가 자주 생기냐에 따라 달라지고,
시스템 크기나 유지보수 관점에서도 선택이 달라져야 해요!
그치만, 처음엔 싱글톤, 팩토리 메서드, 옵저버 정도부터 익혀보는 걸 추천해요~
실제 프로젝트에서 자주 쓰이거든요!
익숙해지면 브리지나 전략, 커맨드 패턴도 하나씩 익혀보구요!
실무에서 딱 한 줄 써먹을 수 있는 패턴 하나만 챙겨도
개발자로서 한 단계 성장한 기분 든다구요ㅎㅎ
알고 보면 헷갈리는 포인트들... 😵💫
생성 패턴은 전부 객체 생성 관련인가요?
맞아요! 다만 그 방식이 조금씩 달라요~
단순하게 하나만 만드는 '싱글톤'부터,
복잡한 구조의 객체를 순서대로 만드는 '빌더',
복사해서 만드는 '프로토타입'까지…
'언제 어떤 방식으로 만들면 더 좋을까?'를 고민할 때 등장하는 게 생성 패턴들이에요.
데코레이터랑 상속은 뭐가 다른가요?
둘 다 기능을 확장하는 방식인데요~
상속은 미리 정해진 틀을 따르는 느낌이라면,
데코레이터는 '필요할 때만 추가'하는 느낌이에요.
예를 들어 아이스크림에 시럽 뿌릴 때,
그때그때 골라서 뿌리는 게 데코레이터에 더 가까워요ㅋㅋ
옵저버 패턴이랑 이벤트 리스너는 같은 건가요?
비슷하지만 미묘하게 달라요!
옵저버 패턴은 '구독-발행' 구조고,
이벤트 리스너는 '콜백 기반'에 가까운 구조죠~
실제로 구현은 비슷하게 느껴지지만,
옵저버는 더 일반화된 개념이라고 보면 됩니다!
한번쯤 정리해두면 진짜 도움돼요 📌
처음엔 이름부터 어렵고… 어디다 써야 할지도 모르겠고...
막막했던 기억이 나요ㅠㅠ
근데 하나하나 정리해보고, 일상에 비유해보니까
조금씩 머릿속에 그려지더라구요~
어느 날 갑자기 "이 상황엔 옵저버가 필요하겠다!" 하고 떠오를 때,
"와 나 진짜 성장했구나~" 싶었어요ㅎㅎ
꼭 다 외우려고 하지 않아도 돼요.
그저 '이런 게 있었지!' 하고 기억만 해놔도 충분합니다!
여러분은 어떤 패턴을 자주 쓰시나요? 🧐
개발하면서 자주 마주치는 상황들 있잖아요~
그럴 때 무의식적으로 쓰고 있는 패턴도 있을 거예요!
혹시 기억나는 패턴 있으시면 댓글로 같이 공유해봐요ㅎㅎ
이 글 보시는 분들끼리도 서로 아이디어 얻을 수 있지 않을까요?👀
저도 요즘 '상태 패턴'에 푹 빠져 있어서
곧 그것만 따로 정리해서 올려보려구요💡
'Programming > 디자인패턴' 카테고리의 다른 글
옵저버 패턴(Observer Pattern), 왜 이렇게 많이 쓰일까?! 👀 (1) | 2025.03.07 |
---|