토비의 스프링3.1 로 스프링 프레임워크에 대한 공부를 시작했다. 그 첫번째 이야기로 객체지향 설계(object-oriented-design)의 오브젝트(object)란 무엇이고, 오브젝트를 어떤 구조로 설계하는 것이 객체지향을 잘 따르는 것인지 공부한 내용을 정리해보겠다.
객체 지향 프로그래밍은 컴퓨터 프로그래밍의 패러다임 중 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다. (출처: 위키피디아)
책에서 오브젝트란 ~이다 라고 정의하지는 않는다. 오브젝트를 정의내리는 것이 결국 객체지향을 정의내리는 것이라고 생각한다. 그냥 내가 설명할 수 있는 쉬운 말로 설명해보자면, 자바에서 하나의 클래스, 객체가 오브젝트라고 보면 될 것 같다.
기본적으로 객체지향 설계 원칙(SOLID)을 비롯해서,
1. 다양한 목적을 위해 재활용 가능한 설계 방법인 디자인패턴
2. 더 깔끔한 구조가 되도록 지속적으로 개선해나가는 작업인 리팩토링
리팩토링이란? 기존의 코드를 외부 동작방식에는 변화 없이 내부 구조를 변경해서 재구성 하는 작업
3. 오브젝트가 기대한 대로 동작하고 있는지를 효과적으로 검증하는 데 쓰이는 단위테스트
실제로 일하면서 리팩토링을 많이 하는데, 뭔가 거창한 이야기가 아니라 개발자들이 습관적으로 하는 리팩토링이 나와서 반가웠다:)
객체를 설계할 때 가장 염두에 둬야할 사항은, 미래의 변화를 어떻게 대비할 것인가 이다. 그에 대한 대책은 변화의 폭을 최소한으로 줄여주는 것이다. 그렇게 개발하기 위하여, 설계 할 때, 분리와 확장을 고려하여 설계하는 것이 바람직하다.
1. 분리(관심사의 분리)