본문 바로가기

스프링 입문을 위한 자바 객체 지향의 원리와 이해

(6)
[스프링 입문을 위한 자바 객체 지향의 원리와 이해] 객체 지향은 절차적/구조적 프로그래밍의 어깨를 딛고 1) 객체 지향과 절차적/구조적 프로그래밍의 관계- 절차적/구조적 프로그래밍은 객체 지향 프로그래밍과 비교되어 왔지만,  사실 객체 지향 프로그래밍은 절차적/구조적 프로그래밍의 유산을 간직하고 있다.  연산자, 제어문, 메모리 관리 체계 등등 많은 부분을 차용하고 있는 것이다. - 사실 C++도 C 언어를 부정한 것이 아니라 계승한 것이다.  그래서 프로그래머는 절차적/구조적 프로그래밍 기법도 잘 알고 있어야 한다.  구조적 프로그래밍은 함수로 그 특징을 대변한다고 볼 수 있는데,  객체 지향 프로그래머들도 메서드 작성에 대한 지혜를   구조적 프로그래밍에서 배워와야 한다.  - 메서드를 만들 때는 순서도 또는 의사 코드를 작성하는 것이 좋다.  능력이 된다면 UML 액티비티 다이어그램을 그리는 것도 좋..
[스프링 입문을 위한 자바 객체 지향의 원리와 이해] DIP - 의존 역전 원칙 "고차원 모듈은 저차원 모듈에 의존하면 안된다.  이 두 모듈 모두 다른 추상화된 것에 의존해야 한다.""추상화된 것은 구체적인 것에 의존하면 안된다. 구체적인 것이 추상화된 것에 의존해야 한다.""자주 변경되는 구체(Concrete) 클래스에 의존하지 마라"- 로버트 C.마틴 1) 의존 역전 원칙이란?- 자동차와 스노우타이어 사이에는 아래 그림처럼 의존 관계가 있다.  자동차가 스노우타이어에 의존한다.  -그런데 자동차는 한 번 사면 몇 년은 타야 하는데 스노우타이어는 계절이 바뀌면  일반 타이어로 교체해야 한다. 이런 경우 스노우타이어를 일반타이어로 교체할 때 자동차는 그 영향에 노출돼 있음을 알 수 있다. 바로 자동차 자신보다 더 자주 변하는 스노우타이어에 의존하기에 부서지기 쉬움이라는  나쁜 냄새..
[스프링 입문을 위한 자바 객체 지향의 원리와 이해] ISP - 인터페이스 분리 원칙 "클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안된다."- 로버트 C. 마틴  1) 단일 책임 원칙 리뷰- 단일 책임 원칙(SRP) 예제를 다시 살펴보자.  단일 책임 원칙을 적용하기 전 남자 클래스는 아래와 같았다.  -단일 책임 원칙을 적용한 후에는 아래처럼 단일 책임을 갖는 클래스로 나뉘었다.  2) 인터페이스 분할 원칙-단일 책임 원칙에서 제시한 해결책은 남자 클래스를 토막내서 하나의 역할(책임)만 하는 다수의 클래스로 분할하는 것이다.   그런데 이 때, 다른 방법인 ISP, 즉 인터페이스 분할 원칙도 선택 가능하다.  - 남자 클래스를 여자친구를 만날 때는 남자친구 역할만 할 수 있게 인터페이스로 제한하고,  어머니와 있을 때는 아들 인터페이스로 제한하고,  직장 상사 앞에서..
[스프링 입문을 위한 자바 객체 지향의 원리와 이해] LSP - 리스코프 치환 원칙 "서브 타입은 언제나 자신의 기반 타입(base type)으로 교체할 수 있어야 한다."- 로버트 C. 마틴  1) 리스코프 치환 원칙이란?- 상속에 대해 설명하면서 객체 지향에서의 상속은 조직도나 계층도가 아닌 분류도가 돼야 한다고 했다.  객체 지향의 상속은 다음의 조건을 만족해야 한다.  (1) 하위 클래스 is a kind of 상위 클래스 - 하위 분류는 상위 분류의 한 종류다(2) 구현 클래스 is able to 인터페이스 - 구현 분류는 인터페이스할 수 있어야 한다 - 위 두 개의 문장대로 구현된 프로그램이라면 이미 리스코프 치환 원칙을 잘 지키고 있다고 할 수 있다.  하지만 위 문장대로 구현되지 않은 코드가 존재할 수 있는데,  바로 상속이 조직도나 계층도 형태로 구축된 경우다.  - 아..
[스프링 입문을 위한 자바 객체 지향의 원리와 이해] OCP - 개방 폐쇄 원칙 "소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에 대해서는 열려 있어야 하지만 변경에 대해서는 닫혀 있어야 한다."- 로버트 C. 마틴 위 문장을 조금 더 의역해 보면 아래와 같은 문장을 이끌어 낼 수 있다."자신의 확장에는 열려 있고, 주변의 변화에 대해서는 닫혀 있어야 한다."  1) 개방 폐쇄 원칙이란?- 개방 폐쇄 원칙은 다양한 곳에서 다양하게 이야기되고 있으니  딱 꼬집어서 예를 들기가 그리 쉽지는 않다.  몇 가지 예제를 통해 개방 폐쇄 원칙을 이해해보자.  - 어느 날 한 운전자가 마티즈를 구입했다.   그리고 열심히 마티즈에 적응했다고 해보자.  그리고 훗날 그 운전자에게 쏘나타가 생겼다.  - 창문과 기어가 수동이던 마티즈에서 창문과 기어가 자동인 쏘나타로 차종을 바꾸니  운전자의 ..
[스프링 입문을 위한 자바 객체지향의 원리와 이해] 단일 책임 원칙 "어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다" - 로버트 C.마틴  1) 단일 책임 원칙이란?- 아래 그림과 같이 남자라고 하는 클래스와 남자 클래스에 의존하는 다양한 클래스가 있다고 생각해보자. - 딱 봐도 남자는 참 피곤할 것 같다. 이러한 피곤함은 역할과 책임이 너무 많기 때문이다.  객체 지향의 세계에서는 이런 경우 나쁜 냄새가 난다고 한다.  예를 들어, 어느 날 여자 친구와 헤어졌다고 해보자.  남자는 더 이상 챙길 일 없는 기념일과 대상이 없는 키스하기에 힘들어하게 된다.  - 거기에 더해 여자친구 없는 스트레스를 온 세상에 뿌리고 다니니   어머니, 직장 상사, 소대장님까지 피곤한 지경에 이르게 되고야 만다.  따라서 이런 경우에 역할(책임)을 분리하라는 것이 단일 책임 원..