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" new file mode 100644 index 0000000..2d41b7f --- /dev/null +++ "b/\354\261\225\355\204\260_7/\354\235\264\354\203\201\354\241\260.md" @@ -0,0 +1,61 @@ +# 자바스크립트 디자인 패턴 + +## 생성 패턴 + +- 생성자 패턴 +- 모듈 패턴 +- 노출 모듈 패턴 +- 싱글톤 패턴 +- 프로토타입 패턴 +- 팩토리 패턴 + +## 생성자 패턴 + +생성자를 통해 동일한 객체를 찍어낸다. +똑같은 매서드 계속 새로 정의하지 말고 프로토타입을 써라. + +## 모듈 패턴 + +- 객체 리터럴: 예시에 왜 캡슐화라고 적혀있을까...? +```js +const module = { + value: 'value', + + publicMethod() { + console.log(this.value); + } +} + +module.value = 'new value'; // module 객체는 프로퍼티를 비공개하는게 불가능하지 않나? +``` + +- 모듈 패턴: 모듈 내에 export하지 않는 변수 하나 만들고 클로저를 사용한 캡슐화 +- 믹스인 가져오기 변형: 외부 모듈(믹스인)을 사용하는 방법...? + +단점 중 나중에 추가한 메서드에서는 비공개 멤버에 접근할 수 없다는건 실제 코드의 수정이 아니라 객체에 새로운 메서드를 추가할 때를 말하는 거겠지? + +## 노출 모듈 패턴 + +걍 파일 내에서 내보내고 싶은 녀석만 객체로 묶어서 보낸다. + +## 싱글톤 패턴 + +클래스의 인스턴스가 딱 하나만 존재하도록 하는 패턴 + +- 싱글톤임을 파악하기 힘들다. +- 테스트하기 힘들다. +- 신중한 조정이 필요하다? 그러니까 인스턴스 만들어지고 나서 참조할 수 있도록 순서를 잘...? + +메모리 절약도 도움이 되려나... + +## 프로토타입 패턴 + +이건 이해가 잘 안가네... 마지막 예제 코드는 뭘 말하고 싶은걸까? + +## 팩토리 패턴 + +원하는 인스턴스 유형을 찍어내는 공장같은 클래스 +생성을 쉽고 편하게 해줄 수 있다. 근데 클래스 말고 걍 함수로 만들어도 되는거 아닌가; instanceof로 타입체크가 편해서 그런가? +한 군데서 만들기 때문에 유지보수성이 좋다. + +