From cc711048d328d8077c9cdb938d3b3e4ffbe012f5 Mon Sep 17 00:00:00 2001 From: LEESANGJO Date: Wed, 6 Nov 2024 13:07:15 +0900 Subject: [PATCH] =?UTF-8?q?[=EC=9D=B4=EC=83=81=EC=A1=B0]=20=EC=B1=95?= =?UTF-8?q?=ED=84=B0=207:=20=EC=9E=90=EB=B0=94=EC=8A=A4=ED=81=AC=EB=A6=BD?= =?UTF-8?q?=ED=8A=B8=20=EB=94=94=EC=9E=90=EC=9D=B8=20=ED=8C=A8=ED=84=B4=20?= =?UTF-8?q?(2/3)=20(#57)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\354\235\264\354\203\201\354\241\260.md" | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git "a/\354\261\225\355\204\260_7/\354\235\264\354\203\201\354\241\260.md" "b/\354\261\225\355\204\260_7/\354\235\264\354\203\201\354\241\260.md" index 2d41b7f..14f29c3 100644 --- "a/\354\261\225\355\204\260_7/\354\235\264\354\203\201\354\241\260.md" +++ "b/\354\261\225\355\204\260_7/\354\235\264\354\203\201\354\241\260.md" @@ -58,4 +58,67 @@ module.value = 'new value'; // module 객체는 프로퍼티를 비공개하는 생성을 쉽고 편하게 해줄 수 있다. 근데 클래스 말고 걍 함수로 만들어도 되는거 아닌가; instanceof로 타입체크가 편해서 그런가? 한 군데서 만들기 때문에 유지보수성이 좋다. +--- +## 구조 패턴 + +클래스와 객체를 체계적으로 구성하는 방법 + +## 퍼사드 패턴 + +실제 모습을 숨기고 꾸며낸 겉모습을 드러냄. +> Facade 는 "건물의 정면"을 의미한다. 퍼사드는 클래스 라이브러리 같은 어떤 소프트웨어의 다른 커다란 코드 부분에 대한 간략화된 인터페이스를 제공하는 객체이다. + +예시가 제이쿼리... +그러니까 인터페이스를 깔끔하게 노출하기 위해서 사용하는 패턴이다. + +## 믹스인 패턴 + +?? 왜 내용이 없지...? + +## 서브클래싱 + +extends로 상속할 수 있다는 내용같음 + +근데 메서드 체이닝이라는 용어가 내가 아는 것과 조금 다른데... +메서드 체이닝은 메서드가 반환하는 값을 다음 메서드의 인자로 사용해서 메서드를 연속으로 사용하는 패턴 아닌가? "asdf".split("").join() 이런거 +여기서 설명한 내용은 객체 내부 [[Prototype]] 슬롯을 타고 프로토타입 체인을 따라서 메서드를 찾아가는 그 내용을 말하고 싶은 것 같다. +킹님말고; + +## 믹스인 + +믹스인 설명이 적절한가 싶은데... +자바스크립트에서 다중상속이 안되니까 쓰는거라고 생각했음. +다중상속 가능하게 만들고, 공통 메서드같은걸 추가해서 쓰니까 좋은데 확실히 복잡도가 올라가고 여러개 중첩하면 문제가 많을듯. + +다중상속이 필요하면 컴포지션도 가능할 것 같다. +C클래스의 생성자 함수에서 A클래스와 B클래스 인스턴스를 생성해서 필요한 메서드를 구성하는 방식... + +## 데코레이터 패턴 + +코드 재사용을 목표로 하는 패턴. 객체 서브클래싱의 다른 방법. +근데 게임 예시가 좀 적절하긴 한듯. + +```js +// 캐릭터가 있을때 +const 캐릭터 = new 캐릭터(); + +// 검 장착 +캐릭터 = new 검장착(캐릭터); + +// 방패 장착 +캐릭터 = new 방패장착(캐릭터); +``` + +만약에 방패 장착한거 떼고싶으면 어떡함? +애초에 확장만을 염두에 둔 패턴이 아닌가 싶음 + +### 의사 클래스 데코레이터 + +ensureImplements 메서드를 사용해서 인터페이스에 정의된 actions가 전부 구현되어 있는지 점검하는 방식으로 모든 메서드를 반드시 구현하도록 강제하는 방식 + +### 추상 클래스 데코레이터 + +비슷한 개념인 것 같음. +일단 데코레이터 패턴의 예시처럼 기본 객체에 계속 데코레이터들이 뭘 추가해주는 형태로 진행되는데, 여기도 결국 ensureImplements를 사용해서 반드시 메서드를 구현하도록 한다고 나와있다. +데코레이터는 아닌데, 우리 회사에서는 추상 클래스로 추상 메서드를 반드시 구현하게 하는 그런 코드가 좀 남아있다... 물론 지금은 사용하지 않는 코드