Post

객체 지향 프로그래밍

5. 객체 지향 프로그래밍

캡슐화?

데이터와 함수를 쉽고 효과적으로 캡슐화하는 방법을 OO언어가 제공

이를 통해 데이터와 함수가 응집력 있게 구성된 집단을 서로 구분 짓는 선을 그을 수 있다.

사실 C언어에서도 완벽한 캡슐화 가능

오히려 OO언어에서 캡슐화 기능이 훼손됨

이 때문에 OO가 강력한 캡슐화에 의존한다는 정의는 받아들이기 힘들다.

상속?

사실상 OO언어가 있기 훨씬 이전에도 C 프로그래머는 상속을 구현 가능했다.

상속을 흉내내기는 했지만, 사실상 상속만큼 편리한 방식은 절대 아니었다.

다중 상속을 구현하기란 훨씬 어렵다.

그리고, 업캐스팅 기능도 없다.

OO언어가 완전히 새로운 개념을 만들지는 못했지만, 데이터 구조에 가면을 씌우는 일을 상당히 편리한 방식으로 제공

다형성

OO언어가 있기 전에도 다형성 표현 가능

함수를 가리키는 포인터를 응용한 것이 다형성

OO언어는 다형성을 제공하지는 못했지만, 안전하고 편리하게 사용할 수 있게 해줌

함수에 대한 포인터를 직접 사용하여 다형적 행위를 만드는 방식은 위험하다.

프로그래머가 특정 관례를 수동적으로 따르는 방식

관례를 지켜야 한다는 사실을 망각하게 되면 버그 발생

OO언어는 이러한 관례를 없애주기 때문에 실수할 위험이 없다.

다형성이 가진 힘

다형성 -> 플러그인 -> 변경 X

플러그인 아키텍처는 독립성을 지원하기 위해 만들어짐

OO의 등장으로 언제 어디서든 플러그인 아키텍처 적용 가능

의존성 역전(dependency inversion)

전형적인 호출 트리에서 소스 코드 의존성의 방향은 반드시 제어흐름을 따른다.

제어흐름은 시스템의 행위에 따라 결정되며, 소스 코드 의존성은 제어흐름을 따라 결정된다.

다형성이 낀다면, 인터페이스 사이의 소스 코드 의존성이 제어 흐름과 반대가 된다 -> 의존성 역전

OO 언어가 다형성을 안전하고 편리하게 제공한다는 사실은 소스코드 의존성을 어디에서든 역전이 가능하다는 의미

OO언어로 개발된 시스템을 다루는 소프트웨어 아키텍트는 시스템의 소스 코드 의존성 전부에 대한 뱡향을 결정할 수 있는 절대적인 권한이 생김

이것이 힘이다!

배포 가능한 단위로 컴파일 가능, 이 배포 단위들의 의존성 역시 소스 코드 사이의 의존성과 같다.

즉, 개별적이며 독립적으로 배포 가능하다. -> 배포 독립성

시스템의 모듈을 독립적으로 배포할 수 있게 되면, 독립적으로 개발 가능 -> 개발 독립성

결론

OO란 다형성을 이용하여 전체 시스템의 모든 소스 코드 의존성에 대한 절대적인 제어 권한을 획득할 수 있는 능력

참조

  1. 클린 아키텍처(Clean Architecture)
This post is licensed under CC BY 4.0 by the author.