-
SOLID 원칙이 벽과 방에 벽돌을 배치하는 방법을 알려준다면, 컴포넌트 원칙은 빌딩에 방을 배치하는 방법을 설명해준다.
대규모 소프트웨어 시스템은 작은 컴포넌트들로 만들어진다.
-
컴포넌트는 배포 단위다.
컴포넌트는 시스템의 구성 요소로 배포할 수 있는 가장 작은 단위다.
자바의 경우 jar 파일이 컴포넌트다. 루비에서는 gem, 닷넷에서는 DLL 이다.
컴파일형 언어에서 컴포넌트는 바이너리 파일의 결합체다.
인터프리터형 언어의 경우는 소스 파일의 결합체다.
-
컴포넌트가 마지막에 어떤 형태로 배포되든 잘 설계된 컴포넌트라면 반드시 독립적으로 배포 가능한, 따라서 독립적으로 개발 가능한 능력을 갖춰야 한다.
컴포넌트의 간략한 역사
재배치성
-
과거에는 고정된 메모리 위치에만 라이브러리를 로드할 수 있었다.
그래서 앱이 커지면서 라이브러리 메모리 위치를 침범하는 문제가 생겼다.
이에 대한 해결책은 재배치가 가능한 바이너리(relocatable binary)였다.
링커
-
기술이 발전하며 소스 모듈은 .c 파일에서 .o 파일로 컴파일된 후 링커로 전달되어 빠르게 로드될 수 있는 형태의 실행 파일로 만들어졌다.
각 모듈을 컴파일하는 과정은 상대적으로 빨랐지만, 전체 모듈을 컴파일하는 일은 꽤 시간이 걸렸다.
이후에 링커에서는 더 많은 시간이 소요되었다.
그러나 하드웨어의 발전으로 링크 시간은 문제가 되지 않게 되었다.
그래서 액티브 X 와 공유 라이브러리 시대가 열렸고, .jar 파일도 등장하기 시작했다.
이렇게 컴포넌트 플러그인 아키텍처(component plugin architecture)가 탄생했다.
결론
-
런타임에 플러그인 형태로 결합할 수 있는 동적 링크 파일이 소프트웨어 컴포넌트에 해당한다.
과거에는 초인적인 노력을 들여야만 컴포넌트 플로그인 아키텍처를 적용할 수 있었지만, 이제는 기본으로 쉽게 사용할 수 있는 지점까지 왔다.
댓글