본문 바로가기
더 좋은 개발자 되기/개발자 책읽기

[개발자 책읽기] 클린 아키텍처-소프트웨어 구조와 설계의 원칙 (5장 6장 - 객체 지향, 함수형 프로그래밍)

by Wonit 2022. 4. 22.

해당 글은 Robert C.Martin 클린 아키텍처 라는 책을 읽고 학습한 내용을 정리 및 회고하는 글 입니다. 자세한 사항은 YES 24 클린 아키텍처 - 소프트웨어 구조와 설계의 원칙 에서 확인해주세요.

 

클린 아키텍처 - 소프트웨어 구조와 설계의 원칙 (Robert C. Martin)

 

  • 위키북스
  • 지은이: Robert C.Martin (Uncle Bob)
  • 옮긴이: 송준이

 


 

이번 장에서 이야기하고자 하는 것

 

객제지향 프로그래밍

 

  • 좋은 아키텍처를 만드는 것
    • 객체 지향 설계 원칙을 잘 이해하고 응용하는 데에서 출발한다.
    • 객체 지향을 설명하기 위해서 3가지를 잘 이해해야 함
      1. 캡슐화
      2. 상속
      3. 다형성
  • 캡슐화, Encapsulation
    • 구분선 밖의 데이터는 은닉되고 일부 함수만 노출시킴으로 데이터와 함수를 응집력 있게 만듦
    • 꼭 OO 언어에만 국한된 개념은 아님
  • 상속, Inheritance
    • 어떤 변수와 함수를 하나의 유효 범위로 묶어서 재정의 하는 일
  • 다형성, Polymorphism
    • 플러그인 아키텍처를 지탱하는 힘
    • 장치 독립성, 즉 구현에 대한 종단의 자유
    • 의존성에 대한 제어의 역전
      • 배포 독립성과 개발 독립성을 갖는다

 

함수형 프로그래밍

 

  • 불변성
    • Race Condition, Deadlock, Concurrent Update 문제는 모두 가변 변수로 인해서 발생됨
    • 가변 변수를 사용하지 않으면 위의 문제들을 해결할 수 있음
    • 과연 가변변수를 사용하지 않을 수 있을까?
      • 가능하다.
      • 단, 저장 공간이 무한하고 프로세서의 속도가 무한히 빠르다면 가능하다.
  • 현실적으로 불변성을 만족하려면
    • 불변성을 100% 만족하는 것은 현실적으로 어렵다.
    • 결국 타협을 해야한다.
      • 가변 컴포넌트와 불변 컴포넌트를 나누는 것
  • 이벤트 소싱
    • Event 자체를 모두 저장시켜버려서 변경되는 부분이 없도록 하는 것
    • 이벤트를 상태가 아닌 트랜잭션을 저장하는 것
    • 결국 Application 의 최종 상태는 CR 만 존재
    • git 과 같은 VCS 가 이와 같은 방식임

 

나의 해석과 회고

 

이번 장에서는 객체 지향이 무엇인지 정의하기 전에 객체 지향이 어떤 것들을 가지고 있는지에 대해서 이야기한다.

 

나는 객체지향을 배울 때, 어떤 책에서는 다음과 같은 문장을 외우면 끝이라고 했다.

 

캡! 상추다! (캡슐화, 상속, 추상화, 다형성)

 

결국 아무 의미 없이 그냥 캡상추다 라는 문자만 달달 외워서 시험을 봤던 기억이 있다.

 

사실 객체지향이라는 것은 이렇듯 단순하게 한 단어, 문장, 몇마디의 긴 문장으로 정의할 수 없다고 믿는다.

 

객체지향이라는 것은 지향이라는 말 자체가 가진 힘으로 인해 너무나도 추상적이고 받아들이기 까다롭기 때문이다.

 

그럼 나는 어떻게 객체지향을 정의하는가?

 

내가 정의한 객체지향이란 객체 스스로가 자율성을 갖고 스스로 협력하여 현실 세계의 문제를 해결하기 위해 나아가는 것

 

이라고 정의한다.

 

사실 이마저도 매우 추상적이다.

 

이런 추상적인 객체지향에는 3가지의 특징이 존재한다고 책에서는 언급한다.

 

  1. 캡슐화
  2. 상속
  3. 다형성

 

이 중에서 나는 다형성이야 말로 왜 우리가 객체지향을 이토록 사랑하는지 알 수 있는 대목이라고 생각한다.

 

우리는 혼자서 일을 하지 않는다. 여러 사람과 동료들과 협력을 통해서 하나의 시스템을 만들어 나간다.

 

결국 우리는 하나의 공통의 목표 (소프트웨어의 개발과 시장에 출시)를 이루기 위해서 적절하게 업무를 나눠 가져가야 한다.

 

이 때 객체지향이 가진 힘을 이용할 수 있다.

 

바로 다형성이다.

 

책에서는 다형성의 배포 독립성, 개발 독립성에 대해 이야기를 하는데, 이러한 독럽성이야 말로 왜 객체지향이 이토록 오래 살아남았는지 알

수 있는 대목이라 생각한다.

 

단지 독립성이라는게 협업을 잘 하기 위해서? 라고 묻는 사람이 있을 수 있다.

 

하지만 나는 그에 대한 대답을 한치의 고민도 없이 그렇다. 라고 할 것이다.

 

우리가 클린 코드, 클린 아키텍처, OOP 를 하는 목적은 무엇인가? 우리가 개발을 하는 목적은 무엇인가? 결국 우리는 일을 잘 하기 위해서가 아닌가?

 

댓글0