[프로그래밍] 객체지향 프로그래밍이란? 1편 기본 개념
객체지향 프로그래밍!
요즘 시대에 프로그래밍이 엄청나게 빠른속도로 발전하게 된 계기는 객체지향 프로그래밍의 발견이 큰 기여를 했습니다. C를 제외한 거의 모든 '인기' 언어들은 대부분 객체지향 프로그래밍을 지원하고있고 권장하고 있는데요.. 물론 객체지향프로그래밍을 모르더라도 프로그래밍을 할 수 는 있지만 비효율적이고 힘들어지기만 합니다. 지난 포스트에서는 이번에 파이썬의 클래스에대해 다룬다고 했는데요, 그 에 앞서서 클래스의 의미를 알아볼 수 있는 객체지향 프로그래밍 (Object Oriented Programming) 에대해 알아보도록 하겠습니다.
1. 절차지향 프로그래밍
객체지향 프로그래밍(OOP) 가 알려지기 전까지는 모든 프로그래밍은 절차지향형 프로그래밍이였습니다. 기본적으로 코드를 첫줄에서부터 차례대로 실행키는 형식이였습니다. 대표적인 언어로는 C가 있습니다.
기본적으로 코드를 컴파일하고 실행시킬때 첫번째 줄에서부터 차례대로 실행하기 때문에 설계도 직관적이고 개발 기간도 짧습니다. (간단한 프로잭트라는 가정..)
흔히 폭포식, Top-Down 프로그래밍이라고 부르는데 그 이유는 윗쪽라인의 코드가 바뀌면 모든것이 밑에있는 코드들에 영향을 주기 때문입니다. 그렇기 때문에 많은 수정이 불가능하고 만약 많은 수정이 필요하게될시 밑에 있는 코드들도 대부분 수정이 필요해지기에 설계변경같은 일을 하기에는 부적합한 언어입니다.
2. 그럼 객체지향 프로그래밍은?
OOP 는 절차지향과는 아얘 다른 개념입니다. 절차지향 프로그래밍은 기본적으로 위에서 부터 차례차례 실행시키지만, OOP는 클래스라는 객체를 선언하여 자료들의 추상화와 켑슐화를 통하여 자료들간의 관계성을 강화시키고 간단하게 만들어주는 것 이라고 보시면 됩니다. 솔찍히 말하면 OOP는 정확하게 정의하기가 너무나도 어렵기때문에 간단한 예시를 통해서 알아보는게 일반적입니다.
절차지향형 프로그래밍에서 '씨샥' 이라는 사람을 정의한다고 했을때 '씨샥'을 구성하는 부분을 따로 선언해주어야 합니다. 씨샥의 팔, 씨샥의 머리, 씨샥의 다리 등 하나하나 따로 선언을 해주고 각각에 맞게 디자인을 해주어야합니다. 그 후 '펭귄' 이라는 사람이 또 필요하게 되었을때는 펭귄의 팔, 펭귄의 머리, 펭귄의 다리를 다시한번 선언하고 코딩을 해주어야만 두명의 사람과 그 두사람의 관계및 행동들에대해 디자인이 가능해집니다. 하지만 OOP 에서는 '사람' 을 디자인하게 됩니다.
사람은 팔, 머리, 다리를 가지고 있어!
라고 선언을 해주면 그 다음은 '씨샥'과 '펭귄'은 사람이라는것만 선언을 해주면 프로그램은 씨샥과 펭귄은 자동으로 팔, 머리, 다리 를 소유하고 있다는것을 알게됩니다. (Abstraction) 뒤에서 추상화를 다루면서 더 자세히 다뤄보겠습니다.
마지막으로 OOP 의 소프트웨어적 정의를 들여다보면 : '자료구조와 그에대한 연산들이 한 객체에 묶여서 정의하고 관계성을 적절히 조직함으로서 소프트웨어의 구조를 구성하는것' 이라고 할 수 있습니다.
3. 객체지향 프로그래밍의 중요한 요소들
기본적으로 객체지향 프로그래밍에서는 아주 많은것들이 필요하게됩니다. 그 중에서도 가장 중요한 개념들을 뽑아보면 데이터의 추상화, 켑슐화, 은닉화, 상속, 그리고 다형성이 있습니다.
다음 포스트에서는 데이터의 추상화(Abstraction) 데이터의 켑슐화 (Capsule) 그리고 데이터의 은닉화 (Hiding) 에 대해 더 자세히 다뤄보도록 하겠습니다.