SMALL

정의

소프트웨어 설계할 때 자주 생기는 문제들을 접할 때 정형화된 설계 템플릿을 사용하여 해결할 수 있게 하는 것이다.

장점

  • 개발자 간의 원활한 의사소통
  • 소프트웨어 구조 파악 용이
  • 재사용을 통한 개발 시간 단축
  • 설계 변경 요청에 대한 유연한 대처

단점

  • 객체지향 설계/구현 위주
  • 초기 투자 비용 부담
LIST

'전공 > 디자인패턴' 카테고리의 다른 글

SOLID 원칙  (0) 2021.06.07
싱글턴 패턴  (0) 2018.05.11
SMALL

SRP(Single Responsiblity Principle, 단일 책임 원칙)

  • 클래스나 매서드는 단 하나의 책임만을 가져야 한다.
  • 대표적으로 남자, 여자에 대한 군번 속성을 생각하면 된다. 그러므로 공통 속성을 잘 골라서 추상화를 해야 한다.

OCP(Open-Closed Principle, 개방 폐쇄 원칙)

  • 기존의 코드를 변경하지 않으면서, 기능을 추가할 수 있어야 한다
  • 자주 변경될 것과, 변경되지 않을 것을 엄격히 구분
  • 추상화와 다형성을 잘 해야 한다.

LSP(Liskov Substitution Principle, 리스코프 치환 원칙)

  • 자식 클래스는 부모 클래스를 대체할 수 있어야 한다.
  • 자식 클래스는 부모 클래스의 기능을 재정의 하지 않고 확장만 수행하도록 해야 한다. (Override를 최소한 하는 것)
  • 대표적으로 Rectangle, Square 예시를 생각하면 된다.

ISP(Interface Segregation Principle, 인터페이스 분리 원칙)

  • 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 않아야 한다.
  • SRP는 클래스 단일책임을 중점이라면, ISP는 인터페이스 단일책임이 중점이다.
  • 인터페이스를 사용자에 입장에서 분리시키면 된다.

DIP(Dependency Inversion Principle, 의존 역전 원칙)

  • 의존 관계를 가질 때, 변화가 쉬운 것(클래스)보다 어려운 것(인터페이스, 추상 클래스)에 의존해야 한다.
  • Spring DI(Dependency Injection) 기술을 생각하면 된다.
LIST

'전공 > 디자인패턴' 카테고리의 다른 글

디자인패턴  (0) 2021.06.07
싱글턴 패턴  (0) 2018.05.11
SMALL

이번에 L사 면접에서 싱글턴 패턴에 자세히 물어봐서 대답을 잘하지 못하였다. 그래서 이번에 다시 공부를 해보려 한다.


싱글턴 패턴(Singleton Pattern)


싱글턴 패턴은 최초에 한번만 메모리를 할당하여 생성된 인스턴스 하나로 계속 사용하는 패턴이다. 

두 번째 이용시부터 객체 로딩 시간이 줄어 성능이 좋아진다. 하지만 싱글턴 인스턴스가 너무 많은 일을 하거나 많은 데이터 공유를 할 경우 개방-폐쇄 원칙을 위배하고, 멀티 쓰레드에서 동기화 처리를 안하면 문제가 발생한다.

그래서 꼭 사용해야할 경우에만 사용 하는 것이 좋다.


고전적인 싱글턴 패턴


위와 같은 코드는 멀티스레드 환경에서 동시에 접근을 함으로써 한 개 이상의 인스턴스가 생성됨으로써 문제가 발생한다.


Synchronized



위와 같이 synchronized를 사용함을써 해결을 할 수 있으나 속도가 느려져 성능이 저하된다.


DCL(Double Checking Locking)



위와 같이 두번 체크를 함으로써 초기에 객체를 생성하지 않으면서 동기화하는 부분을 줄여서 해결 하였다. 하지만 멀티 환경에서 하나의 CPU를 제외하고는 다른 CPU가 lock에 걸림으로써 완전 해결 한 것은 아니다.


Holder에 의한 초기화



위와 같이 클래스안에 클래스를 만들어서 JVM의 클래스가 로드 되는 시점을 이용한 방법을 사용하여 해결 하였다.


getTest 매서드가 호출되기 전까지는 싱클턴 인스턴스를 생성하지 않고 getTest가 호출 될 때 TestHolder가 참조되고 싱글턴 인스턴스가 생성된다. Lazy Initialization 기법을 사용하기 때문에 메모리 점유율 에서 유리하고,synchronized를 사용하지 않았기 때문에 성능적인 문제도 발생하지 않는다.


LIST

'전공 > 디자인패턴' 카테고리의 다른 글

디자인패턴  (0) 2021.06.07
SOLID 원칙  (0) 2021.06.07

+ Recent posts