디자인 패턴
디자인 패턴(Design Pattern)
이란, 코드가 좋은 효율을 내도록 하는 설계 방법론입니다. 디자인 패턴은 좋은 코드를 작성하기 위한 방법론 입니다. 여기서 말하는 좋은 코드란, 코드의 재사용성을 극대화하여 좋은 유지보수성을 갖게하는 코드를 의미합니다.
이렇게 좋은 코드를 작성하기 위하여 코드들을 작성하다보니 몇 가지 설계 패턴이 나오게 되었고 이것들을 묶어서 디자인 패턴
이라고 하기로 했습니다.
디자인 패턴
의 바이블이라고 불리우는 GoF의 디자인 패턴 책에서는 디자인 패턴을 세가지 유형으로 분류해서 디자인 패턴을 소개하고 있습니다.
- 생성 패턴(Creational Pattern)
- 구조 패턴(Structural Pattern)
- 행동 패턴(Behavioral Pattern)
생성 패턴
은 객체 생성과 관련한 패턴입니다. 객체지향에서 객체를 생성하고 상속하다보면 복잡한 구조가 생기게 되는데 이를 유연하게 만들고 유지보수를 쉽게 만들어주는 패턴들 입니다.
구조 패턴
은 프로그램 내부의 자료구조, 인터페이스 등의 구조들을 설계 할 때 이용하게 되는 패턴들입니다.
행동 패턴
은 객체 사이의 상호작용들 중에서 반복적으로 사용되는 것들을 패턴화시켜서 사용하는 패턴입니다.
SOLID 원칙
SOLID 원칙
은 객체지향 프로그래밍의 5대 원칙입니다. 갑자기 디자인 패턴 설명하다가 무슨 객체지향?하시겠지만 알고보면 디자인 패턴은 이 SOLID 원칙
을 이용한, 혹은 아주 밀접한 관계를 가지고 있는 기술이기 때문에 SOLID 원칙
을 알고 넘어가면 패턴들을 익히는데 도움이 될 것입니다.
SOLID 원칙
의 5가지 내용은 다음과 같습니다.
SRP - Single Responsibility Principle, 단일 책임 원칙
- 하나의 클래스는 하나의 기능만을 가진다.
- 한 클래스가 여러 기능을 갖게 되면 유지보수성이 떨어진다.
OCP - Open-Closed Principle, 개방-폐쇄 원칙
- 소프트웨어(함수, 클래스, 모듈 등)은 확장에 대해서는 열려있어야 하지만 변경에 대해서는 닫혀있어야한다.
- 추후에 코드에 기능을 추가, 변경할 때 원래 코드를 변경하지 않고 코드의 추가를 통해서 이루어지도록 설계하는 원칙.
LSP - Liskov Substitution Principle, 리스코프 치환 원칙
- 상위의 객체를 하위 타입의 객체로 치환되도 상위 타입에서 사용하던 프로그램이 정상 작동 해야한다.
- 간단히 말하면 자식 클래스의 기능들은 부모 클래스의 모든 기능들을 실행할 수 있어야한다는 의미입니다.
- 즉, 상속 관계가 올바른지 확인을 하고 클래스의 상속을 해야한다는 것 입니다.
ISP - Interface Segregation Principle, 인터페이스 분리 원칙
- 하나의 큰 인터페이스 보다는 작은 인터페이스 여러개로 나누어서 필요한 인터페이스만 사용하도록 한다.
- 한 인터페이스에 여러 기능들을 넣기보다는 이것을 기능별 작은 인터페이스로 나누어서 필요한 때에 필요한 메소드들만을 사용하도록 하는 원칙입니다.
DIP - Dependency Inversion Principle, 의존관계 역전 원칙
- 프로그래머가 의존할 때에는 변화하기 어려운 것에 의존해야한다.
- 변화하기 어려운 것은 추상화가 이루어지는 추상 클래스나 인터페이스를 의미합니다.
- 구체적으로 구현하는 클래스 보단 인터페이스 같은 추상화에 의존해서 작성해야 합니다.