디자인 패턴 (design pattern)
1. 디자인 패턴 (design pattern)
디자인 패턴은 개발 과정에서 겪게되는 공통된 문제들에 대해 전문가들의 경험을 모아 표준적인 해법을 구조화한 것으로, 디자인 패턴을 숙지하면 개발자간의 원활한 커뮤니케이션이 가능해진다.
디자인 패턴은 GoF(Gang of Four)에 의한 고안된 것으로 보는 것이 일반적이다. GoF는 에릭 감마(Erich Gamma), 리처드 헬름(Richard Helm), 랄프 존슨(Ralph Johnson), 존 블리스데스(John Vlissides)에 의해 고안된 것으로 알려져있다.
2. SOLID 원칙
좋은 객체지향 설계를 위해서는 기본적으로 5가지 원칙을 따르는 것이 좋다. 5가지 원칙은 각각의 앞글자를 따서 SOLID라고 부른다. 좋은 설계란 응집도는 높게, 결합도는 낮게 설계된 것을 이야기한다.
- SRP (Single Responsibility Principle, 단일 책임 원칙)
객체는 단 하나의 책임만 가져야한다. 즉 어떤 변화에 의해 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 함을 의미한다.
- OCP (Open-Closed Principle, 개방-폐쇄 원칙)
변경에는 닫혀있고, 확장에는 열려있어야한다. 요구사항의 변경이나 추가가 발생하더라도, 기존 코드에는 수정이 일어나지 않고, 쉽게 확장할 수 있어야 한다는 의미이다.
- LSP (Liskov Substitution Principle, 리스코프 치환 원칙)
자식 클래스는 부모 클래스의 역할을 대체할 수 있어야한다.
자식 클래스는 부모 클래스의 책임을 무시하거나 재정의하지 않고, 확장만 수행해야한다.
- ISP (Interface Segregation Principle, 인터페이스 분리 원칙)
사용하지 않는 인터페이스는 구현하지 말아야한다. 하나의 일반적인 interface보다는 여러 개의 구체적인 interface가 낫다.
- DIP (Dependency Inversion Principle, 의존 역전 원칙)
추상성이 높은 클래스에 의존해야한다. 쉽게 말해 상위 클래스가 하위 클래스를 의존해서는 안된다는 것이다.
3. 디자인패턴의 유형
디자인 패턴은 크게 3가지 유형(생성, 구조, 행위)이 있고, 각 유형은 2가지 관점(클래스, 객체)로 설명할 수 있다.
디자인패턴을 학습하기에 앞서 SOLID 원칙을 숙지하면 디자인패턴에 대해 보다 깊은 이해가 가능하다. 현업에서 SOLID 원칙을 지키지 않는 경우를 더러 보게 되는데 해당 원칙만 지켜나간다면 좋은 설계, 좋은 코드를 만들어 갈 수 있을 것이다.
디자인 패턴은 개발 과정에서 겪게되는 공통된 문제들에 대해 전문가들의 경험을 모아 표준적인 해법을 구조화한 것으로, 디자인 패턴을 숙지하면 개발자간의 원활한 커뮤니케이션이 가능해진다.
디자인 패턴은 GoF(Gang of Four)에 의한 고안된 것으로 보는 것이 일반적이다. GoF는 에릭 감마(Erich Gamma), 리처드 헬름(Richard Helm), 랄프 존슨(Ralph Johnson), 존 블리스데스(John Vlissides)에 의해 고안된 것으로 알려져있다.
2. SOLID 원칙
좋은 객체지향 설계를 위해서는 기본적으로 5가지 원칙을 따르는 것이 좋다. 5가지 원칙은 각각의 앞글자를 따서 SOLID라고 부른다. 좋은 설계란 응집도는 높게, 결합도는 낮게 설계된 것을 이야기한다.
- SRP (Single Responsibility Principle, 단일 책임 원칙)
객체는 단 하나의 책임만 가져야한다. 즉 어떤 변화에 의해 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 함을 의미한다.
- OCP (Open-Closed Principle, 개방-폐쇄 원칙)
변경에는 닫혀있고, 확장에는 열려있어야한다. 요구사항의 변경이나 추가가 발생하더라도, 기존 코드에는 수정이 일어나지 않고, 쉽게 확장할 수 있어야 한다는 의미이다.
- LSP (Liskov Substitution Principle, 리스코프 치환 원칙)
자식 클래스는 부모 클래스의 역할을 대체할 수 있어야한다.
자식 클래스는 부모 클래스의 책임을 무시하거나 재정의하지 않고, 확장만 수행해야한다.
- ISP (Interface Segregation Principle, 인터페이스 분리 원칙)
사용하지 않는 인터페이스는 구현하지 말아야한다. 하나의 일반적인 interface보다는 여러 개의 구체적인 interface가 낫다.
- DIP (Dependency Inversion Principle, 의존 역전 원칙)
추상성이 높은 클래스에 의존해야한다. 쉽게 말해 상위 클래스가 하위 클래스를 의존해서는 안된다는 것이다.
3. 디자인패턴의 유형
디자인 패턴은 크게 3가지 유형(생성, 구조, 행위)이 있고, 각 유형은 2가지 관점(클래스, 객체)로 설명할 수 있다.
디자인패턴을 학습하기에 앞서 SOLID 원칙을 숙지하면 디자인패턴에 대해 보다 깊은 이해가 가능하다. 현업에서 SOLID 원칙을 지키지 않는 경우를 더러 보게 되는데 해당 원칙만 지켜나간다면 좋은 설계, 좋은 코드를 만들어 갈 수 있을 것이다.
댓글
댓글 쓰기