공통점
차이점
라이브러리 | 프레임워크 |
---|---|
폴더, 파일명에 대한 규칙이 없다. | 폴더, 파일명에 대한 규칙이 있다. |
자신이 필요한 곳에 사용할 수 있다. | 프레임워크의 규칙에 따라 사용해야 한다. (특정한 도구에 대한 사용법에 따라 사용한다.) |
프로그램을 설계할 때 발생했던 문제점들을 객체간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 규약형태로 만들어 놓은 것
하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴, 데이터베이스 연결 모듈에 많이 사용한다.
장점
단점
TDD(Test Driven Development)에 걸림돌이 된다.
: 단위 테스트는 테스트가 서로 독립적이고 어떤 순서로든 실행할 수 있어야한다. 하지만 싱글톤 패턴은 미리 생성된 하나의 인스턴스를 기반으로 구현하는 패턴이기 때문에 테스트마다 독립적인 인스턴스를 만들기 어렵다.
모듈간의 결합을 강하게 만들수 있다.
: 이는 의존성 주입
을 통해 모듈간의 결합을 조금 느슨하게 만들어 해결할 수 있다.
의존성은 종속적이라고도 할 수 있다. A가 B에 의존성이 있다는 것은 B의 변경사항에 따라 A 또한 변경해야 함을 의미한다.
메인 모듈(상위 모듈)이 직접 하위 모듈에 대한 의존성을 주는 것이 아닌 중간의 의존성 주입자(Dependency Injector)가 간접적으로 메인 모듈이 의존성을 주입하는 것을 의미한다. 이러면 메인 모듈은 하위 모듈에 대한 의존성이 떨어지는데 이를 디커플링이라 한다.
장점
테스팅, 마이그레이션하기 수월하다
: 모듈을 쉽게 교체할 수 있는 구조가 되었기 때문
의존성 방향이 일관되어 애플리케이션을 쉽게 추론할 수 있다.
: 구현 시 추상화 레이어를 넣고 이를 기반으로 구현체를 넣어주기 때문
모듈간의 관계가 명확해진다.
단점
복잡성이 증가
: 모듈이 더욱 분리되어 클래스 수가 증가
런타임 패널티가 생길 수 있다.
의존성 주입은 의존성 주입 원칙
을 지키며 만들어야 한다.
상위 모듈은 하위 모듈에서 어떠한 것도 가져오지 않아야 한다.
상위 모듈, 하위 모듈 모두 추상화에 의존해야 한다.
추상화는 세부사항에 의존하지 말아야 한다.
Reference
주홍철, 면접을 위한 CS 전공지식 노트, 길벗(2022)