책 내용을 정리하는 것이 아니라, 해당 범위에서 특별히 정리하고 싶은 내용이나 책을 읽으면서 들었던 궁금한 부분을 작성한다.
궁금한 부분에 대한 답변은 의문이 해소된 후에 작성한다 (영원히 작성되지 않을수도..)
정리
싱글톤과 의존성 주입
싱글톤은 모듈 간 결합을 강하게 만든다는 단점이 존재
'의존성 주입'을 통해 이를 느슨하게 만들 수 있음
메인 모듈이 직접 하위 모듈에게 의존성을 주기보다 중간에 '의존성 주입자'가 가로채 메인 모듈이 '간접'적으로 의존성을 주입 ( → 의존성이 떨어짐, 이를
디커플링이 된다
라고도 함)장점
모듈들을 쉽게 교체할 수 있는 구조 → 테스팅이 쉬움, 마이그레이션 수월
의존성 방향이 일관됨
모듈 간의 관계들이 조금 더 명확해짐
단점 : 모듈이 더 분리됨 → 복잡성이 증가될 수 있음
의존성 주입 원칙
상위 모듈은 하위 모듈에서 어떠한 것도 가져오지 않아야 한다
둘 다 추상화에 의존해야 하며, 이때 추상화는 세부사항에 의존하지 말아야 한다
고민하고 기억하기
p. 16
Q. React는 라이브러리일까, 프레임워크일까? 그리고 그 이유는 뭘까?
둘의 차이는 '엄격한 규칙'이라고 생각함
프레임워크인 Vue의 경우에는 템플릿이 제공되어 이를 따라야 함. React의 경우, 비교적 자유도가 높음
React는 프레임워크라기엔 기능들이 많지 않아 필요한 기능들을 추가로 설치해야 함
이러한 점을 토대로, React는 라이브러리임
Q. 디자인 패턴은 왜 등장한걸까?
코드를 체계화하기 위한 공통적인 패턴을 제공해 코드를 쉽게 이해하도록 도움
다른 개발자와의 의사소통을 원활하게 해줌
p. 17
Q. 싱글톤이 하나의 클래스에 오직 하나의 인스턴스만 가지게 하는 이유가 뭘까?
인스턴스란, 생성자 함수를 통해 생성된 객체
장점 : 인스턴스를 생성할 때 드는 비용 감소
단점 : 의존성이 높아짐 ( → 해당 인스턴스를 다른 모듈들이 공유하며 사용하기 때문 )
즉, 인스턴스 생성 비용을 감소시키기 위해 하나의 인스턴스만 가지게 설정하는 것..!
자바스크립트 + 리액트 디자인 패턴
Q. 정적 클래스와 싱글톤의 유사점과 차이점은?
유사점 : 단 하나만 존재하며, 어디서든 접근 가능
차이점 :
초기화 시점 (중요!)
정적 클래스 : 프로그램 실행 시점에 자동으로 초기화
싱글톤 인스턴스 : 필요한 시점에 생성 (지연 초기화) → 리소스 & 메모리를 효율적으로
확장성
정적 클래스 : 상속, 인터페이스 구현 불가능. static 키워드를 붙여야 하는 번거로움
싱글톤 인스턴스 : 상속, 인터페이스 구현 가능 → 확장성
Q. 싱글톤 패턴의 '지연 초기화'란?
싱글톤 인스턴스는 처음 사용되기 전까진 생성되지 않음
필요한 시점에 인스턴스를 생성하고 초기화
Q. (내가 생각한) 싱글톤 패턴과 전역 상태 관리 도구의 유사점과 차이점은?
유사점
싱글톤 패턴 : 클래스의 인스턴스가 오직 하나만 존재하도록 제한해 인스턴스 생성 비용을 아낌
전역 상태 관리 도구 : 복수의 컴포넌트에서 공유되는 특정 상태를 단 하나의 변수로 생성하고 관리
차이점
싱글톤 패턴 : 인스턴스에 대한 접근 허용
전역 상태 관리 도구 : 변경 불가능한 읽기 전용 상태를 제공
p. 19
Q. 싱글톤 패턴이 DB 연결 모듈에 많이 쓰이는 이유는?
데이터베이스 연결에 관한 인스턴스 생성 비용을 아끼려고
실제로 mongoose의 DB 연결 시 쓰는
connect()
함수는 싱글톤 인스턴스를 반환함MySQL에서 DB 연결 시에도 싱글톤 패턴이 쓰임
p. 22
Q. 싱글톤 패턴이 TDD의 걸림돌이 되는 이유는?
TDD는 주로 단위 테스트를 함
단위 테스트는 서로 독립적이어야 하며, 테스트를 어떤 순서로든 실행할 수 있어야 함
싱글톤 패턴은 '독립적인' 인스턴스를 만들기 어려움 ( → 미리 생성된 하나의 인스턴스를 기반으로 구현하기 때문 )