절차지향(Procedural Programming)이란?
- 위에서 아래로 순서대로 처리되는 것이 중요되는 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법
ex) C언어
- 컴퓨터의 작업 처리 방식과 유사
- 데이터를 중심으로 구현된다
장점
- 컴퓨터의 처리구조와 유사해 실행속도가 빠름
단점
- 프로세스가 필요한 모든 데이터에 의존해야 되기 때문에 데이터가 하나라도 변경 될 경우 프로세스도 변경되어야 된다.
쉽게 말하면 유지보수가 어렵다.
- 코드 순서에 따른 다른 실행 결과 : 실행 순서가 정해져 있으므로 코드의 순서가 바뀌면 동일한 결과를 보장하기 어려움
- 디버깅이 어려움 : 하나의 기능을 구현한 코드에 문제가 생긴 경우, 해당 코드와 연관된 모든 코드를 분석
객체지향 프로그래밍(Object Oriented Programming)이란?
- 프로그래밍 개발방법론
- 사람이 현실을 인식하는 방법을 개발에 접목
- 직관적으로 이해하기 쉽다
- 유지 보수를 용이하게 만든다
- 추상화, 캡슐화, 상속, 다형성을 골고루 사용해 프로그래밍하는 방법
- 캡슐화로 결합도를 낮추고 응집도를 높일 수 있음
- 상속 및 다형성을 통한 확장성과 코드의 재사용성
- 추상화 및 다형성을 통한 유연한 설계와 복잡도 관리
- 기능을 중심으로 구현된다.
장점
- 하나의 객체에 프로그램에 필요한 데이터 구조와 데이터를 다루는 방법을 정의
필요에 따라 호출해 사용하기 때문에 코드의 재사용성이 좋다. (복잡한 로직을 메소드를 통해 간단히 호출해 사용할 수 있다.)
- 결합도가 낮아 다른 객체와 상호작용 시 다른 객체들에게 영향을 최소한으로 미치기 때문에 유지보수하기 편함
- 특정 기능에서 문제가 생길 경우 특정 구간만을 확인하면 되기 때문에 디버깅이 쉽다
단점
- 처리속도가 절차지향보다 느림
- 객체지향의 특징을 잘 살려서 설계하지 않으면 객체지향언어의 장점을 얻지 못하기 때문에 설계에 많은 시간소요가 들어감
객체지향과 절차지향의 차이점
객체지향의 반대는 절차지향이 아니다.
절차지향의 반대는 객체지향이 아니다.
- 절차지향은 순차적으로 실행에 초점
- 명령어가 순차적으로 주기억장치에 들어가기 때문에 객체지향보다 빠른 속도를 낼 수 있다.
- 객체지향은 객체간의 관계/조직에 초점
- 객체지향 역시 실행 순서는 절차지향과 동일
영화 예매 프로그램
시나리오 : 관람객이 영화를 예매하고 싶다
1. 가방에서 초대장 확인
2. 초대장이 있으면 티켓 발급 x 없으면 티켓발급
3. 티켓 발급시 판매원이 관람객의 가방에서 티켓의 금액만큼 돈을 차감
4. 가방으로 티켓 지급
절차지향 프로그래밍의 처리흐름
- 가방을 가져와서 관람객에게 주고
- 가방에 초대장이 있는지 확인하고
- 판매원에게 매표소를 주고
- 매표소에서 티켓을 발급받아
- 관람객의 가방에 넣어준다
극장이 전체적 작업을 전부 도맡아 처리
모든 책임이 극장에게 집중
모든 데이터에 의존해야 되기 때문에 데이터가 하나라도 변경 될 경우 프로세스도 변경되어야 되기 때문에 유지보수가 어렵다.
객체지향 프로그래밍의 처리흐름
객체에 책임이 적절하게 분배
- 각 객체는 자신을 스스로 책임진다.
- 기능을 완성하는데 필요한 책임이 여러 객체에 걸쳐 분산
P.S
C언어 같은 절차지향 언어에서도 객체 지향적으로 코딩할 수 있다.
- 핵심은 데이터 중심이 아닌 기능 중심으로 구현하는 것
- 여러 함수가 데이터를 공유하는 방식이 아니라 특정 함수가 다른 함수를 사용하는 방식으로 구현
- 데이터 공유를 적절히 제한하면 캡슐화 효과를 얻을 수 있다.
참고자료
출처: 절차지향 vs 객체지향 :: 불곰