객체지향 사실과 오해 3장, 4장

박지성 ·2025년 8월 17일
post-thumbnail

이번 3장과 4장은 타입, 추상화, 역할, 책임, 협력이라는 키워드로 정리가 되는 것 같다.
가볍게 정리해봤다

3장. 타입과 추상화

앞에 1장과 2장에서 언급했던 추상화에 대해서 자세하게 나온다.
3장에서는 추상화의 개념에 대해서 지하철 노선도를 통해 설명한다.

지하철 노선을 실제 지리 정보와 똑같이 만든다면, 사람들이 쉽게 보고 이해하기 어렵다
하지만 우리가 지금 보는 지하철 노선도는 추상화를 통해 불필요한 정보를 싹 다 지워버리고, 가장 중요한 역과 연결 관계만 남겨서 쉽게 이해할 수 있도록 하였다.
이를 통해 추상화를 쉽게 이해할 수 있다.

단순하게 만드는 것을 추상화라고 볼 수 있을 것 같다.
이를 객체지향에서는 개념이라는 것으로 묶는다. 이것을 추상화로 볼 수 있다.
그리고 우리는 이 개념을 타입이라고 부른다.

인스턴스와 분류

분류 : 어떤 객체를 특정 타입으로 묶는 행위
인스턴스 : 그 타입에 속하는 각각의 객체를 말한다

타입을 정하는 방법

타입을 묶는 기준이 있다.
DB테이블 처럼 데이터가 같은 것을 묶는 것이 아니라.
행동을 통해 타입을 정한다.

서로 다르더라도 같은 행동을 한다면 같은 객체 타입이다.

슈퍼타입과 서브타입

슈퍼타입 : 일반적이고 포괄적인 개념
서브타입 : 구체적이고 특수한 개념
이러한 특수한 개념을 통해 우리는 더 타입을 계층적으로 구성할 수 있다.

클래스

가장 중요한 사실
3장에서 가장 크게 이해하고, 얻은 사실은

타입 : 객체를 행동에 따라 나누는 개념적인 분류 채계.
클래스 : 타입을 프로그래밍 언어로 구현하기 위한 하나의 구현 도구에 불과하다

4장. 역할, 책임, 협력

4장은 객체에 집중하기 보다는 객체 간의 협력이 중요하다고 말하고 있는 것 같다.
서로 협력하는 과정에서 객체의 책임과 역할이 정해진다고 하고 있다.

협력

설계할 때 어떤 객체가 필요할까? 가 아니라. 이 기능을 구현하기 위해 어떤 협력이 필요할까에서 시작해야한다고 말한다.
협력의 본질은 목표를 달성하기 위해 객체들끼리 요청하고 응답의 흐름을 협력이라고 본다.

책임

협력을 정하면 그 일을 완수하기 위해 필요한 일들이 정의된다. 이것을 책임이라고 한다.
책임 : 객체가 어떤 것을 하고 알고있는지 정의되는 것

설계할 때 중요한 것은 책임을 적절한 객체에게 할당하는 것이 중요하다

역할

우리는 추상화를 배웠기 때문에 역할도 이해할 수 있다.
역할은 특정 책임의 묶음이라고 할 수 있다.
즉 어떤 객체도 행동을 할 수 있다면 그 역할을 할 수 있다.

정리

MSA도 객체로 볼 수 있는 것 아닐까?

요즘 많이 이야기하는 MSA 역시 객체로 볼 수 있는 것이 아닌가 생각이 들었다.

  • 각 서비스는 API를 통해 외부와 통신하고
  • 자체적으로 데이터를 보관하고
  • 하나의 도메인 기능에 집중한다

이는 객체지향의 캡슐화와 단일 책임 원칙을 떠올리게 하는 것 같다
객체를 확장해서 아키텍쳐로 확장된 것으로 볼 수 있는 것 같다.

다만
우리가 기존에 학습한 객체지향은 런타임, 즉 하나의 서비스 안에서 동작하는 단위이지만
MSA는 시스템 수준의 아키텍쳐, 객체지향의 개념을 가진 큰 수준의 객체지향? 으로 볼 수 있는 것 같다.

단어에 매몰되지 말자

운영체제, 프로그래밍 패러다임, 시스템 설계등 다양하게 공부하면서 느끼는 점은, 핵심 개념이 추상화되어 다양한 레벨에서 반복적으로 적용되는 것이 아닌가라는 생각이 든다.

객체지향 또한 마찬가지 아닐까? 클래스, 객체 같은 특정 단어에 매몰되는 것이 아니라, 캡슐화, 책임 분리, 협력 같은 원리를 이해하고 적용해야 다른 레벨, 더 큰 시스템에서 응용하고 적용할 수 있다고 생각한다

따라서 공부를 할 때 개념을 깊이 이해하고, 추상화하고, 원리를 상황에 맞게 사용하고 적용하는 힘을 키워야 문제해결을 잘하는 개발자가 될 수 있지 않을까?

이 책도 우리가 특정 단어와 개념에 얽매이는 것이 아닌, 개념을 이해하는 것을 원하는게 아닌가 생각이든다.
객체지향을 이해하고 적용할 수 있도록..

profile
개발 블로그 맞음.

0개의 댓글