[오브젝트] 1장 : 객체, 설계

jungh8n·2022년 12월 8일
0

들어가며

이 책은 객체지향 패러다임을 소개하는 책이다.
객체지향 패러다임이라는 것은 지금까지 실무에서 발전돼 온 객체지향 프로그래밍에서 정형화된 패턴을 이용하여 생산성을 높이기 위해 정립된 이론이라고 이해하면 되겠다.
이 책을 읽으며 객체지향적 설계와 코드 작성을 위한 이론을 공부하겠지만, 가장 중요한 것은 실제로 그러한 설계와 코딩이 가능해야 한다는 점을 잊지 말자.

객체지향적 설계란

로버트 C. 마틴이 주장한 모듈이 지녀야 할 세 가지 덕목은 아래와 같다.

  1. 의도한 기능대로 정확히 동작해야 한다.
  2. 수정이 용이해야 한다.
  3. 특별한 설명 없이도 누구나 쉽게 이해할 수 있어야 한다.

여기서 2번과 3번은 어느정도 일맥상통 한다고 볼 수 있다.
쉽게 이해할 수 있어야 수정이 용이할 것이고, 복잡한 의존관계를 가지지 않는 수정이 용이한 코드는 누구나 쉽게 이해할 수 있을 것이다.

의존관계라는 말이 등장했는데, 객체지향 프로그래밍에서 기능을 수행해내기 위해 다른 객체와의 상호작용은 필수적이므로 의존성은 꼭 필요한 개념이다.
하지만 의존성이 많은 객체 공동체는 변경 시 연쇄적으로 수정될 내용이 많아지게 되고 위의 법칙을 어기게 된다.
따라서 우리의 목표는 필수적인 의존성만을 유지하고 불필요한 의존성은 최대한 제거하는 설계를 하는 것이다.
의존성의 정도를 우리는 객체 간의 결합도라고도 표현한다.

결합도를 낮추는 것이 좋은 객체지향적 설계이다

객체지향적 설계를 위한 방법

결합도를 낮추기 위해서는 객체를 가능한 독립적이게 만들면 된다.
이를 위해 등장한 개념이 캡슐화이다.
캡슐화는 객체 내부의 데이터와 메소드를 감춤으로써 외부에서의 접근을 차단하는데 목적이 있다.
이렇게 함으로써 다른 객체가 해당 객체에 무언가를 요청할 때 이 객체 내부에서 어떤 과정을 거치는지 알 수 없는(또는 관심을 갖지 않는) 상태로 상호작용을 이어갈 수 있다.

캡슐화를 구현하기 위해 인터페이스를 사용할 수 있다.
객체들은 자신들의 데이터와 메소드를 은닉하고 인터페이스만을 공개하며, 다른 객체의 인터페이스를 구현(implement)함으로써 캡슐화를 구현할 수 있다.

절차지향 vs 객체지향

둘을 구분짓는 가장 큰 기준점은 데이터와 그것을 처리하는 프로세스의 위치가 동일한지의 여부다.

절차지향은 프로세스를 순차적으로 진행하는데 있어 필요한 데이터를 여러 다른 객체에 접근하여 가져오기도 한다.
반면 절차지향은 특정 데이터를 다루게 될 경우 해당 데이터를 가진 객체에 프로세스 진행의 책임을 위임하고 둘을 같은 위치에 둔다.

1개의 댓글

comment-user-thumbnail
2022년 12월 10일

잘 읽었습니다!!

답글 달기