본문 바로가기
ComputerScience/Design Pattern

디자인 패턴 - 디자인 원칙

by 규난 2023. 2. 14.
728x90

이번 포스트에서는 디자인 패턴의 디자인 원칙에 대해서 알아보도록 하겠습니다.

디자인 패턴이란?

디자인 패턴은 소프트웨어 설계 시 특정 상황에서 자주 만나는 문제를 해결하기 위해 사용할 수 있는 재사용 가능한 솔루션을 말합니다.

모든 패턴에는 간결한 이름이 있어서 잘 알려진 패턴을 적용하고자 할 때 간단히 패턴 이름을 언급하는 것만으로도 설계의 의도와 해결책을 함께 설명할 수 있다는 장점이 있습니다.

디자인 패턴은 주로 객체지향 설계에 관한 것이고, 대부분 객체지향적 설계 원칙을 이용해 문제를 해결합니다.

패턴의 설계 구조를 보면 대부분 비슷한데, 그 이유는 객체지향적인 설계로부터 문제를 해결하기 위해 적용할 수 있는 확장성 추구 방법이 대부분 두 가지로 정리되기 때문입니다.하나는 클래스 상속이고 다른 하나는 오브젝트 합성입니다.

따라서 패턴의 결과로 나온 코드나 설계 구조만 보면 대부분 비슷해 보입니다.

패턴에서 가장 중요한 부분은 각 패턴의 핵심이 담긴 목적 또는 의도입니다. 패턴을 적용할 상황, 해결해야 할 문제, 솔루션의 구조와 각 요소의 역할과 함께 핵심 의도가 무엇인지를 잘 기억해두고 사용해야 합니다. 이 부분을 고려하지 않고 무분별하게 디자인 패턴을 적용하면 당장은 좋을지 몰라도 추후에 안티 패턴으로 바뀌는 상황이 올 수 있습니다.

디자인 원칙

애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분과 분리합니다.

즉, 달라지는 부분을 찾아서 나머지 코드에 영향을 주지 않도록 캡슐화를 합니다. 그러면 코드를 변경하는 과정에서 의도치 않게 달라지지 않는 부분도 수정하는 일을 줄이면서 시스템의 유연성을 향상시킬 수 있습니다.

 

다시 말해 코드에 새로운 요구사항이 있을 때마다 바뀌는 부분이 있다면 분리하여 캡슐화하면 바뀌지 않는 부분에는 영향을 미치지 않고 바뀌는 부분의 코드만 고쳐서 확장할 수 있습니다.

 

구현보다는 인터페이스에 맞춰서 프로그래밍을 합니다.

인터페이스에 맞춰서 프로그래밍 한다는 말은 상위 형식에 맞춰서 프로그래밍 한다는 말입니다.

다시 말해 실행 시에 쓰이는 객체가 코드에 고정되지 않도록 상위 형식(spuertype)에 맞춰 프로그래밍해서 다형성을 활용해야 한다는 점에 있습니다.

 

이 부분에서 중요한 원칙은 변수를 선언할 때 추상 클래스나 인터페이스 같은 상위 형식으로 선언하는 것입니다.

그러면 상위 형식을 구현한 구현체를 사용해 다형성을 극대화할 수 있으며 기존 클래스를 전혀 건드리지 않고 새로운 행동을 추가하거나 변경할 수 있습니다.

 

간단한 예제

// Animal을 확장한 Dog class로 선언하면 구체적인 구현에 맞춰서 프로그래밍 해야합니다.
Dog dog = new Dog();

// Dog라는 걸 알고 있긴 하지만 Animal을 확장한 구현 class로 언제든 변경이 가능합니다. (다형성)
Animal animal = new Dog();

 

상속보다는 구성(composition)을 활용합니다.

구성을 활용해서 시스템을 만들면 유연성을 크게 향상시킬 수 있습니다.

 

알고리즘군을 (예를 들어 세금 계산 방식이나 할인율 적용)을 별도의 클래스 집합으로 캡슐화할 수 있으며 구성 요소로 사용하는 객체에서 올바른 인터페이스를 구현하기만 하면 실행 시에 행동을 바꿀 수도 있습니다.

 

728x90

'ComputerScience > Design Pattern' 카테고리의 다른 글

Adaptor Pattern  (0) 2023.03.06
Facade Pattern  (0) 2023.02.26
Strategy Pattern  (0) 2023.02.20
Builder Pattern  (0) 2023.02.01
Singleton Pattern  (0) 2023.01.30