프로그래밍 공통 : 절차지향(POP), 객체지향(OOP) 언어
절차지향과 객체지향은 서로 다른 프로그래밍 기법으로써
설계단계부터 개발의 방향성이 다르게 진행됩니다.
정확하진 않지만 각각 시대를 대표하는 프로그래밍 기법입니다.
절차지향 POP ( Procedural Oriented Programming )
대표적인 절차지향 언어는 C언어 이며, 그외 포트란(Fortran), 코볼(Cobol), 파스칼(Pascal), 베이직(Basic) 이있습니다.
사실 절차지향(Procedural Oriented Programming)이라는 말에 수많은 오류와 수많은 이슈들이 있습니다.
본론만 간단히 말하자면 절차지향이라는 말은 객체지향(Object Oriented Programming) 이라는 개념이 생기면서 그에 반대되는 개념으로, 절차적 프로그래밍(Procedural Programming) 이라는 말이 절차지향이라는 말로 잘못 알려지면서 그것이 굳어져 지금까지 사용되고 있는것입니다.
따라서 절차지향 프로그램 POP (Procedural Oriented Programming) 이 아닌, 절차적 프로그래밍 PP (Procedural Programming) 이 맞는 표현입니다만, 이또한 정확한 표현은 아닙니다.
이게 정확히는 명령형 프로그래밍(Imperative Programming), 함수형 프로그래밍(Function Programming), 절차적 프로그래밍(Procedural Programming) 등의 복잡한 관계와 역사가 엮여 있습니다.
도대체 무슨 소린지 모르겠죠... 이게 굉장히 복잡하고 어렵습니다.
그게 뭔 상관이냐 할수도 있지만 프로그래밍이라는게 사소한 영어 단어 하나의 번역으로 그 개념 자체를 쉽게 이해하냐 못하냐의 큰 차이로 벌어질수 있습니다.
프로그래머가 영어를 잘해야되는 이유중 하나겠지요.
이런저런 꼬리에 꼬리를 물며 하고싶은 말은 많지만, 복잡한거 다 집어치우고 편하게 요즘 시대에 통상적으로 사용하는 절차지향이라는 말을 사용하겠습니다.
절차지향 프로그램이란 흔히 개발하고자하는 프로젝트의 흐름대로 설계, 개발하는 프로그램 기법입니다.
무슨말인지 어렵죠? 쉽게 말해서
전철을 타고 회사에 출근하는 시스템을 만든다고 가정해봅시다. 그렇다면 내가 전철을 타고 회사를 가기위한 과정을 편하게 말로 풀어써봅니다.
"나는 전철을 타기위해 개찰구를 통과한후 전철을 기다린다, 전철이 도착하면 전철에 탑승후 목적지인 강남에 도착하면 전철에서 내린후 회사에 출근한다"
이것이 우리가 만들고자하는 회사 출근 시스템을 사람이 알아듣기 쉬운 말로 풀어쓴 상태입니다.
여기에서 절차지향 프로그램 기법으로 설계를 한다면, 위의 나열된 풀어쓴 문장을 문장의 순서에 맞춰 한문장씩 나열하고 한문장씩 하나의 함수로써 프로그램을 작성합니다.
※ 문장을 얼마나 깔끔하고 효율적으로 나누냐(설계)는 개발자의 실력과 성향에 따라 개개인마다 다른 스타일이 될수 있습니다. 가장 간결하고 효율적으로 설계하는것이 베스트지만 복잡한 프로젝트일수록 정답은 정해져있지 않습니다. 많은 연습으로 감각을 잡아보는게 좋습니다.
절차지향의 장점
- 컴퓨터의 처리구조와 유사해서 프로그램의 실행속도가 빠르다
- 하드웨어를 제어하기 좋다
- 설계가 상대적으로 편리하다
절차지향의 단점
- 복잡한 프로젝트일수록 코드의 가독성이 떨어진다
- 유지보수가 어렵다
- 모든 코드가 유기적으로 연결되어 있어 코드의 순서를 바꾸면 결과값이 바뀔수있다
- 디버깅이 어렵다
객체지향 OOP ( Object Oriented Programming )
대표적인 절차지향 언어는 JAVA 이며, 그외 닷넷(VB.NET), C#, 파이썬(Python), 루비(Ruby), 자바(JAVA) 가있다.
객체지향 언어는 위에서 말한 절차지향 프로그램에서 발전된 개념으로써, 객체(Object)라는 개념이 생겼으며 필요한 기능들을 미리 만들어 놓고 필요할때 해당 객체에서 가져다 쓰는 기법입니다.
위의 절차지향과 동일한 회사 출근 시스템으로 예를 들어보자면 사람이 알아듣기 쉬운 말로 풀어쓴 상태
"나는 전철을 타기위해 개찰구를 통과한후 전철을 기다린다, 전철이 도착하면 전철에 탑승후 목적지인 강남에 도착하면 전철에서 내린후 회사에 출근한다"
이것을 객체지향 기법으로 설계를한다면 필요한 동작을 미리 만들어둔뒤 필요할때 객체에서 가져다 씁니다
객체지향의 장점
- 유지보수가 쉽다
- 사람의 언어에 가까운 기법으로 코드의 가독성이 좋다
- 코드가 효율적이며, 코드의 재활용이 가능하다
- 코드의 분석이 편하다
객체지향의 단점
- 필요없는 메모리 사용량이 있어 하드웨어의 최적화가 힘들다
- 프로그램 실행속도가 느리다
- 설계가 상대적으로 어렵다