728x90
독서진행 : 119-135p (종이책)
오늘의 메모
- 샌드박스 패턴은 어떤 모듈이 다른 모듈과 그 모듈의 샌드박스에 영향을 미치지 않고 동작할 수 있는 환경을 제공한다.
- 샌드박스 패턴을 사용하면 콜백 함수로 코드를 감싸기 때문에 전역 네임스페이스를 보호할 수 있다. 필요하다면 함수가 곧 객체라는 사실을 활용하여 Sandbox() 생성자의 '스태틱' 프로퍼티에 데이터를 저장할 수도 있다.
또 원하는 유형별로 모듈의 인스턴스를 여러 개 만들 수도 있다. 이 인스턴스들은 각각 독립적으로 동작하게 된다.
- 스태틱 프로퍼티와 메서드란 인스턴스에 따라 달라지지 않는 프로퍼티와 메서드를 말한다. 클래스 기반의 언어에서는 별도의 문법을 통해 스태틱 멤버를 생성하여 클래스 자체의 멤버인 것처럼 사용한다.
- 자바스크립트에는 스태틱 멤버를 표기하는 별도의 문법이 존재하지 않는다. 그러나 생성자에 프로퍼티를 추가함으로써 클래스 기반 언어와 동일한 문법을 사용할 수 있다. 생성자도 다른 함수와 마찬가지로 객체이고 그 자신의 프로퍼티를 가질 수 있기 때문에 이러한 구현이 가능하다.
- 인스턴스 메서드를 스태틱 메서드와 같은 방법으로 호출하면 동작하지 않는다. 스태틱 메서드 역시 인스턴스인 객체를 사용해 호출하면 동작하지 않는다.
- 스태틱 메서드가 인스턴스를 통해 호출했을 때도 동작한다면 편리한 경우가 있을 수 있다. 이 때는 간단하게 프로토타입에 새로운 메서드를 추가하는 것만으로 쉽게 구현할 수 있다.
이 새로운 메서드는 원래의 스태틱 메서드를 가리키는 일종의 퍼사드(facade) 역할을 한다.
- 공개/비공개 스태틱 프로퍼티는 상당히 편리하다. 특정 인스턴스에 한정되지 않는 메서드와 데이터를 담을 수 있고 인스턴스별로 매번 재생성되지도 않는다.
- 자바스크립트에는 상수가 없지만 대다수 최신 브라우저 환경에서는 const 문을 통해 상수를 생성할 수 있다. 흔히 사용되는 우회적인 방법으로, 명명 규칙을 사용하여 값이 변경되지 말아야 하는 변수명을 모두 대문자로 쓰기도 한다. 이 규칙은 실제로 자바스크립트 내장 객체에서도 사용된다. 사용자 정의 상수에도 동일한 명명 규칙을 적용하여, 생성자 함수에 스태틱 프로퍼티로 추가하면 된다. 그러나 대부분의 경우에는 단순히 명명 규칙만으로도 충분하기 때문에 이 방법은 좀 과도할 수 있다.
- 체이닝 패턴이란 객체에 연쇄적으로 메서드를 호출할 수 있도록 하는 패턴이다. 즉 여러 가지 동작을 수행할 때, 먼저 수행한 동작의 반환 값을 변수에 할당한 후 다음 작업을 할 필요가 없기 때문에, 호출을 여러 줄에 걸쳐 쪼개지 않아도 된다.
- 체이닝 패턴을 사용하면 코드량이 줄고 코드가 좀 더 간결해져 거의 하나의 문장처럼 읽히게 할 수 있다는 장점이 있다. 또 체이닝 패턴을 통해 함수를 쪼개는 방법을 생각하게 되고, 혼자서 너무 많은 일을 처리하려는 함수보다는 좀더 작고 특화된 함수를 만들게 된다. 장기적으로는 이런 방법을 통해 유지보수가 개선된다. 그러나 이렇게 작성된 코드는 디버깅하기가 어렵다.
코드의 어느 라인에서 에러가 발생했느니 알아내더라도, 그 라인에서 수행하는 일이 너무 많을 수 있기 때문이다.
샌드박스 패턴이 좀 어려워서 다시 봐야할 거 같다
공개/비공개 스태틱 메서드는 공개/비공개 구현을 앞 장에서 계속해서 봤기 때문에 익숙했다
체이닝 패턴은, 모를 뿐 많이 사용하고 있었다.
특히 스태틱 메서드 예제를 적을 때 재미있었다
그런데 코드에서 오타내서 계속 보면 볼수록 이해가 더욱 더 쉬워진다
오타를 내야 자세히 바라보게 되는 건가 싶다
생각하게 되고, 이게 이렇게 되면 안될텐데? 라는 의문이 생기는 거 같다
728x90
'습관 > 독서' 카테고리의 다른 글
자바스크립트 코딩 기법과 핵심 패턴 - Day 11 (0) | 2023.02.14 |
---|---|
자바스크립트 코딩 기법과 핵심 패턴 - Day 10 (0) | 2023.02.08 |
자바스크립트 코딩 기법과 핵심 패턴 - Day 8 (1) | 2023.02.05 |
자바스크립트 코딩 기법과 핵심 패턴 - Day 7 (0) | 2023.02.03 |
자바스크립트 코딩 기법과 핵심 패턴 - Day 6 (0) | 2023.02.01 |