디자인 패턴

리문·2022년 7월 18일
0

디자인 패턴

  • 객체지향 설계를 도와주기 위한 패턴
  • 객체지향 프로그래밍
    • 객체로 프로그램을 제작한다.
    • 객체 : 상태 + 행동
    • 객체는 실체적인 것 외에도 추상적인 것도 모델링 할 수 있다.
    • 현실 세계를 그대로 모델링 할 수 있다.
    • 특징
      • 추상화 : 일반적인 인터페이스를 정의하는 것.
      • 상속 : 코드를 물려 받는 것 (재사용 할 수 있다.)
      • 다형성 : 하나의 인터페이스로 다양한 동작을 할 수 있는 것.
      • 캡슐화 : 데이터와 함수를 함께 적을 수 있는 것.

싱글톤 패턴

  • 오직 하나의 인스턴스를 갖고, 전역적인 접근점을 갖게하는 디자인 패턴.

  • 장점

    • 인스턴스의 유일성을 보장한다.

      • 컴파일 단계에서 유일하도록 강제함.
      • 인스턴스이 개수를 늘릴때도 유연하게 바꿀 수 있다.
    • 게으른 초기화가 일어난다.

      • 사용하지 않으면 생성되지 않는다.
    • 어디서든 쉽게 접근이 가능하다.

    • 이름 공간을 좁힌다.

  • 단점

    • 결국 전역 변수다.

      • 전역 변수 - 코드의 결합도를 높임 -> 유지보수가 힘들다.
      • 스레드 동기화 문제가 생김.
    • 게으른 초기화를 방지할 수 없다.

      • 초기화에 오랜 시간이 걸린다.
      • 메모리 풀링을 사용하는 경우 초기화 시점을 제어해야한다.
    • 두 가지 문제를 풀려고 한다.

      • 인스턴스의 유일성과 전역적인 접근점 제공 중, 하나만 해결하려고 할 때의 문제.
  • 고려사항

    • 꼭 클래스가 필요한지.

    • 정적 변수를 이용해 인스턴스 개수를 제한할 수 있다.

    • 전역적인 접근점 대신에 다른 방법을 사용.

      • 의존성 주입을 사용.

        • 의존성 주입 : 매개변수를 이용해 의존성을 넘겨주는 것.
      • 상위 클래스를 이용.

        • 하위 클래스에서 사용할 수 있도록 상위 클래스에서 정적 변수를 만든다.
      • 이미 전역인 객체를 이용.

        • 기존 전역 객체에 정적 변수를 만들어 이용하게 한다.
      • 중재자 패턴을 이용한다.

        • 구체 클래스 대신에 중재자를 두어 결합도를 낮춘다.
    • 모노스테이트 활용.

      • 모든 멤버나 필드만 정적으로 두는 모노스테이트 이용.
profile
개발자되기 대작전

0개의 댓글