서론

  • 흔히 프로그래밍할 때 쓰는 React.js, Vue.js, Spring 등 라이브러리나 프레임워크의 기본이 되는 디자인 패턴을 공부하려고 합니다.
  • 라이브러리
    • 공통으로 사용될 수 있는 특정한 기능들을 모듈화 한 것을 의미한다. 폴더명, 파일명에 대한 규칙이 없고 프레임워크에 비해 자유 롭다. 예를들어 무언가를 자를때 가위를 사용해서 내가 직접 자른다. 라이브러리는 이와 비슷한 맥락이다.
  • 프레임워크
    • 공통으로 사용될 수 있는 특정한 기능들을 모듈화 한 것을 의미한다. 폴더명, 파일명에 대한 규칙이 있고 라이브러리에 비해 엄격하다. 예를들어 다른 곳을 이동할 때 도구인 비행기를 타고 이동하지만 비행기가 컨트롤하고 나는 단지 가만히 앉아있기만 해야한다. 프레임워크는 이와 비슷한 맥락이다.
  • 디자인 패턴
    • 디자인 패턴이란 프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 '규약'형태로 만들어 놓은 것을 의미한다.

싱글톤 패턴

싱글톤 패턴이란 하나의 클래스에 오직 하나의 인스턴스만을 가지는 패턴이다.

  • 하나의 클래스를 기반으로 여러 개의 개별적인 인스턴스를 만들 수 있지만, 그렇게 하지 않고 하나의 클래스를 기반으로 단 하나의 인스턴스를 만들어 이를 기반으로 로직을 만드는데 쓰이며, 보통 데이터베이스 연결 모듈에 많이 사용한다.
    하나의 인스턴스를 만들어 놓고 해당 인스턴스를 다른 모듈들이 공유하며 사용하기 때문에 인스턴스를 생성할 때 드는 비용이 줄어드는 장점이 있다. 하지만 의존성이 높아진다는 단점이 있다.

    싱글톤 패턴의 단점

  • 싱글톤 패턴은 TDD를 할 때 걸림돌이 된다. TDD를 할 때 단위테스트를 주로 하는데, 단위 테스트는 테스트가 서로 독립적이어야 하며 테스트를 어떤 순서로든 실행할 수 있어야 한다.
    하지만 싱글톤 패턴은 미리 생성된 하나의 인스턴스를 기반으로 구현하는 패턴이므로 각 테스트마다 '독립적인' 인스턴스를 만들기가 어렵다.

    의존성 주입

  • 싱글톤 패턴은 사용하기가 쉽고 굉장히 실용적이지만 모듈 간의 결합을 강하게 만들 수 있다는 단점이 있다. 이 때 의존성 주입을 통해 모듈간의 결합을 조금 더 느슨하게 만들어 해결할 수 있다.

    의존성 주입의 장점

  • 모듈들을 쉽게 교체할 수 있는 구조가 되어 테스팅하기 쉽고 마이그레이션하기도 수월하다. 또한 구현할 때 추상화 레이어를 넣고 이를 기반으로 구현체를 넣어 주기 때문에 애플리케이션 의존성 방향이 일관되고, 애플리케이션을 쉽게 추론할 수 있으며, 모듈간의 관계들이 조금 더 명확해진다.

    의존성 주입의 단점

  • 모듈들이 더욱더 분리되므로 클래스 수가 늘어나 복잡성이 증가될 수 있으며 약간의 런타임 패털티가 생기기도 한다.의존성 주입 원칙
  • 의존성 주입은 상위 모듈은 하위 모듈에서 어떠한 것도 가져오지 않아야 한다. 또한 둘 다 추상화에 의존해야 하며, 이 때 추상화는 세부 사항에 의존하지 말아야 한다는 의존성 주입 원칙을 지켜주면서 만들어야 한다.

'Computer science > 디자인패턴 및 프로그래밍 패러다임' 카테고리의 다른 글

캡슐화  (0) 2023.06.30
SOLID 원칙  (0) 2023.06.30
상속과 합성  (0) 2023.06.30
객체지향과 절차지향  (0) 2023.06.30

+ Recent posts