객체지향적으로 개발 할 때 OOD를 따져서 설계하고 개발한다면 더욱 더 좋은 소스가 될 수 있다.
한번 알아보도록 하자!
출처 : http://en.wikipedia.org/wiki/Solid_(object-oriented_design)
추억의 솔리드..ㅋㅋㅋㅋㅋ 이밤에 끝을 잡고~
Initial | Stands for (acronym) |
Concept |
---|---|---|
S | SRP |
ex) Class에 오직 하나의 책임..그렇다면! 메소드도 있는데??? 그렇다! 하나의 Class에 여러가지 메소드가 있을 것이다. 그 메소드들이 Class들 마다 하는 역할을 구분하여 오직 하나의 역할(책임)을 줘야 한다는 뜻이다.
즉, public class acetData{ public void load(){ ......................... }
public void save(){ ......................... }
public void del(){ ......................... }
public void displayToUi(AcetVo acetVo){ ......................... } }
위의 클래스에서 Data와 관련 된 메소드는 데이터를 load 데이터를 save 데이터를 del 이렇게 3가지이며, 데이터 관련 책임이라고 볼 수 있으며, displayToUi는 UI 화면에 데이터를 뿌려주는 것! 즉, 화면에 보여주는 책임이라고 볼 수 있다. displayToUi는 UI Class로 빼줘야 한다.
|
O | OCP |
|
L | LSP |
1)은 Class기반의 상속을 생각하면 된다. 2)는 Interface 기반의 상속(구현)을 생각하면 된다.
1)은 말그대로 객체를 치환하여도 같은 동작을 하면 OK!! 2) 객체를 치환한다는 개념으로 접근하기보다 SubType의 기능 수행으로 생각하면 된다. ex) dataSave()면 데이터 저장인데 그 안에서 modify기능을 하면 안된다.
이 원칙은 OCP를 잘 구현하기 위해 체크하는 스펙 같은거라고 보면 될 것 같다. 반대로 말하면 리스코프 치환 원칙을 지키지 않으면 OCP를 지키지 않을 가능성이 커진다는 것이다.
특히 2번, 인터페이스 기반에서는 치환이라는 개념 자체가 이해가 가질 않았을 것이다..그러므로 기능, 리턴, 예외 등 올바른 작동을 하는지 봐야 한다.
|
I | ISP |
생각해보자! 기능 중심?????? 인터페이스를 분리해??? Why?? 인터페이스를 하나 만들려고 한다. 그 안에는 여러가지 메소드들이 많이 있을 것이다. 즉, ISP의 원칙을 잘모른다면..동작의 역할 인 메소드들이 뒤죽박죽 하나의 인터페이스에 얽혀있을 것이다. 하지만 ISP를 잘~~알고 인터페이스를 만든다고 하면! 바로 기능중심!!! 으로 나눠서 이쁘게 잘~~~쓰게 될 것이다.
참고문헌 : 개발자가 반드시 정복해야 할 객체지향과 디자인 패턴(최범균 저)
|
D | DIP |
DI(Dependency Injection)이라고 보면 된다. springframework의 특징
중인 IoC/DI 이다. 커플링을 최소화시키며(외부주입을 해주니깐!)
특히, 생성자 또는 setter로 주입을 시키는 특징이 있다.
|
- END -
'역량 UP! > Architecture' 카테고리의 다른 글
마이크로서비스 아키텍처(Microservice Architecture) (0) | 2021.02.03 |
---|---|
메시지큐에 대해 알아보자. (0) | 2017.06.27 |
[소프트웨어 아키텍처 이론과 실체] 아키텍트로 가기 위한 필독서!! (0) | 2013.11.24 |
DTP(Distribution Transaction Processing) 관련 자료 (0) | 2013.06.08 |
ACE-T의 아키텍트 이야기 (0) | 2013.01.28 |