본문 바로가기

길게 쓰기/객체지향의 탄생 (공식)

객체지향 생각의 도구2-한두깨 객체지향 프로그래밍 미리보기

한번 읽고 두번 깨닫는 객체지향 프로그래밍 미리보기



책이 2019년 1월말에 출간 예정인데 블로그 독자들에게 미리보기를 제공합니다.


보시고 댓글과 질문 많이 남겨주시면 감사합니다. +.+



3) 객체지향 언어의 사상과 장점

이렇게 절차지향 언어의 단점을 개선하고 더 나은 장점을 추구하는 객체지향 언어가 탄생했다. 1장에서 우리는 객체지향이 낮은 관계의 의존성과 높은 기능의 집중도를 통해 유연한 소프트웨어를 지향한다고 했다. 이것이 객체지향의 사상이고 장점이다. 여기서 좀더 객체지향이 어떻게 이런 사상과 장점을 지원하는지 배경을 좀 더 살펴보자.

객체지향은 프로그램을 처리-판단-반복(변수선언, if, for)-함수호출의 명령어들의 연결이라고 보는 과거 시각에서 벗어나 여러 개의 독립된 단위, 객체(사물)들의 모임으로 접근 했다. 이렇게 객체지향의 큰 장점은 여러 개의 독립된 사물(객체)로 접근하는 것이다. 객체지향은 사물(객체)를 통해서, 인간이 현실세계에서 사물을 대하듯, 인간의 생각을 자연스럽게 프로그래밍으로 서술 할 수 있다.

 

※ 객체지향은 사람이 사물(=물체)에 대해 인식하는 사고를 거의 그대로 활용하여 프로그래밍할 수 있다. 객체지향은 인간이 이해하기 좋은 언어이다.

 

객체란 데이터(속성)와 기능(행동)을 모두 포함한, 객체지향에서 독립적으로 실행할 수 있는 최소한의 단위이다. 예를 들어 비행기를 객체로 만든다면, 비행기의 고유 특성인 비행기 크기, 엔진 배기량, 속도, 각종 옵션 장착 여부를 데이터로 작성(코딩)할 수 있다. 비행기에서 이루어지는 행동인 시동 걸기, 가속, 브레이크, 이륙하기 등은 기능으로 작성(코딩)할 수 있다.

객체는 단순히 함수처럼 기능만 담고 있는 것이 아니다. 객체의 데이터(속성)도 함께 담는다. 그리고 이 데이터를 소유한 객체 스스로 책임지고 관리하게 유도한다. 여기서 유도한다는 것은 객체지향 언어 문법이나 코딩 스타일을 통해 객체가 소유한 데이터를 객체 스스로 관리하도록 지원 한다는 것이다. 이것이 절차지향 언어와의 큰 차이이다. 절차지향 언어는 데이터를 대부분 공동으로 관리한다. 여러 함수가 데이터를 함께 쓴다.

객체지향과 절차지향 언어는 데이터를 관리하는 방식이 다르다. 이 두 가지 경우는 개발 생산성 관점에서 큰 차이를 보인다. 절차지향은 데이터를 여러 함수가 같이 쓰기 때문에, 절차지향은 데이터를 여러 함수가 같이 의존하게 된다. 이렇게 의존성이 높으면 문제가 생긴다. 예를 들어 A함수의 데이터 조작으로 데이터를 같이 공유해서 쓰고 있는 B함수의 작동이 잘못될 수 있는 치명적인 버그가 생길 수 있다.

객체지향은 데이터 관리 주체데이터를 소유한 객체로만 명확하게 지정되도록 유도한다. 그래서 객체간의 데이터를 의존하는 경우가 낮아진다. 좀 더 직관적인 이해를 위해 비유를 하면, 농작물을 키우는 농장에서 절차지향 방식을 쓸 경우, 작물을 한 곳에 모아놓고 여러 함수(행동)가 동시에 각종 작물들을 다루게 된다.


 


[그림 2-1] [절차지향처럼 작물(=속성)을 한곳에서 방만하게 관리한다면]

 

이렇게 되면 모아 놓은 작물 중 어떤 작물은 농약을 뿌리면 안되는데, 함수1이 농약을 모든 작물에 다 뿌릴 수도 있다. 함수2는 물을 주는 함수 인데 물을 많이 흡수하면 안되는 작물까지 물을 잔뜩 줄 수도 있다.



[그림 2-2] [객체지향처럼 작물(=속성)을 구분하여 체계적으로 관리한다면]

 

[그림 2-2]와 같이 관리할 때, 작물1의 특성이 농약을 뿌리면 안 되고 물을 많이 줘야 한다면, 작물 메소드1이 책임지고 농약을 안 뿌리고 물을 많이 줄 수 있다. 작물 2는 농약을 정기적으로 뿌려야 한다면 작물 메소드2가 작물2의 특성에 맞게 관리할 수 있다.

이렇게 객체지향은, 사람이 사물을 바라보는 익숙한 관점을 프로그래밍으로 구현할 수 있게 한다. 객체지향 프로그래밍에서의 사물은 객체라는 단위로 부른다. 객체는 데이터(속성)와 기능(행동) 2가지가 있어야 한다. 객체지향은 이 속성과 기능을 소유한 객체 스스로 책임지게 유도한다. 그래서 절차지향 보다는 관계의 의존성을 낮추고, 기능의 집중도는 올릴 수 있다. 이것이 객체지향의 장점의 출발점이다.

 

객체지향의 장점 → 사람이 사물을 바라보는 익숙한 관점을 프로그래밍으로 구현 → 객체지향에서의 사물은 객체 → 객체는 속성과 기능 2가지가 있다. → 이 속성과 기능을 소유한 객체 스스로 책임지게 유도함 → 관계의 의존성을 낮추고, 기능의 집중도는 올리는 출발점.

 

이 객체지향의 특징을 시작으로, 객체지향에서의 관계의 의존성을 낮추고, 기능의 집중도는 올리는 객체지향 기술은 더 많이 있고, 이 책에서 계속 설명한다. 여기까지 알게 된 객체지향의 특징을 객체지향의 정의 상자에 추가하여 함께 직관적으로 익혀보자.

 

객체지향의 정의 = 객체지향의 목표 = 객체지향적인 개발 = 객체지향의 장점

              = 좋은 코드 품질 = 사람이 사물을 보는 익숙한 관점을 프로그래밍으로 구현

= 객체지향의 사물(객체)은 독립성과 주도성을 추구(유도)

= 낮은 관계의 의존성과 높은 기능의 집중도

= 유연한 소프트웨어

= 객체지향은, 낮은 관계의 의존성과 높은 기능의 집중도를 지향하여,

소프트웨어의 유연함을 극대화하는 개발 기법이다.


 Yes24: http://bitly.kr/DAg9t
 알라딘: http://bitly.kr/aSMu2
 교보문고: http://bitly.kr/utfU7
 인터파크: http://bitly.kr/ffJjy