Skip to content

Commit

Permalink
[이상조] 챕터 7: 자바스크립트 디자인 패턴 (2/3) (#57)
Browse files Browse the repository at this point in the history
  • Loading branch information
sjoleee authored Nov 6, 2024
1 parent 611a7af commit cc71104
Showing 1 changed file with 63 additions and 0 deletions.
63 changes: 63 additions & 0 deletions 챕터_7/이상조.md
Original file line number Diff line number Diff line change
Expand Up @@ -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를 사용해서 반드시 메서드를 구현하도록 한다고 나와있다.
데코레이터는 아닌데, 우리 회사에서는 추상 클래스로 추상 메서드를 반드시 구현하게 하는 그런 코드가 좀 남아있다... 물론 지금은 사용하지 않는 코드

0 comments on commit cc71104

Please sign in to comment.