Design Pattern

2020-06-15

해당 Post는 Design Pattern과 싱글톤 패턴에 대해 정리한 파일입니다.

디자인 패턴이란?

소프트웨어 디자인에서 특정 문맥에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책


이미 잘 구현이 된 것을 활용하기에 처음부터 새로만들 필요 없어 용이합니다.

디자인 패턴의 특징

디자인 패턴은 아이디어입니다. 특정한 구현이 아닙니다.

프로젝트에 항상 적용해야 하는 것은 아니지만 , 추후 재사용, 호환, 유지 보수시 발생하는 문제 해결을 예방하기 위해 패턴을 만들어 둔 것입니다.

디자인 패턴의 분류

GoF 디자인 패턴으로 23가지의 디자인 패턴을 정리하고

각각의 디자인 패턴을 크게 생성(Creational), 구조(Structural), 행위(Behavioral) 3가지로 분류합니다.

생성 패턴 (Creational) : 객체의 생성 방식 결정

Class-creational patterns, Object-creational patterns.

예) DBConnection을 관리하는 Instance를 하나만 만들 수 있도록 제한하여, 불필요한 연결을 막음.

구조 패턴 (Structural) : 객체간의 관계를 조직

예) 2개의 인터페이스가 서로 호환이 되지 않을 때, 둘을 연결해주기 위해서 새로운 클래스를 만들어서 연결시킬 수 있도록 함.

행위 패턴 (Behavioral): 객체의 행위를 조직, 관리, 연합

예) 하위 클래스에서 구현해야 하는 함수 및 알고리즘들을 미리 선언하여, 상속시 이를 필수로 구현하도록 함.

싱글톤 패턴이란??

애플리케이션이 시작될 때, 어떤 클래스가 최초 한 번만 메모리를 할당(static)하고 해당 메모리에 인스턴스를 만들어 사용하는 패턴

즉, 싱글톤 패턴은 ‘하나’의 인스턴스만 생성하여 사용하는 디자인 패턴입니다.

인스턴스가 필요할 때, 똑같은 인스턴스를 만들지 않고 기존의 인스턴스를 활용하는 것!

왜 사용할까요?

먼저, 객체를 생성할 때마다 메모리 영역을 할당받아야 합니다. 하지만 한번의 new를 통해 객체를 생성한다면 메모리 낭비를 방지할 수 있습니다.

또한 싱글톤으로 구현한 인스턴스는 ‘전역’이므로, 다른 클래스의 인스턴스들이 데이터를 공유하는 것이 가능한 장점이 있습니다.

단점은요?

객체 지향 설계 원칙 중에 개방-폐쇄 원칙이란 것이 존재합니다.

만약 싱글톤 인스턴스가 혼자 너무 많은 일을 하거나, 많은 데이터를 공유시키면 다른 클래스들 간의 결합도가 높아지게 되는데,

이때 개방-폐쇄 원칙이 위배됩니다.

결합도가 높아지게 되면, 유지보수가 힘들고 테스트도 원활하게 진행할 수 없는 문제점이 발생합니다.