Skip to content

객체지향 프로그래밍

설계를 잘 했다는 것은?

설계를 잘했다는 것은 어떤 의미일까? <<오브젝트>>에서는 설계를 한다는 것을 코드를 배치하는 것이라고 말한다. 즉 좋은 설계란 요구사항이 변경되어도 수정하기 쉽게 코드를 배치해 놓은 것임을 확인할 수 있다.

같은 방 안에 같은 물건이 있더라도, 깔끔하게 정리된 방과 규칙을 알 수 없게 정돈되지 않은 방 중에서 선호하는 방을 고르라고 한다면 보통 깔끔하게 정리된 방을 선택할 것이다. 정리된 방은 심리적 안정감을 주고 지저분하게 만들기 쉽기(?) 때문이다.

이와 같이 설계를 잘 했다는 것은 깔끔하게 코드가 정리가 되었다는 말이고, 그 코드의 의미도 한 눈에 알아볼 수 있게 작성되어있으며 쉽게 변경 가능하도록 배치가 된 말과 동일하다고 생각한다.

좋은 설계란 무엇인가? 우리가 짜는 프로그램은 두 가지 요구사항을 만족시켜야 한다.

우리는 오늘 완성해야 하는 기능을 구현하는 코드를 짜야 하는 동시에 내일 쉽게 변경할 수 있는 코드를 짜야 한다.

좋은 설계란 오늘 요구하는 기능을 온저히 수행하면서 내일의 변경을 매끄럽게 수용할 수 있는 설계다. -오브젝트 35p-

객체 관점에서 설계해보기

우리는 보통 문제를 해결하기 위해서 흐름을 머릿속에 인지하곤 한다. 적어도 필자는 그렇다. 예로 들어, 커피를 마셔야 한다는 문제가 있을때는 아래와 같은 순서대로 생각하곤 한다.

1. 컵에 물을 따른다.
2. 커피 스틱을 깐다.
3. 커피 가루를 컵에 붓는다.
4. 숫가락으로 잘 젓는다.
5. 커피 가루가 잘 섞인 커피를 마신다.

이렇게 생각하는 방식을 절차지향 방식으로 생각한다고 이야기한다. <<오브젝트>>에서는 프로그램을 잘 설계하기 위해선 객체지향 방식으로 생각하는 것을 요구한다. 즉, 일련의 절차를 먼저 생각하는 것 보다. 문제를 해결하기 위해 필요한 객체부터 생각해야 한다는 의미로 받아들여진다.

아래는 객체지향 방식으로 생각해본 결과이다.

1. 컵
    - 컵은 내용물들을 담을 수 있다.
    - 컵의 내용물을 섞기 위해선 숫가락과 내용물이 필요하다.
    - 컵에 있는 내용물을 섞으면 다른 내용물이 나온다.

2. 물
    - 물은 내용물이다.

3. 커피 스틱
    - 커피 스틱 안에는 커피가루가 적어도 1개 들어있다.
    - 커피 스틱 안에는 추가 내용물이 들어 있을 수 있다.
    - 커피 스틱을 까면 커피가루 및 내용물을 얻을 수 있다.

4. 커피 가루
    - 커피 가루는 내용물이다.
    - 물과 섞이면 커피가 된다.

5. 숟가락
    - 내용물을 섞을 수 있다.
    - 한 번 사용하면 그 이후로 사용할 수 없다.
    - 세척을 통해 다시 사용할 수 있다.

필자가 느낀 차이점으로는 절차지향은 문제 해결에만 신경 썼다는 점이고 객체지향은 문제를 해결하기 위한 객체 입장에서 생각을 했다는 것이다. 하나의 소설 책을 예로 들자면, 절차지향은 소설에서 말하고자 하는 주제만 고려하였고, 객체지향은 소설 속 인물들, 사건들 입장에서 다차원 적으로 생각한 것이고 인물들과 사건들이 얽혀 주제에 대한 메시지를 주도록 하는 것이다.

객체지향 패러다임은 여러분이 세상을 바라보는 방식대로 코드를 작성할 수 있게 돕는다. 세상에 존재하는 모든 자율적인 존재처럼 객체 역시 자신의 데이터를 스스로 책임지는 자율적인 존재다. 객체지항은 여러분이 세상에 대해 예상하는 방식대로 객체가 행동하리라는 것을 보장함으로써 좀 더 쉽게 이해할 수 있게 한다. -오브젝트 36p-


Comments