IT

객체지향 프로그래밍 (Object-Oriented Programming (OOP))의 이해 본문

개발

객체지향 프로그래밍 (Object-Oriented Programming (OOP))의 이해

abcee 2019. 2. 25. 09:13


2014.02.16 지식in 작성글 이전


배경

개발 기간이 수년씩 걸리는 시대의 소프트웨어 개발 방법론들에 의해 개발된 소프트웨어들은 대부분 유지보수에 어려움을 겪고 있었어요. 설계상 모든 코드들이 톱니바퀴처럼 맞물려 있기 때문에 코드의 일부분을 고치려면 설계의 전체적인 부분을 바꾸어야 하는 경우가 생기기 때문이죠.

이러한 문제점은 복잡한 대형 시스템에서 더욱 크게 나타났으며 이는 때때로 시스템의 신뢰성을 낮추는 결과를 나타냈어요.

따라서 개발자들은 시스템의 신뢰성과 변화에 대한 유연성을 높이고 부수적으로 개발 속도도 빠르게 하기 위해 프로그램의 재사용성을 높여야겠다는 생각을 했고 그래서 나온 개발 방법론 중 하나가 객체 지향 프로그래밍(OOP : Object-Oriented Programming) 이에요.

 

개념

기존의 프로그래밍 방법론에서는 데이터와 그 연산들을 따로 분리해서 다루었어요. 굳이 연관 지어서 생각하지 않았다는 것이 옳은 표현일 듯싶어요. 예를 들어 컵이 떨어지는 모습을 GUI로 구현한 프로그램을 설계하고자 할 때 기존에는 컵 그림 데이터, 그림의 위치 데이터, 그림의 움직임 연산을 따로 설계해서 사용했어요.

하지만 OOP 에서는 데이터와 연산을 같이 묶어서 객체라는 것으로 다루기 시작했지요. 컵의 낙하 GUI 프로그램인 위의 예를 다시 든다면 OOP 에서는 '' 이라는 객체를 만들고 그 안에 컵의 속성인 그림과 위치가 들어간 데이터 공간과 컵의 위치 데이터를 변경시키는 연산, 컵의 움직임에 대한 알고리즘을 구현한 연산들을 설계하는 거에요. 그리고 컵 객체 한 개를 만들어서 그 객체의 움직임 알고리즘을 실행하면 컵의 위치가 변화하는 것을 볼 수 있는 거지요.

별반 차이가 없어 보이지만 기존에는 여러 부분으로 나누어서 해결했던 것을 OOP에서는 하나의 통일된 개념(위의 예시 프로그램에서는이라는 하나의 개념)으로 묶어서 해결한다는 거에요. 따라서 객체를 구성하는 데이터는 객체의 속성을 나타내고 연산들은 객체의 활동에 대한 것을 나타낸다고 할 수 있어요.


 

목적

OOP는 기존의 프로그래밍 방법론과는 달리 실제 세계를 설계에 반영하기 좋다는 장점이 있어요. 실제 세계에 존재하는 물질들을 그대로 객체라는 것으로 표현하면 되기 때문에 어떠한 개념을 추상화하기 더 편해진 거죠.

예를 들어 자동차가 달리는 GUI 프로그램을 만든다고 해봐요. 기존의 프로그래밍 방법론에서는 자동차의 그림이 달리는 것에 초점을 맞추어서 설계를 해요. 그저 시간에 따른 자동차 그림의 움직임에 대해 설계를 하는 거지요. 하지만 OOP에서는 달리는 것이 아니라 자동차에 초점을 맞추어요. 실제 자동차를 객체라는 것으로 그대로 설계한다면 자동차라는 객체가 움직이는 것은 당연한 것이고 부수적인 문제가 되는 거에요.

좀 더 자세히 설명해드릴게요.

실제 존재하는 자동차에 엔진, 타이어, 차틀, 차창, 기어가 있다면 프로그래밍 설계를 할 때도 자동차라는 큰 객체에 엔진, 타이어, 차틀, 차창, 기어 가 존재하는 것으로 설계를 해요. 그리고 실제 엔진이 하는 역할이 동력을 일으키는 것이라면 설계에서도 엔진의 역할을 동력을 일으키는 것이라 설계를 하는 거에요. 마지막으로 실제 자동차가 달리기 위해서는 엔진이 동력을 일으켜야 한다면 설계에서도 엔진이 동력을 일으키면 자동차가 달릴 수 있게 설계를 하는 거죠. 이렇게 가장 큰 객체인 자동차를 설계하고 그 부속품들인 엔진, 타이어, 차틀, 차창, 기어를 각각의 특성에 맞게 설계를 하여 실제 자동차를 추상화한다면 실제로 자동차 객체를 구현했을 때 자동차가 달리는 것은 당연한 것이 되어버리는 거에요.

지금은 실제 존재하는 그리고 시각적, 촉각적으로 느낄 수 있는 개념에 대해서 예시를 들었지만 그 외에 실존하거나 인간이 상상하는 그 어떤 것에 대해서도 그것의 속성을 알고 있다면 객체화 할 수 있어요. 따라서 ‘OOP 에 의거한 설계의 궁극적인 목적이 무엇이냐라고 한다면어떤 개념에 대해 좀 더 정확히 구분 지어 추상화를 하는데 있다라고 할 수 있어요. OOP 가 나온 배경인 재사용성의 증가 또한 객체화를 통한 추상화의 부산물이에요.




Comments