플러닝 Flearning

절차 지향 프로그래밍과 객체 지향 프로그래밍 본문

컴퓨터공학 기초

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

플러닝 2016.07.05 18:27

안녕하세요. 데이터베이스에 대해 글을 올렸었는데...


도중에 객체 지향 데이터베이스 관리시스템이라는 것이 등장했죠.


그런데 '객체 지향'이라는 단어에 익숙치 않은 분들이 많을 것 같아서


오늘은 객체 지향 프로그래밍과 그 반대인 절차 지향 프로그래밍에 대해서 포스팅 해보고자 합니다.











여러분은 주로 어떤 언어를 이용하여 코딩을 하시나요?


정보올림피아드나 알고리즘 공부를 하신 분들은 C, C++에 익숙하실 것이고


웹 서버 관리나 웹 디자인 쪽을 공부하신 분은 php, javascript, html, css 등이 익숙하시겠죠?


정보보안, 해킹 공부를 하신 분들은 python과 같은 인터프리터 언어에 익숙하실거구요.





그런데 많은 프로그래밍언어를 절차 지향객체 지향 언어로 나눌 수 있고


한 언어를 가지고도 절차 지향과 객체 지향 모두의 방식으로 프로그래밍 할 수 있습니다.


절차 지향 언어의 대표로는 C이고 객체 지향 언어의 대표는 Java, Python, C++을 예로 들 수 있는데요.


그럼 각 언어가 지향하는 특징과 그것이 지향하는 프로그래밍 방식이 무엇인지 더 자세히 알아보도록해요!


아래에는 C와 C++의 차이를 예시로 들었습니다!





먼저 절차 지향언어와 절차 지향 프로그래밍에 대해 알아보도록해요.


흔히 C언어를 절차 지향 언어라고들 합니다. 


절차 지향이란, 어떤 일을 하는 절차를 위주로 프로그램이 설계되고 구현된다는 것을 의미하는데요.


예를 들어, 입력을 받아서 처리를고 출력을 하는 절차를 아래와 같이 코딩하겠죠.


(간단한 코드지만 언어를 잘 모르시는 분은 대충 이렇다는 느낌만 받아도되니 걱정마세요 !!)







                               








위 코드는 콘솔에서 사용자에게 입력받는 함수, 특정 프로세스를 수행하는 함수, 콘솔에 출력하는 함수


세 가지로 구성되어있습니다. 이 세 함수의 절차를 거쳐 하나의 프로그램이 만들어 지는 것이죠.


위의 코드에서 보듯이, 입력받은 내용은 어떤 프로세스에서 사용되고 출력함수로 전달됩니다.


순차적으로 일을 처리하는 절차를 가시적으로 알 수 있지 않나요?


정리하면 어떠한 일을 그 대상이 무엇이든 간에 순차적으로 진행하는 것을 절차 지향이라고 하고, 


이 방식으로 프로그래밍하는 것을 절차 지향 프로그래밍이라고 합니다.





그렇다면 비슷한 예시를 통해 객체 지향을 이해해보도록해요.




                                          





같은 프로그램을 객체 지향의 방식으로 프로그래밍 한 것입니다.


클래스라는 단어가 눈에 확 띄지 않나요? (에메랄드 빛깔도 호감이구요)



위의 코드에서 보듯이, 입력받은 내용은 메세지를 생성하기 위해서 사용되고, 


메세지는 자신에 대한 처리를 직접한 이후에, 출력으로 전달돼죠.


즉, 각각이 실행해야할 주체를 정하고, 그 주체에 요청을 전달 하는 형태로 이루어진다는 점입니다.









얼핏보면 차이가 나지 않는 것 처럼 보이지만, 만약 요구사항이 


"시스템이 입력을 읽고, 메세지를 생성해서 출력한다." 와 같이 주어진다면, 


전자는 "입력", "처리", "출력"만 생각할 것이고,


후자는 "메세지 시스템", "입력기", "출력기"를 먼저 정의 하겠죠?




코드가 아닌 다른 예를 들어 보도록하겠습니다. 


인적 정보를 관리하는 시스템을 만드는 상황을 생각해보죠.


그 사람의 정보를 입력 받고, 관리하며, 출력하는 단계로 구성됩니다. 


이 단계를 만드는 것은 절차 지향 프로그래밍입니다.


그런데 사람마다 가지고 있는 특징이 다르죠. 


나이와 성별만 필요한 사람, 직장과 성별이 필요한 사람, 가족관계와 나이가 필요한 사람 등등..


'사람'이라는 계층(Class) 안에 다수의 개개인(Instance, 객체)이 존재합니다. 


이를 위해 사람이라는 Class를 만들고 사람1, 사람2, 사람3 이라는 객체를 만들어 주는거죠.



아니면 정보를 입력 하는 파트에서 입력의 종류가 사람마다 다를 수 있습니다.


A, B라는 정보를 입력받을 수도 있고 A, D라는 정보를 입력받을 수도 있습니다.


그래서 '입력기'라는 계층 안에  입력기1, 입력기2, 입력기3 이라는 객체를 만들어 주는거죠.


위의 예제 코드에서 Input input1, Input input2, Input input3을 넣어주고 각각의 특징을 따로 프로그래밍해주면 되는겁니다.











최대한 쉽게 설명하려고 했는데 어렵게 느껴지시는 분들이 있겠죠..


사실 절차 지향과 객체 지향으로 언어를 명확히 구분할 수는 없습니다. 


프로그래머가 원하는, 가장 효율적인 코드, 유용한 코드를 만들기 위해 둘 모두 필요하기 때문이죠.


또한 대부분의 언어가 둘의 특징을 모두 갖추고 있기도 하구요.




이 차이를 느끼기 위해서는 언어를 직접 공부해보면서 느끼는게 가장 좋습니다.


C언어로 개발을 하면서 객체지향을 모를 때의 불편함을 느껴보고 C++을 공부한다거나


python으로 개발하면서 절차지향의 꼼꼼함이 필요해서 C를 공부하려는 자세가 필요한 것이죠.


포스팅이 좀 길어졌는데요.. 다음 포스팅에선 객체 지향에 대해서 조금더 자세히 적어보도록 하겠습니다.


상속, 인터페이스 등 객체 지향이 가지는 특징을 조금더 자세히 살펴보도록 해요!


 




저작자 표시
신고
1 Comments
댓글쓰기 폼