Python tech/고급 파이썬 공부

[클린 아키텍처] SW Architecture와 Object Oriented 개요

콜레오네 2023. 8. 20. 23:52

이 포스팅은 도서출판인사이트의 "Clean Architecture" 내용을 참조하였습니다.


 

설계Design / 아키텍처 Architecture

  • 아키텍처
    • Low level 세부사항과 분리된, High level의 무언가를 가르킬 때 사용
  • 설계
    • Low level의 구조 또는 결정사항을 의미할 때 사용

But
아키텍처와 설계의 사소한 차이는 무시할 수 있는 수준으로
혼용하여 사용해도 큰 문제가 없음

 

Why?
어차피 High level과 Low level은 유기적으로 연결되어 있을 뿐더러
둘의 경계가 뚜렷하지 않고
결국 High level에서 Low level로 향하는 의사결정의 연속성만이 존재할 뿐

 

이상적인 SW 아키텍처의 목표?

한 마디로 요약하자면
"SW Architecture의 목표는 필요한 무언가를 만들고 유지보수하는데 투입되는 인력의 최소화이다."
자본주의 시장에서 결국, 높은 생산성을 유지시켜주는 것이 아키텍처의 최종 목표라고 할 수 있겠다.

 

그렇다면, 왜 아키텍처를 신경쓰지 않고 유지보수성이 떨어지는 SW가 탄생되는 것을까?
특히나 기업에서 SW를 개발함에 있어서 언제나
출시가 우선시되는 문화였고, 이에 따라 필요한 기능 구현에 급급하고
나중에 코드 개선하지 뭐~ 라고 해놓고 실제로 개선하는 경우는 드물기 때문

 

그래서 처음부터 잘해야 하고
저자는 "빨리가는 유일한 방법은 제대로 가는 것"이라 말한다.

 


프로그래밍 패러다임

프로그래밍은 크게 3 가지 패러다임으로 나뉜다.

  • 구조적 프로그래밍 Structured
  • 객체 지향 프로그래밍 Object Oriented (이하 OO)
  • 함수형 프로그래밍 Functional

각 패러다임은 저마다의 특징이 있지만
결국 어떤 패러다임도 우리에게 무언가를 빼앗아 간다. (= 일부 기능을 제한한다.)


예를 들면,
함수형 프로그래밍에서는 할당문을 빼앗아 갔고
객체 지향 프로그래밍에서는 function pointer를 빼앗아 갔다.

 

그리고 이 중에서 현재 가장 널리 쓰이고 있는 패러다임이자

SW 아키텍처를 가장 유념해야할 OO 프로그래밍에서의 아키텍처를 살펴보려 한다.

 

객체지향을 뭐라고 설명할래?

OO의 본질을 설명하기 위한 방법은 저마다 다르지만

가장 명확한 것은 OO의 특징을 통해 설명하는 것이고

그것은 바로

  • 캡슐화 Encapsulation
  • 상속 Inheritance
  • 다형성 Polymorphism

위 성질은 OO라면 최소한 반드시 지원해야하는 성질들이다.

이미 너무 잘 알려진 성질들이라, 세부 개념은 설명하지 않겠다.

 

이중에서 다형성이 중요한데

다형성을 통해 의존 역전이 가능하다.

 

의존성 역전 Dependency Inversion 

함수의 호출 구조가 High level -> Low level 이었던 것을

제어의 흐름과 별개로 의존성을 반대로 가져갈 수 있게 되는 특징이며

이를 통해 아키텍처 전체에 대해 의존성을 각각 제어할 수 있게 된다.

 

이를 통해 프로그램은 컴포넌트별로 독립성을 유지할 수 있고

따라서 배포의 독립성과 개발 독립성 또한 유지할 수 있게 된다.

 

 

 

 

 

 

반응형