[OOP]절차지향 프로그래밍 & 객체지향 프로그래밍

seheo·2022년 7월 14일
1

Software Engineering

목록 보기
1/5

절차지향(Procedural Programming)이란?

  • 위에서 아래로 순서대로 처리되는 것이 중요되는 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법
    ex) C언어
  • 컴퓨터의 작업 처리 방식과 유사
  • 데이터를 중심으로 구현된다

장점

  1. 컴퓨터의 처리구조와 유사해 실행속도가 빠름

단점

  1. 프로세스가 필요한 모든 데이터에 의존해야 되기 때문에 데이터가 하나라도 변경 될 경우 프로세스도 변경되어야 된다.
    쉽게 말하면 유지보수가 어렵다.
  2. 코드 순서에 따른 다른 실행 결과 : 실행 순서가 정해져 있으므로 코드의 순서가 바뀌면 동일한 결과를 보장하기 어려움
  3. 디버깅이 어려움 : 하나의 기능을 구현한 코드에 문제가 생긴 경우, 해당 코드와 연관된 모든 코드를 분석

객체지향 프로그래밍(Object Oriented Programming)이란?

  • 프로그래밍 개발방법론
  • 사람이 현실을 인식하는 방법을 개발에 접목
    • 직관적으로 이해하기 쉽다
    • 유지 보수를 용이하게 만든다
  • 추상화, 캡슐화, 상속, 다형성을 골고루 사용해 프로그래밍하는 방법
    • 캡슐화결합도를 낮추고 응집도를 높일 수 있음
    • 상속 및 다형성을 통한 확장성과 코드의 재사용성
    • 추상화 및 다형성을 통한 유연한 설계와 복잡도 관리
  • 기능을 중심으로 구현된다.

장점

  1. 하나의 객체에 프로그램에 필요한 데이터 구조와 데이터를 다루는 방법을 정의
    필요에 따라 호출해 사용하기 때문에 코드의 재사용성이 좋다. (복잡한 로직을 메소드를 통해 간단히 호출해 사용할 수 있다.)
  2. 결합도가 낮아 다른 객체와 상호작용 시 다른 객체들에게 영향을 최소한으로 미치기 때문에 유지보수하기 편함
  3. 특정 기능에서 문제가 생길 경우 특정 구간만을 확인하면 되기 때문에 디버깅이 쉽다

단점

  1. 처리속도가 절차지향보다 느림
  2. 객체지향의 특징을 잘 살려서 설계하지 않으면 객체지향언어의 장점을 얻지 못하기 때문에 설계에 많은 시간소요가 들어감

객체지향과 절차지향의 차이점

객체지향의 반대는 절차지향이 아니다.
절차지향의 반대는 객체지향이 아니다.

  • 절차지향은 순차적으로 실행에 초점
    • 명령어가 순차적으로 주기억장치에 들어가기 때문에 객체지향보다 빠른 속도를 낼 수 있다.
  • 객체지향은 객체간의 관계/조직에 초점
  • 객체지향 역시 실행 순서는 절차지향과 동일

영화 예매 프로그램

시나리오 : 관람객이 영화를 예매하고 싶다
1. 가방에서 초대장 확인
2. 초대장이 있으면 티켓 발급 x 없으면 티켓발급
3. 티켓 발급시 판매원이 관람객의 가방에서 티켓의 금액만큼 돈을 차감
4. 가방으로 티켓 지급

절차지향 프로그래밍의 처리흐름

  • 가방을 가져와서 관람객에게 주고
  • 가방에 초대장이 있는지 확인하고
  • 판매원에게 매표소를 주고
  • 매표소에서 티켓을 발급받아
  • 관람객의 가방에 넣어준다

극장이 전체적 작업을 전부 도맡아 처리

모든 책임이 극장에게 집중
모든 데이터에 의존해야 되기 때문에 데이터가 하나라도 변경 될 경우 프로세스도 변경되어야 되기 때문에 유지보수가 어렵다.

객체지향 프로그래밍의 처리흐름

객체에 책임이 적절하게 분배

  • 각 객체는 자신을 스스로 책임진다.
  • 기능을 완성하는데 필요한 책임이 여러 객체에 걸쳐 분산

P.S

C언어 같은 절차지향 언어에서도 객체 지향적으로 코딩할 수 있다.

  • 핵심은 데이터 중심이 아닌 기능 중심으로 구현하는 것
  • 여러 함수가 데이터를 공유하는 방식이 아니라 특정 함수가 다른 함수를 사용하는 방식으로 구현
  • 데이터 공유를 적절히 제한하면 캡슐화 효과를 얻을 수 있다.

참고자료


출처: 절차지향 vs 객체지향 :: 불곰

0개의 댓글