예전 직장에서 .NET 엔터프라이즈 앱을 개발할 때는 디자인 패턴이 정말 유용했음
여러 팀이 같은 패턴을 쓰니 코드가 익숙했고, 새 프로젝트도 일관된 구조를 가졌음
하지만 지금은 10년 넘은 JS 앱을 다루는데, Java EE 스타일의 getter/setter 남용과 복잡한 팩토리 구조 때문에 오히려 해로움
패턴을 왜 쓰는지 이해하지 못한 채 남용하면, 단순히 읽기 쉬운 코드보다 훨씬 나쁜 결과를 낳음 (YAGNI 원칙을 떠올림)
패턴은 ‘만드는 것’이 아니라 ‘발견하는 것’이라 생각함
개발자라면 언젠가 Adapter, Builder, Iterator 같은 구조를 자연스럽게 떠올리게 됨
디자인 패턴의 진짜 가치는 이런 발견된 패턴에 공통 언어를 부여해 서로 쉽게 소통할 수 있게 하는 데 있음
많은 패턴은 C#이나 Java처럼 제약이 많은 언어에서만 의미가 있음
C, Go, JavaScript처럼 단순한 언어에서는 훨씬 간단하게 해결할 수 있음
엔터프라이즈 환경에서 온 개발자들이 JS에서도 같은 OOP 패턴을 억지로 적용하려는 걸 자주 봄
언어의 철학과 맞지 않음
나도 예전에 좋은 의도로 패턴을 적용했다가 유지보수 악몽을 만든 적이 있음
처음엔 깔끔해 보여도 시간이 지나면 로직이 분산되고, 새 요구사항이 들어오면 패턴이 깨지기 쉬움
결국 단순한 switch문이 그리워짐
패턴이 쓸모없다고 말하는 사람들 중엔 대규모 시스템 경험이 없는 경우가 많음
작은 앱만 만든 사람과 초고층 빌딩을 짓는 사람의 관점 차이 같음
예전에 Yahoo Design Pattern Library가 있었음
UX 패턴 중심이었고, 사용자 행동(예: 평점 매기기)을 유도하는 다양한 사례를 잘 정리했음 원본 링크 / 웹 아카이브
비슷한 오픈소스 프로젝트로 The Component Gallery가 있음
90개 이상의 디자인 시스템의 UI 컴포넌트를 모아둔 저장소로, a11y/ARIA 가이드라인 학습에도 좋음 component.gallery
“accordion”, “carousel” 같은 용어가 이 라이브러리 덕분에 표준화되었음
공통 언어가 생산성을 높였음
Portland Pattern Repository가 원조 사이트임
Ward Cunningham이 위키를 이 목적을 위해 만들었다고 함 c2.com/ppr
경력이 쌓일수록 디자인 패턴 의존도가 줄어듦
주니어는 패턴을 배우면 경력 지름길이라 생각하지만, 오히려 복잡성을 키우는 경우가 많음
진짜 중요한 건 문제의 본질과 데이터 구조를 이해하는 것임
예를 들어, 두 배열의 공통 항목을 찾을 때 HashMap을 이용해 O(n) 으로 줄이는 단순한 패턴이 훨씬 유용함
이런 건 이름도 없지만 실무에선 매일 쓰는 핵심 패턴임
결국 중요한 건 원리와 맥락, 교과서적 형태가 아님
패턴은 공통 언어로서 가치가 있음
“싱글턴을 만들었다”고 말하면 바로 이해되니까
하지만 도구를 맹신하는 건 문제임
위에서 말한 HashMap 활용은 DB 세계에선 hash join이라 부름
Postgres 쿼리 플래너에서도 볼 수 있음
“팩토리” 같은 용어를 쓰는 게 부끄럽진 않음
다만 코드에 이름 붙일 때는 설명적으로 쓰는 게 좋음
HashMap을 이용한 최적화는 동적 프로그래밍의 한 형태로 볼 수도 있음
Leetcode 연습할 때 익혀두면 좋음
디자인 패턴 자체보다 패턴을 어떻게 적용하느냐의 패턴이 더 중요함
기술적 패턴뿐 아니라 조직적 패턴도 다루는 책으로 Organisational Patterns (James Coplien, Neil Harrison)을 추천함 요약 링크
대학 시절 우연히 Ralph Johnson이 직접 가르친 패턴 수업을 들었는데,
인생에서 가장 유용한 수업 중 하나였음 Ralph Johnson 위키
“Design Patterns are a sign of missing language features”라는 말이 있음
즉, 언어가 충분히 표현력이 있었다면 패턴이 필요 없었을 수도 있음
관련 자료: C2 Wiki, Norvig 논문, Medium 글
이 사이트는 잘 정리된 튜토리얼 모음이지만, Christopher Alexander의 『A Pattern Language』 처럼
패턴 간의 계층적 연결 구조를 보여주지 않아 아쉬움
원래 패턴은 상위–하위 관계 속에서 의미가 생기는데, 기술 서적은 그 맥락이 빠짐
각 패턴이 어떤 문제를 해결하는지도 더 명확히 제시되면 좋겠음
『A Pattern Language』의 예시를 보면, 각 패턴이 다른 패턴들과 유기적으로 연결되어 있음
예를 들어 “Short Passages”는 “Flow Through Rooms”, “Building Thoroughfare” 등과 이어짐
이런 구조가 패턴 언어의 진짜 힘임
패턴을 남용하면 느리고 유지보수 어려운 코드가 됨
패턴은 문제 해결 과정에서 자연스럽게 발견될 때 가장 효과적임
존재하지 않는 문제를 미리 해결하려다 복잡해짐
결국 적절히 사용할 때만 빛남
POSD(Principles of Software Design) 관점에서 유용한 패턴은 다음과 같음
Hacker News 의견들
예전 직장에서 .NET 엔터프라이즈 앱을 개발할 때는 디자인 패턴이 정말 유용했음
여러 팀이 같은 패턴을 쓰니 코드가 익숙했고, 새 프로젝트도 일관된 구조를 가졌음
하지만 지금은 10년 넘은 JS 앱을 다루는데, Java EE 스타일의 getter/setter 남용과 복잡한 팩토리 구조 때문에 오히려 해로움
패턴을 왜 쓰는지 이해하지 못한 채 남용하면, 단순히 읽기 쉬운 코드보다 훨씬 나쁜 결과를 낳음 (YAGNI 원칙을 떠올림)
개발자라면 언젠가 Adapter, Builder, Iterator 같은 구조를 자연스럽게 떠올리게 됨
디자인 패턴의 진짜 가치는 이런 발견된 패턴에 공통 언어를 부여해 서로 쉽게 소통할 수 있게 하는 데 있음
C, Go, JavaScript처럼 단순한 언어에서는 훨씬 간단하게 해결할 수 있음
언어의 철학과 맞지 않음
처음엔 깔끔해 보여도 시간이 지나면 로직이 분산되고, 새 요구사항이 들어오면 패턴이 깨지기 쉬움
결국 단순한 switch문이 그리워짐
작은 앱만 만든 사람과 초고층 빌딩을 짓는 사람의 관점 차이 같음
예전에 Yahoo Design Pattern Library가 있었음
UX 패턴 중심이었고, 사용자 행동(예: 평점 매기기)을 유도하는 다양한 사례를 잘 정리했음
원본 링크 / 웹 아카이브
90개 이상의 디자인 시스템의 UI 컴포넌트를 모아둔 저장소로, a11y/ARIA 가이드라인 학습에도 좋음
component.gallery
공통 언어가 생산성을 높였음
좋은 자료 모음이라 북마크에 추가했음
비슷한 사이트를 공유함
Ward Cunningham이 위키를 이 목적을 위해 만들었다고 함 c2.com/ppr
경력이 쌓일수록 디자인 패턴 의존도가 줄어듦
주니어는 패턴을 배우면 경력 지름길이라 생각하지만, 오히려 복잡성을 키우는 경우가 많음
진짜 중요한 건 문제의 본질과 데이터 구조를 이해하는 것임
예를 들어, 두 배열의 공통 항목을 찾을 때 HashMap을 이용해 O(n) 으로 줄이는 단순한 패턴이 훨씬 유용함
이런 건 이름도 없지만 실무에선 매일 쓰는 핵심 패턴임
결국 중요한 건 원리와 맥락, 교과서적 형태가 아님
“싱글턴을 만들었다”고 말하면 바로 이해되니까
하지만 도구를 맹신하는 건 문제임
Postgres 쿼리 플래너에서도 볼 수 있음
다만 코드에 이름 붙일 때는 설명적으로 쓰는 게 좋음
Leetcode 연습할 때 익혀두면 좋음
기술적 패턴뿐 아니라 조직적 패턴도 다루는 책으로
Organisational Patterns (James Coplien, Neil Harrison)을 추천함
요약 링크
대학 시절 우연히 Ralph Johnson이 직접 가르친 패턴 수업을 들었는데,
인생에서 가장 유용한 수업 중 하나였음
Ralph Johnson 위키
“Design Patterns are a sign of missing language features”라는 말이 있음
즉, 언어가 충분히 표현력이 있었다면 패턴이 필요 없었을 수도 있음
관련 자료: C2 Wiki, Norvig 논문, Medium 글
이 사이트는 잘 정리된 튜토리얼 모음이지만, Christopher Alexander의 『A Pattern Language』 처럼
패턴 간의 계층적 연결 구조를 보여주지 않아 아쉬움
원래 패턴은 상위–하위 관계 속에서 의미가 생기는데, 기술 서적은 그 맥락이 빠짐
각 패턴이 어떤 문제를 해결하는지도 더 명확히 제시되면 좋겠음
예를 들어 “Short Passages”는 “Flow Through Rooms”, “Building Thoroughfare” 등과 이어짐
이런 구조가 패턴 언어의 진짜 힘임
패턴을 남용하면 느리고 유지보수 어려운 코드가 됨
존재하지 않는 문제를 미리 해결하려다 복잡해짐
POSD(Principles of Software Design) 관점에서 유용한 패턴은 다음과 같음
반면 Singleton, Mixin, Observer 등은 복잡도 증가나 전역 상태 의존을 유발하므로 주의해야 함
이 사이트는 깊이보다 넓이 위주로 보여서 2017년 느낌이 남
진짜 중요한 건 immutable data를 다루는 기본기를 익히는 것임
for문 없이 array 메서드만으로 코드를 짜보는 연습이 큰 도움이 됨
JS에서는
Object.freeze로는 한계가 있고, ramdajs처럼 새 객체를 반환하는 접근이 현실적임JS의 최신 문법 덕분에 ramdajs의 일부 함수만 여전히 유용함