수학과의 좌충우돌 프로그래밍

객체 지향 프로그래밍 이란? 본문

프로그래밍 언어

객체 지향 프로그래밍 이란?

ssung.k 2018. 9. 11. 23:38



안녕하세요 강민성 입니다.


요즘 Java 언어를 공부하고 있는데 공부를 하다보니 문뜩 그런 생각이 들더라고요.


파이썬도 그렇고 Java 도 그렇고 객체 지향 프로그래밍 이라고는 하는데 과연 이게 무엇일까? 


그래서 오늘은 객체 지향 프로그래밍에 대해서 알아보도록 하겠습니다.




객체 지향 프로그래밍 vs 절차지향 프로그래밍 



객체 지향 프로그래밍(Object-Oriented Programming) 은 줄여서 OOP 라고 하며


프로그램을 어떻게 설계하는 지에 대한 방법입니다.


다른 방법으로 절차 지향 프로그래밍이 있습니다.


그러면 이 둘을 비교해볼까요?


빠른 이해를 위해서 예시를 하나 들어보겠습니다.


물건을 판매하는 가게는 크게 두 가지 형태로 나누어집니다.





 ex) 편의점, 옷 가게, 빵집


ex) 햄버거 가게, 약국, 은행 


손님이 제품을 찾아서 계산대에 값을 지불


손님이 직원에게 제품을 말하면 직원이 제품을 가져와서 전달 


손님이 직접 제품에 접근 가능


손님이 직접 제품에 접근 불가능 


여러 명의 손님이 동시에 제품을 찾을 수 있으므로

상대적으로 구매가 빠르다.


손님 한 명 씩 순차적으로 물건을 구매하게 되므로

대기자가 생겨 상대적으로 느리다.


제품의 배치나 구조가 바뀌면 손님에게 영향을 미친다.


가게에서 제품의 배치나 구조가 바뀌더라도 손님에게 미치는 영영향이 많이 없다.  


물품을 구매할 때 손님과 직원의 역할과 책임이 불분명 


물품을 구매할 때 손님과 직원의 역할과  책임이 분명


좌측의 편의점과 같은 가게의 형식은 절차지향프로그래밍 ,     우측의 햄버거 가게와 같은 가게의 형식은 객체지향프로그래밍입니다.


손님은 프로그램의 함수와


물품은 데이터, 변수, 메모리에 대응 시켜 생각을 하면 되겠습니다.



두 방법은 다음과 같이 여러가지 차이가 있지만 명확히 반대되는 개념은 아니며


언어를 다음과 같은 기준으로 이분법 할 수도 없습니다.


C 와 C++ 을 생각해봤을 때 C++ 을 쓴다고 해서 객체 지향 프로그래밍을 한 것이 아니고 


코드를 짜는 방식을 객체지향으로 바꾸어야 합니다.


그리고 편의점과 햄버거 가게 중 어느 가게의 판매 방식이 맞다고 할 수 없는 것 처럼


두 프로그래밍 방식도 역시 상황에 맞게 쓰이는 게 중요하지 어느 방법이 더 좋다고 말할 순 없습니다.




객체란..



객체란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있고


다른 것과 식별 가능한 것을 말합니다.


우리 주위에서도 많이 찾아볼 수 있는데요, 개, 고양이, 책상, 의자, 자전거 등과 같은 것들이 있습니다.


개는 엄연히 자신만의 고유한 속성으로 다른 것들과 구분이 될 수가 있죠.


이러한 객체들은 속성과 동작으로 구성이 되어있습니다. 


예를 들어 개 같은 경우에는 이름, 품종, 털색, 몸무게 등의 속성과


달리다, 걷다, 짖다, 잠을 자다 등의 동작을 가지고 있습니다.




객체지향프로그래밍이란...



그렇다면 객체지향이라는 말은 위에서 알아본 '객체' 를 사용해서 프로그래밍을 하겠다는 뜻입니다.


좀 더 풀어서 이야기 해보면 프로그램에서 필요한 부분들을 일반화 시켜서 객체로 만들고


 이 객체들 간의 상호작용을 통해서 프로그래밍을 하겠다는 의미입니다.


우리가 '동영상 플레이어'를 만든다고 생각해봅시다.


그러면 앞으로 감기, 뒤로 감기, 정지하기, 몇 초 후 몇 초 전으로 건너 뛰기 등 여러가지의 


부품 객체들을 만든 후 이를 조립하여 하나의 동영상 플레이어를 만들 수 있는 겁니다.


이렇게 한 번 만들어 놓은 부품 객체들은  나중에 그대로 사용할 수 있기 때문에 


프로그램 개발 속도 및 수정용이성에 큰 영향을 미칩니다.


객체지향 프로그래밍이 나온 배경도 바로 여기에 있습니다.


프로젝트의 규모가 커짐에 따라 더 이상 절차지향으로는 감당할 수 없게 된 것이죠.


그러면 여기서 한 가지 의문이 들 것 입니다.


절차지향 프로그래밍도 필요한 행위를 함수화해서 계속 해서 사용하고 수정하면 되지 않은가?


이를 '스타크래프트'에 비유해서 생각을 해보겠습니다.


게임 속 마린이라는 캐릭터 역시 프로그래밍이 되있을 겁니다.


마린의 체력, 공격력, 방어력, 움직임 하나 하나 이에 해당하는 함수가 필요하겠죠.


마린이 100 마리가 생산이 된 상태에서 공격력 업그레이드를 통해 공격력이 1 증가 했다고 가정을 해보겠습니다.


절차지향에서 단순히 함수로 프로그래밍한 상태에서는 각각의 마린들을 수정해줘야 할 것 입니다.


하지만 객체지향과 같은 경우에는 한 줄의 수정으로 이를 해결할 수 있습니다.




마무리


사실 저 역시도 이렇게 설명을 했지만 객체지향과 절차지향에 대해서 완벽하게 이해했다고 하기엔 부족함이 있습니다.


그만큼 어려운 개념이니 이해가 잘 안된다고 해도 이상하지 않습니다.


다만 언어 공부를 하시며, 프로젝트를 하다보면 '아 이래서!' 라고 느끼시는 순간이 올거라 믿습니다.


다음 시간에는 객체지향언어의 특징들을 알아보도록 하겠습니다.


감사합니다 :)


Comments