본문 바로가기

카테고리 없음

부품화,은닉화,캡슐화,인터페이스

반응형

1. 부품화


1) 부품화란?


연관되어있는것을 묶고 연관안된것을 분리하는 방향성이 부품화라고 할 수 있다.


객체를 만든다는것은 그 로직을 재활용가능하도록 부품화 하는것이라고 볼 수 있다.


객체 지향은 부품화의 정점이라고 할 수 있다.


체 지향과 부품화를 동일시 할 수는 없지만 부품화라고 하는

 

소프트웨어의 큰 흐름은 객체 지향이 만들어지는데 지대한 공헌을 했다고 할 수 있다.


2) 부품화의 예시 


하드웨어에서 이루어지는 부품화의 예를 보자. 


본체와 모니터와 키보드가 하나로 단일화되어 있다고하자. 이것의 문제점은 분명하다. 모니터


가 고장 나면 컴퓨터를 바꿔야 한다. 키보드가 고장 나도 컴퓨터를 교체해야 한다.


그래서 모니터와 본체와 키보드를 분리했다. 다시 말해서 부품화 시킨 것이다.


기능들을 부품화 시킨 덕분에 고장이나면, 모니터만 바꿔보던가 키보드만 바꿔보던가 할 수 


있다. 즉 문제가 생겼을 때 그 문제가 어디에서 발생한 것인지 파악하고 해결하기가 훨씬 


쉬워진다. 또한 소비자들은 더 좋은 키보드나 저렴한 모니터를 선택할 수 있게 되었다.


3) 부품화의 기준은 추상화


그러면 모니터와 키보드 그리고 본체를 분리하는 기준은 무엇일까? 그 기준을 세우는 것이 추


상화일 것이다. 컴퓨터를 입력과 출력 그리고 연산 & 저장이라는 기능으로 기준을 세우고 기


능별로 분류를하고 있다.


4) 부품에서 완제품으로


그리고 이렇게 추상화한 결과에 따라서 구체적인 제품을 만들어서 


구체화 시킨 결과가 모니터, 키보드, 본체와 마우스라는 부품들이다. 이 부품들은 어떻게 보면 


개별적인 완제품이다. 그리고 다시 이 완제품들을 부품으로 조합하면 컴퓨터라는 또다른 하나


의 완제품이 만들어진다. 


5) 언제까지 부품으로 나눌건지의 문제


그런데 하나의 완제품을 어떻게 부품화 시키는가는 어려운 문제다


현재의 스마트폰을 보면 부품화가 아닌 모든것이 단일화 되어 있다. 


품화가 중요한 것임에는 분명하지만 그보다 중요한 것은 환경에 맞는 적합함이다.


그래서 설계가 어려운 것이다.


6) 부품화의 또 다른 예시


메소드는 부품화의 예라고 할 수 있다


메소드를 사용하는 기본 취지는 연관되어 있는 로직들을 결합해서 메소드라는 완제품을 만드


는 것이다. 그리고 또다시 이 메소드들을 부품으로 해서 하나의 완제품인 독립된 프로그램


을 만드는 것이다. 


메소드를 사용하면 코드의 양을 극적으로 줄일 수 있고,


메소드 별로 기능이 분류되어 있기 때문에 필요한 코드를 찾기도 쉽고 문제의 진단도 빨라진


다. 그런데 프로그램이 커지면 엄청나게 많은 메소드들이 생겨나게 된다. 


메소드와 변수를 관리하는 것은 점점 어려운 일이 되기 시작한다. 


그래서 새로운 도약 중의 하나가 객체 지향 프로그래밍이다. 


이것의 핵심은 연관된 메소드와 그 메소드가 사용하는 변수들을 분류하고 그룹핑하는 것이


다. 바로 그렇게 그룹핑 한 대상이 객체(Object)다. 


이를 통해서 더 큰 단위의 부품을 만들 수 있게 되었다.


유지보수측면에서 부품화를 시키면 이부분이 고장났것을 쉽게 알고 그 부분만 수정하면 된


다. 즉, 문제가 생겼을 때 그 문제가 어디에서 발생한 것인지 파악하고 해결하기가 훨씬 쉬워진다.


2. 은닉화,캡슐화


그런데 부품화라고하는것이 단순히 가능하다고해서 모든곳에서 자신이 만든코드를 재활용할수있


는것은아니다. 재활용성을 높이고 부품으로서 가치를 높이려면 은닉화와 캡슐화를 알아야한다.


부품화라고 하는 목표는 단순히 동일한 기능을 하는 메소드와 변수를 그룹핑한다고 달성되는 것


은 아니다. 제대로된 부품이라면 그것이 어떻게 만들어졌는지 모르는 사람도 그 부품을 사용하는 


방법만 알면 쓸 수 있어야 한다. 이를테면 모니터가 어떻게 동작하는지 몰라도 컴퓨터와 모니터를 


연결하는 방법만 알면 화면을 표시 할 수 있는 것과 같은 이치다. 즉 내부의 동작 방법을 단단한 케


이스 객체 안으로 숨기고 사용자에게는 그 부품의 사용방법만을 노출하고 있는 것이다. 이러한 컨


셉을 정보의 은닉화(Information Hiding), 또는 캡슐화(Encapsulation)라고 부른다. 자연스럽게 사용


자에게는 그 부품을 사용하는 방법이 중요한 것이 된다.


그 부품의 사용방법은 객체안에 어떤 메소드가 들어있고 어떤 입출력값을 갖고 어떻게 동작한다라


는 객체가 가지고있는 메소드의 사용법만을 알고있으면, 사용자는 그객체를 이용해서 어떤 객체들


을 조합해서 더 큰 프로그램 완제품을 만들수있다는 것이다. 이 컨셉을 정보의 은닉화라 한다.


객체가 어떻게 생겼는지를 제대로 모르고도 사용할 수 있도록 하겠다라는것이다.


3. 인터페이스


좋은 부품이라면 부품과 부품을 서로 교환 할 수 있어야 한다. 


예를들어보자. 집에 있는 컴퓨터에 A사의 모니터를 연결하다가 B사의 모니터를 연결 할 수 있다. 


또 집에 있던 모니터에 A사의 컴퓨터를 연결해서 사용하다가 새로운 컴퓨터를 구입하면서 B사의 


컴퓨터를 연결 할 수 있다. 이처럼 모니터와 컴퓨터는 서로가 교환관계에 있는 것이다. 이것은 모니


터와 컴퓨터를 연결하는 케이블의 규격이 표준화 되어 있기 때문에 가능한 일이다. 


모니터와 컴퓨터를 연결하는 케이블인 HDMI가 있다.


컴퓨터와 모니터를 만드는 업체들은 위와 같은 케이블의 규격을 공유한다. 모니터 입장에서는 컴


퓨터가, 컴퓨터 입장에서는 모니터가 어떤 식으로 만들어졌는지는 신경쓰지 않는다. 각각의 부품


은 미리 정해진 약속에 따라서 신호를 입, 출력하고, 연결점의 모양을 표준에 맞게 만들면 된다. 이


러한 연결점을,접점을 인터페이스(interface)라고 한다. HDMI 케이블의 연결점은 특유의 생김새


가 있다. 만약 HDMI 케이블을 랜선을 연결하는 구멍에 연결하려고 한다면 어떻게 될까? 동작하지 


않을 뿐 아니라 연결 자체가 되지 않는다. 인터페이스란 이질적인 것들이 결합하는 것을 막아주는 


역할도 하는 것이다. 즉 인터페이스는 부품들 간의 약속이다.


인터페이스가 존재하기때문에 각각의 부품은 부품으로서의 가치가 높아지는것이다.


반응형