객체지향 사고 다지기

Programming 2010. 8. 25. 16:48 Posted by 알 수 없는 사용자

객체 지향적인 프로그래밍을 하기 위해서는 객체의 특성을 자유롭게 활용 하도록 노력해야만 합니다. 객체 지향적인 사고를 다지기 전에 객체와 클래스에 대한 개념을 짚고 넘어가겠습니다.




위 그림은 붕어빵과 붕어빵을 만드는 틀 입니다. 객체를 설명할 때 가장 흔하게 쓰는 비유입니다. 붕어빵이라는 객체를 만들기 위해서는 붕어빵을 찍어 낼 틀(Template)이 필요합니다. 이것이 클래스라고 할 수 있죠.

비록 초보적인 수준에서 사용되는 비유이긴 하지만 나름대로 꼼꼼히 바라보면 많은 것을 얻을 수 있습니다. 혹 100개의 붕어빵을 만들기 위해서 100개의 붕어빵 틀이 필요한 것은 아니겠죠? 단 하나의 붕어빵 틀로도 수없이 많은 붕어빵을 만들어 낼 수 있습니다. 마찬가지로 하나의 클래스로 수많은 객체를 만들어 낼 수 있는 것입니다.

그러나 하나의 붕어빵 틀로는 한가지 모양의 붕어빵 밖에는 얻을 수 없습니다. 만일 다른 모양의 붕어빵을 얻고자 한다면 모양이 다른 붕어빵 틀이 필요할 것입니다. 붕어빵을 만드는 사람의 입장에서 붕어빵 틀을 또 만들거나 구입하는 것은 비용이 드는 일입니다. 그렇지만, 새로운 형태의 붕어빵을 만든다면 히트를 쳐서 더 많은 수입을 올릴 수 도 있는 일이죠. ^^

마찬가지로 객체를 만들어내기 위한 클래스를 어떻게 정의하느냐는 명확한 정답이 없는 문제입니다. 경험과 직관을 요하는 일이죠.

붕어빵과 붕어빵 틀의 관계를 잘 이해했다면 어느 정도는 객체와 클래스의 관계를 이해할 수 있을 것입니다. 다음과 같은 수식으로도 양자의 관계를 설명할 수 있습니다.

객체 : 클래스 = 인스턴스 : 템플릿

인스턴스(Instance)라는 말은 하나의 예가 될 수 있는 일, 상황이나 사람을 의미합니다. 템플릿(Template)은 지침이 되는 틀을 칭하는 것입니다. 따라서 템플릿(클래스)은 인스턴스(객체)의 공통점을 뽑아낸 것이죠. 같은 붕어빵 틀로 찍어낸 붕어빵들도 모양이나 맛이 조금씩 다른 것처럼 하나의 템플릿에 의해 만들어진 인스턴스라고 할지라도 고유한 면을 갖게 됩니다.

객체의 속성에는 다음과 같은 것들이 있습니다.

추상화 (Abstraction)
상속성 (Inheritance)
다형성 (Polymorphism)
캡슐화 (Encapsulation)
주체성 (Identity)
분류성 (Classification)

각 속성에 대한 세부 내용은 따로 적지 않겠습니다 .^^;

객체 지향 기술의 근본적인 개념은 주어진 문제를 이해하고, 모델링하는 시각에 있습니다. 객체 지향에서는 주어진 문제 영역을 그 안에 존재하는 객체의 집합으로 보며, 객체들은 서로 정보를 주고받아 상호 작용한다고 여깁니다.

절차 중심의 재래식 방법은 주어진 문제와 소프트웨어에 대한 시각이 전혀 다릅니다. 객체 지향 개념은 소프트웨어를 여러 개의 객체의 모임으로 생각하여 객체는 데이터와 관련 함수를 모아 놓은 것을 말합니다. 즉, 관련된 자료와 함수를 객체로 묶어 놓고 이들의 상호 작용에 의하여 작업이 수행됩니다.

그럼 객체 지향적 설계 방법은 어떤 순서로 진행 되어야 하는지 그 방법을 정리해 보겠습니다.

1. 구현 할 대상(객체)를 선별합니다.
    => 남자, 여자를 구분해 낸 것처럼 연관성 있는 객체들을 분별해 냅니다.

2. 중복 요인을 확인합니다.
    => 중복되는 부분을 뽑아내어 하나의 부모 클래스로 묶는 작업을 말합니다.

3. 상속 받은 후, 각자의 특징대로 클래스를 다시 정의합니다.
    => 고객 클래스를 상속 받은 후 남자, 여자, 중성과 같이 나누는 작업을 말합니다.

객체 지향에는 정답이 없습니다.


"이렇게 설계하는 것이 객체 지향적으로 설계하는 것이다."라는 것은 극히 주관적인 말이 되는 것입니다. 하지만 효율적인 객체 지향 프로그래밍을 하기 위해서는 객체의 특성을 자유롭게 활용 하도록 노력해야만 합니다.



AND