지금까지 객체지향의 다양한 요소들을 살펴보면서 객체지향이 좋은 프로그램을 만드는데 어떻게 기여하는지 살펴보았다. 한마디로 좋은 프로그래밍 중에 하나는 객체지향 기술이 온전히 녹아든 프로그래밍이다.

 

그러나 객체지향 기술은 고도의 사색이 필요한 철학적인 요소가 있어 객체지향 기술을 제대로 쓰기 위해서는 많은 공부를 통해 그 깊은 뜻을 머리로 몸으로 이해해야 한다. 고급 와인을 만들기 위해 몇십년, 몇백년을 묵히듯 객체지향 공부도 많은 노력이 필요하다.

 

다행히 객체지향을 창시하고 발전시킨 선각자들은 객체지향 기술을 이용하여 바람직하게 설계하는 몇개의 디자인 원칙과 더 나아가 디자인패턴과 리팩토링이라는 훌륭한 지름길을 닦아놓았다. 우리는 지름길을 따라가면 빠르게 좋은 기법을 익힐 수 있다.

 

변하는 것을 캡슐화한다. 여기서 쓰이는 캡슐화의 뜻은 객체가 해야할 기능중에 변경 가능성이 있는 기능을 다른 객체 패밀리안으로 분리하라는 뜻이다. 변경 가능성이 있는 기능을 캡슐화 하게 되면 변경할때도 확장할때도 관련된 로직 구현 클래스를 선택하거나 새로 추가 개발하면 된다. 이렇게 변하는 것을 캡슐화하면 어플리케이션의 클래스들을 불필요한 변경으로부터 보호 할 수 있다.

 

구현보다는 인터페이스에 의존하도록 코딩한다. 이말은 클라이언트 객체가 쓰려는 객체에 의존할때 구현된 자식 클래스보다는 인터페이스에 의존하라는 뜻이다. 이 규칙은 디자인패턴은 물론 객체지향 원칙에서 마치 군대가면 차렷, 열중쉬엇 같은 제식훈련 배우는것처럼 가장 기본적으로 지켜야할 규칙이다. 예를들어 꼬마 클라이언트 객체가 과자라는 인터페이스에 의존했다고 한다면, 엄마 실행 클래스는 꼬마 객체를 선언할때 과자 인터페이스를 상속받은 어떠한 과자라도 넘겨줘서 꼬마를 만족시켜 줄 수 있다. 이렇게 인터페이스에 의존하면 우리의 코드는 인터페이스의 서브 클래스는 물론 심지어는 아직 만들지 않은 과자 클래스와도 잘 동작할 수 있음을 보장받는다.

 

각 클래스는 변경 요소가 오직 하나이어야 한다. 이 말은 클래스는 오직 하나의 일만 하며, 어떤 클래스보다 그일을 잘해야 한다는 말과 같다. 코드가 중복없이 하나의 클래스에서만 작동되고 있음을 말한다. 이 규칙은 높은 응집성과 낮은 결합도와 연관된다. 느슨하게 결합되어 있다는 것을 말한다. 느슨하게 결합되어 있다는 것은 프로그램의 객체들이 특정한 일을 해야 하면 오직 그 일만을 한다는 것을 의미한다. 그래서 프로그램의 코드들이 잘 설계된 많은 객체들로 잘 분배되어 있다. 그 객체들은 하나의 일만 한다. 느슨하게 결합된 프로그램은 각 객체가 매우 독집적이어서 한 객체의 기능을 수정할 때 다른 객체는 수정할 필요가 없다. 그래서 새로운 특성이나 기능을 추가하는 것이 훨씬 쉽다. 소프트웨어 디자인을 진행하면서 항상 높은 응집도와 낮은 결합도를 지키기 위해 노력한다.

 

두개 이상의 클래스에서 공통된 행동을 발견할때마다 그 행동을 하나의 클래스로 추상화하여 재사용한다. 이 말은 객체지향의 가장 기초적인 원칙인 상속과 폴리모피즘을 활용하라는 말과 같다. 각 클래스는 변경 요인이 오직 하나이어야 한다. 는 규칙도 지킬 수 있다. 상속으로 추상화할수도 있고 별도의 캡슐화를 통해 구성 구조로 재사용할수도 있다. 이렇게 객체지향의 여러요소는 높은 응집성과 낮은 결합도를 최대한 지원한다.

 

디자인이 유연하지 않으면 변경한다. 프로그램이 제공하는 기능은 그대로인 상태에서 내부 코드를 객체지향적으로 바람직하게 고치는 작업을 리팩토링이라고 한다. 리팩토링하고 관련이 있다. 예를들어 상속을 남발하면 또 다른 코드 중복에 시달릴 수 있다. 이럴때는 귀찮아 하지 말고 최대한 유연하고 확장하기 쉽게, 다시말해 객체지향적으로 변경하는 작업을 진행해야 한다. 그래야 고객과 프로그래머를 골고루 만족시키는 훌륭한 프로그램으로 발전시킬 수 있다.

 

 

 

덧 ) 이 객체지향의 탄생 원고는 제가 책으로 내려다가 일단 잘 안되었는데요. 이유는 비문이 많다. 단락내 주제가 중복된다. 어떤 상황 설명을 과장한다.등 입니다. 그래도 원고를 일단 블로그에 몽땅 풀어보고 언젠가 제대로 교정해서 다시 도전할 생각입니다. 비문이 많다. 단락내 주제가 중복된다. 어떤 상황 설명을 과장한다. 이점을 감안해서 읽고 객체지향을 이해하는데 도움이 되셨으면 좋겠습니다. 의견도 주셨으면 좋겠습니다. 원고 조금만 교정하면 괜찮을것 같은 출판사 관계자분의 피드백도 환영합니다. 특별한 일 없으면 매주 월수 발행 예정입니다.

신고
Posted by 산골
산골 블로그 소개 저는 하얀머리 개발자와 작가를 꿈꾸는 블로거 산골 입니다. 프로그램 개발자로서 저의 관심사는 개발자의 숨통을 트여준 아이폰 개발, 철학과 같은 깊이가 있는 객체지향 방법론입니다. 글쓰기와 수영을 좋아합니다. 블로그를 통해 관심사를 공유합니다. 제 블로그에 관심 있으시면 아래 RSS나 즐겨찾기로 편하게 구독하세요.

rss Bookmark and Share

댓글을 달아 주세요