피자가게로 이해하는 디자인 패턴2026.05.21피자가게로 이해하는 디자인 패턴pizza-design-patterns-series#gof#object-oriented#design-patterns2026.05.21피자가게로 이해하는 디자인 패턴pizza-design-patterns-series#gof#object-oriented#design-patterns에이든 피자는 처음부터 복잡한 시스템을 만들 생각이 없었다. 처음에는 메뉴 몇 개만 만들면 됐다. 그런데 손님은 커스텀 주문을 넣기 시작했고, 주방은 상태를 나눠야 했고, 결제와 배달앱과 알림이 하나씩 붙었다. 코드도 가게를 닮는다. 장사가 잘될수록 이상하게 더 쉽게 망가진다. 디자인…
7. Decorator — 토핑 추가할 때마다 클래스를 새로 만들 수 없다2026.05.217. Decorator — 토핑 추가할 때마다 클래스를 새로 만들 수 없다pizza-design-patterns-series#gof#object-oriented#design-patterns2026.05.217. Decorator — 토핑 추가할 때마다 클래스를 새로 만들 수 없다pizza-design-patterns-series#gof#object-oriented#design-patterns에이든 피자에서 주문서를 객체로 만들자 취소와 재주문은 한결 편해졌다. 그런데 주문이 편해지자 손님들도 한결 편해졌다. 편해진 손님은 더 많은 요구를 한다. "치즈 추가요", "올리브도 추가요", "소스 많이요", "조금 더 바삭하게 구워주세요" 같은 요청이 주문대 위로 쌓이기 시작했다…
6. Command — 주문서를 객체로 만들면 취소도 재주문도 쉬워진다2026.05.216. Command — 주문서를 객체로 만들면 취소도 재주문도 쉬워진다pizza-design-patterns-series#gof#object-oriented#design-patterns2026.05.216. Command — 주문서를 객체로 만들면 취소도 재주문도 쉬워진다pizza-design-patterns-series#gof#object-oriented#design-patterns에이든 피자의 시범 운영이 어느덧 일주일을 향해 가고 있다. 주방은 이제 제법 능숙하게 피자를 구워내고, 포스기(POS) 시스템도 팩토리 메서드 덕분에 다양한 지점 메뉴를 무리 없이 받아낸다. 하지만 시스템이 안정될수록 요구사항은 더 정교해지기 마련이다. 오늘은 주문 그 자체가 문제가…
5. Singleton — 주방은 하나다, 그리고 그게 전부가 아니다2026.05.215. Singleton — 주방은 하나다, 그리고 그게 전부가 아니다pizza-design-patterns-series#gof#object-oriented#design-patterns2026.05.215. Singleton — 주방은 하나다, 그리고 그게 전부가 아니다pizza-design-patterns-series#gof#object-oriented#design-patterns에이든 피자의 시범 운영이 닷새째에 접어들자, 이제 주문 번호가 필요해졌다. 처음에는 대충 손으로 적어도 됐다. 하지만 주문이 늘어나자 직원들은 번호표를 붙이고, 주방은 그 번호를 기준으로 피자를 만들고, 손님은 그 번호를 보고 자기 피자를 찾아갔다. 장사가 너무 잘 되자 직원 하나가…
4. Prototype — 단골 손님은 항상 같은 걸 시킨다2026.05.214. Prototype — 단골 손님은 항상 같은 걸 시킨다pizza-design-patterns-series#gof#object-oriented#design-patterns2026.05.214. Prototype — 단골 손님은 항상 같은 걸 시킨다pizza-design-patterns-series#gof#object-oriented#design-patterns에이든 피자에는 벌써 단골이 생겼다. 시범 운영 중인 가게에 단골이 생긴다는 건 좋은 일이다. 문제는 그 단골이 매번 꽤 복잡한 커스텀 피자를 주문한다는 점이다. 씬 도우, 토마토 소스, 모차렐라, 페퍼로니, 블랙 올리브, 웰던. 주문을 받을 때마다 Builder 체인을 다시 쓰다 보니…
3. Abstract Factory — 이탈리아 세트와 미국 세트, 재료부터 다르다2026.05.213. Abstract Factory — 이탈리아 세트와 미국 세트, 재료부터 다르다pizza-design-patterns-series#gof#object-oriented#design-patterns2026.05.213. Abstract Factory — 이탈리아 세트와 미국 세트, 재료부터 다르다pizza-design-patterns-series#gof#object-oriented#design-patterns에이든 피자에 세트 메뉴가 생겼다. 피자만 팔던 시절에는 메뉴 하나만 잘 만들면 됐지만, 세트 메뉴는 피자와 사이드와 음료가 함께 움직인다. 이탈리아 세트에는 화덕 마르게리타, 브루스케타, 에스프레소가 들어가고, 미국 세트에는 팬 피자, 치킨 윙, 콜라가 들어간다. 여기까지는 아름답다.…
2. Builder — 생성자 인자가 일곱 개 넘으면 읽기 싫어진다2026.05.212. Builder — 생성자 인자가 일곱 개 넘으면 읽기 싫어진다pizza-design-patterns-series#gof#object-oriented#design-patterns2026.05.212. Builder — 생성자 인자가 일곱 개 넘으면 읽기 싫어진다pizza-design-patterns-series#gof#object-oriented#design-patterns에이든 피자의 시범 운영 둘째 날, 역시 내 피자가 맛있었는지 어제 왔던 손님들이 또 왔다. 그런데 어제는 마르게리타와 페퍼로니 중 하나를 고르던 사람들이 이제는 도우를 바꾸고, 소스를 줄이고, 치즈를 더하고, 올리브는 빼고, 굽기는 바삭하게 해달라고 말하기 시작했다. 손님 입장에서는…
1. Factory Method — 메뉴가 늘어날수록 if-else가 길어진다2026.05.211. Factory Method — 메뉴가 늘어날수록 if-else가 길어진다pizza-design-patterns-series#gof#object-oriented#design-patterns2026.05.211. Factory Method — 메뉴가 늘어날수록 if-else가 길어진다pizza-design-patterns-series#gof#object-oriented#design-patterns아, 누가 개발자 인생의 끝은 치킨집이라 했던가. 나는 치킨 대신 피자가 더 좋은 관계로 피자집을 차리기로 했다. 그 이름도 에이든 피자! 장사를 시작하기는 했지만 정식 오픈이라 부르기에는 아직 민망하고, 그렇다고 집에서 냉동 피자를 데워 먹는 수준도 아니어서 일단 "시범 운영"이라는…
마약 조직으로 이해하는 책임 할당 패턴 GRASP2025.12.07마약 조직으로 이해하는 책임 할당 패턴 GRASP번역 및 정리#responsibility#design-principles#architecture+2 more categories or tags2025.12.07마약 조직으로 이해하는 책임 할당 패턴 GRASP번역 및 정리#responsibility#design-principles#architecture+2 more categories or tags<갱단과의 전쟁>을 보다가 또 하나의 흥미로운 생각이 들었다. 마약 조직이라는 대상은 도덕적으로 정당화될 수 없지만, 구조적인 관점에서 보면 규모를 키우고 오래 버티기 위해 꽤 일관된 설계를 갖추고 있다는 점이다. 이들의 설계는 멋있어서가 아니라 생존을 위해 필연적으로 그렇게 된 것처럼…
마약 조직으로 이해하는 객체지향 설계 원칙 SOLID2025.12.07마약 조직으로 이해하는 객체지향 설계 원칙 SOLID번역 및 정리#encapsulation#design-principles#solid+2 more categories or tags2025.12.07마약 조직으로 이해하는 객체지향 설계 원칙 SOLID번역 및 정리#encapsulation#design-principles#solid+2 more categories or tagsSBS에서 제작한 다큐멘터리 <갱단과의 전쟁>을 보다가 흥미로운 생각이 들었다. 마약 조직이라는 대상이 도덕적으로는 비난받아 마땅하지만, 구조적인 관점에서 보면 놀라울 정도로 객체지향적인 특성을 가지고 있다는 점이다. 상위 조직은 세부 구현에 관여하지 않는다. 전체적인 전략과 역할만 정…
Proxy와 Reflect에 대한 개인적인 오해2025.04.24Proxy와 Reflect에 대한 개인적인 오해Javascript#object-oriented2025.04.24Proxy와 Reflect에 대한 개인적인 오해Javascript#object-oriented기존 자바스크립트 사용자들은 객체의 속성 접근을 감지하거나 동작을 변경하기 위해 Object.defineProperty() 같은 저수준 API를 활용해 왔다. 이 방식은 특정 프로퍼티의 getter나 setter를 재정의하는 데에는 유용했지만, 동적으로 추가되는 속성이나 함수 호출, 삭…
자바스크립트에서의 멀티패러다임 프로그래밍2025.03.15자바스크립트에서의 멀티패러다임 프로그래밍Javascript번역 및 정리#multiparadigm#functional+1 more categories or tags2025.03.15자바스크립트에서의 멀티패러다임 프로그래밍Javascript번역 및 정리#multiparadigm#functional+1 more categories or tags이 글의 제목은 ‘자바스크립트에서의 멀티패러다임 프로그래밍’이지만, 우선은 영어에 대해 이야기해보자. 다소 뜬금없다고 느낄 수도 있겠지만, 다 이유가 있다. 아주 오래전, 국제 외교의 언어는 프랑스어였다. 왕실 간의 외교문서와 고위 외교관의 대화는 프랑스어로 쓰이는 것이 관례였다. 하지…
inheritance v composition2025.01.30inheritance v composition번역 및 정리#object-oriented2025.01.30inheritance v composition번역 및 정리#object-oriented객체 지향 프로그래밍은 코드의 재사용성과 유지보수성을 높이기 위해 다양한 설계 원칙을 제시한다. 그중에서도 클래스 상속(Class Inheritance)과 클래스 합성(Class Composition)은 객체 간의 관계를 정의하는 대표적인 방법이며, 시스템의 유연성과 확장성에 직접적인…
비즈니스 로직은 어디에 있어야 할까2025.01.30비즈니스 로직은 어디에 있어야 할까Nest.js번역 및 정리#object-oriented2025.01.30비즈니스 로직은 어디에 있어야 할까Nest.js번역 및 정리#object-orientedNest.js에서 컨트롤러와 각각의 프로바이더는 분명한 책임을 갖는다. 하지만 막상 서버를 개발하다 보면, 이 책임들을 깊이 고민하지 않은 채 코드를 작성하게 되고, 그 결과 클래스들이 서로의 영역을 침범하는 상황이 반복된다. 나 역시 컨트롤러에 비즈니스 로직이 섞이거나, 서비스가 지나…
객체 타입 지향2025.01.10객체 타입 지향Typescript#utility-type#object-oriented2025.01.10객체 타입 지향Typescript#utility-type#object-oriented아래는 전역 상태 관리 라이브러리 Caro-kann의 persist 미들웨어 내부에서 사용되는 유틸리티 함수들의 타입 정의이다. 세 타입 모두 storageKey와 storageType이라는 동일한 파라미터를 요구하고 있으며, 이 둘은 저장소의 위치와 종류를 식별하기 위한 핵심 정보라는…
UML2024.07.22UML번역 및 정리#object-oriented2024.07.22UML번역 및 정리#object-oriented소프트웨어 시스템은 코드로 구현되지만, 코드만으로 시스템 전체를 설명하기는 어렵다. 특히 여러 명이 함께 개발하거나, 시간이 지나 다시 코드를 바라보는 상황에서는 “이 시스템이 어떤 구조를 가지고 있고, 왜 이렇게 설계되었는지”를 빠르게 파악하기가 쉽지 않다. 이런 맥락에서 설계 의도를…