logo

책 디자인 패턴 후기

Computer Science · 12월 16일 · 16 min read
poster

디자인 패턴: Elements of Reusable Object-Oriented Software(디자인 패턴: 재사용 가능한 객체지향 소프트웨어의 요소)(1994)는 소프트웨어 디자인 패턴을 설명한 소프트웨어 공학 서적이다. 에리히 감마, 리처드 헬름, 랄프 존슨, 존 블리사이드 등 4명이 저술하고 그레이디 부치가 서문을 썼다. 이 책은 2부로 구성되어 있으며, 첫 두 장은 객체지향 프로그래밍의 능력과 함정을 탐구하고, 나머지 장은 23개의 고전적인 소프트웨어 디자인 패턴을 설명하며, C++과 Smalltalk의 예제도 포함되어 있다.

소프트웨어 공학 분야에 영향을 미치고 객체지향 설계의 이론과 실무에 대한 중요한 자료로 간주되며, 50만 부 이상이 영어와 다른 13개 언어로 판매되었다. 저자는 종종 Gang of Four (GoF)라고 불린다.

개발 및 출판 역사

이 책은 브루스 앤더슨이 운영하는 OOPSLA '90의 BoF(BoF) 세션 'Towards an Architecture Handbook'에서 에리히 감마와 리처드 헬름을 만나 공통의 관심사를 발견하면서 시작되었다. 이 책의 최초 출판일은 1994년 10월 21일이고, 저작권은 1995년이기 때문에 1994년에 출판되었음에도 불구하고 종종 1995년으로 인용된다. 이 책은 1994년 10월 오리건주 포틀랜드에서 열린 OOPSLA 회의에서 처음으로 대중에게 공개되었으며, 2012년 3월 현재 40쇄를 찍었다.

서문

"구현이 아니라 인터페이스를 프로그래밍하라". (Gang of Four 1995:18) 상속보다 구성: '클래스 상속'보다 '객체 합성'을 지지하라. (Gang of Four 1995:20) 저자들은 구현에 대한 인터페이스의 장점으로 다음과 같이 주장하고 있다:

객체가 인터페이스를 따르는 한, 클라이언트는 사용하는 객체의 특정 유형을 의식하지 않는다. 클라이언트는 이러한 객체를 구현하는 클래스에 대해 알지 못한다. 인터페이스의 사용은 객체지향 프로그래밍의 핵심 기능인 동적 바인딩과 다형성(polymorphism)으로 이어진다.

저자들은 상속을 화이트박스 재사용이라고 부르는데, 화이트박스는 가시성을 의미한다. 이와는 대조적으로 저자들은 객체 구성(명확하게 정의된 인터페이스를 가진 객체가 다른 객체에 대한 참조를 얻는 객체에 의해 런타임에 동적으로 사용되는 것)을 블랙박스 재사용이라고 부른다.

저자들은 상속과 캡슐화 사이의 긴장에 대해 장황하게 설명하며, 그들의 경험에 따르면 설계자들이 상속을 너무 많이 사용한다고 말한다(Gang of Four 1995:20). 그 위험성을 다음과 같이 설명한다:

"상속은 하위 클래스를 부모 구현의 세부 사항에 노출시키기 때문에 "상속은 캡슐화를 깨뜨린다"고 흔히들 말한다"(Gang Four 1995:19). (Gang of Four 1995:19) 그들은 서브 클래스의 구현이 부모 클래스의 구현과 결합되어 부모 클래스의 구현을 변경하면 서브 클래스도 변경해야 한다고 경고하고 있다. 또한, 이를 피하는 방법으로 추상 클래스에서만 상속할 것을 주장하고 있는데, 이 경우 코드의 재사용이 최소화된다고 지적한다.

상속의 사용은 주로 기존 컴포넌트의 기능을 추가할 때 권장되며, 기존 코드의 대부분을 재사용하고 비교적 적은 양의 새로운 코드를 추가하는 것이 좋다.

저자의 말에 따르면, "위임"은 객체 구성의 극단적인 형태이며, 항상 상속 대신 사용할 수 있다. 위임에는 두 개의 객체가 포함된다. '발신자'는 '델리게이트'에 자신을 넘겨주고, 델리게이트가 발신자를 참조하도록 한다. 따라서 시스템의 두 부분 사이의 링크는 컴파일 때가 아니라 실행시에만 설정된다. 콜백 기사에는 델리게이트에 대한 더 자세한 정보가 있다.

저자는 제네릭(Ada, Eiffel, Java, C#, VB.NET, Delphi) 또는 템플릿(C++)으로도 알려진 소위 매개변수화된 타입에 대해서도 설명한다. 이러한 유형은 사용하는 다른 모든 유형을 지정하지 않고도 임의의 유형을 정의할 수 있게 해준다.

저자는 델리게이션과 파라미터화가 매우 강력하다는 것을 인정하면서도 경고를 덧붙인다:

"동적이고 고도로 매개변수화된 소프트웨어는 정적 소프트웨어보다 이해하기도 어렵고 구축하기도 어렵다. (Gang of Four 1995:21) 저자는 또한 한 객체가 다른 객체를 '가지고' 또는 '그 일부인'(집계 객체와 그 소유자가 동일한 수명을 갖는 것을 의미) '집계'와 한 객체가 단순히 다른 객체를 '알고' 있는 '지인'을 구분한다. 지인 관계는 '관련' 또는 '사용' 관계라고도 한다. 아는 객체들은 서로에게 조작을 요구할 수는 있지만, 서로에게 책임을 지지는 않는다. 아쿠아 인텐스는 집계보다 약한 관계로, 객체 간 결합이 훨씬 느슨하다는 것을 시사한다.

저자들은 C#이나 자바처럼 '클래스 라이브러리'를 사용하는 사람들이 있는 반면, '툴킷'이라는 용어를 사용한다. 그들의 말에 따르면, 툴킷은 객체 지향 서브 루틴 라이브러리에 해당하며, "프레임워크"는 특정 클래스 소프트웨어의 재사용 가능한 설계를 구성하는 협력적인 클래스 집합이다. 그들은 애플리케이션을 설계하는 것이 어렵고, 툴킷을 설계하는 것이 어렵고, 프레임워크를 설계하는 것이 가장 어렵다고 말한다.

관련 포스트
post image
머신 코드
컴퓨터 프로그래밍에서 기계어 명령어로 구성된 컴퓨터 코드를 말하며, 컴퓨터의 중앙처리장치(CPU)를 제어하는 데 사용된다. 과거에는 10진법 컴퓨터가 일반적이었지만, 현대 시장에서는 2진법 컴퓨터가 주류다. 이러한 컴퓨터에서 기계 코드는 '컴퓨터가 실제로 읽고 해석하
Computer Science·12월 26일·22 min read
post image
브라우저 엔진, blink
블링크는 크롬 프로젝트의 일환으로 개발된 브라우저 엔진으로 애플, 구글, 메타, 마이크로소프트, 오페라 소프트웨어, 비발디 테크놀로지스, 어도비, 인텔, IBM, 삼성 등이 참여하고 있으며, 2013년 4월에 처음 발표되었다. 되었다. # 네이밍 블링크의 네이밍은
Computer Science·9월 14일·13 min read
post image
웹프레임워크란?
웹 프레임워크(WF) 또는 웹 애플리케이션 프레임워크(WAF)는 웹 서비스, 웹 리소스, 웹 API를 포함한 웹 애플리케이션 개발을 지원하도록 설계된 소프트웨어 프레임워크이다. 웹 프레임워크는 월드와이드웹에서 웹 애플리케이션을 구축하고 배포하기 위한 표준적인 방법을
Computer Science·7월 24일·11 min read
post image
nextjs의 탄생배경
Next.js는 민간기업 베르셀(Vercel)이 개발한 오픈소스 웹 개발 프레임워크로, 서버 측 렌더링과 정적 웹사이트 생성 기능을 갖춘 리액트 기반 웹 애플리케이션을 제공한다. 리액트 문서에서는 'Node.js로 서버 렌더링된 웹사이트를 구축할 때' 개발자에게 조
Computer Science·7월 14일·16 min read
post image
알고리즘의 정의
수학 및 컴퓨터 과학에서 알고리즘은 일반적으로 특정 문제 클래스를 해결하거나 계산을 수행하는 데 사용되는 엄격한 명령의 유한한 시퀀스이다. 알고리즘은 계산이나 데이터 처리를 수행하기 위한 사양으로 사용된다. 고급 알고리즘은 조건식을 사용하여 코드 실행을 다양한 경로(
Computer Science·7월 4일·29 min read
post image
운영체제 톺아보기
운영체제(OS)는 컴퓨터의 하드웨어 및 소프트웨어 자원을 관리하고 컴퓨터 프로그램에 공통된 서비스를 제공하는 시스템 소프트웨어이다. 시간 공유 운영 체제는 시스템을 효율적으로 사용하기 위해 작업을 예약하고 프로세서 시간, 대용량 저장 장치, 주변 장치 및 기타 자원
Computer Science·5월 21일·17 min read
post image
백그라운드-프로세스에-대해-알아보기
백그라운드 프로세스는 사용자의 개입 없이 무대 뒤에서(즉, 백그라운드에서) 실행되는 컴퓨터 프로세스를 말한다. 이러한 프로세스의 일반적인 작업에는 로깅, 시스템 모니터링, 스케줄링, , 사용자 알림 등이 있다. Windows 시스템에서 백그라운드 프로세스는 사용자
Computer Science·3월 1일·15 min read
post image
프로세스란?
컴퓨팅에서 프로세스는 하나 이상의 스레드에 의해 실행되는 컴퓨터 프로그램의 인스턴스이다. 다양한 프로세스 모델이 존재하며, 일부는 경량화되어 있지만, 거의 모든 프로세스(전체 가상 머신 포함)는 프로그램 코드, 할당된 시스템 자원, 물리적 및 논리적 액세스 권한, 실
Computer Science·2월 16일·26 min read