객체지향 vs 절차지향

Minsang Yu·2023년 4월 10일
0

절차지향 프로그래밍이란?

  • 물이 위에서 아래듯이 순차적인 처리가 중요시 되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍
  • 대표적으로 C언어가 있다.
  • 컴퓨터 동작 원리와 유사하기 떄문에 객체지향 언어를 사용하는것 보다 속도적으로 유리하다.
  • 하드웨어 속도가 발전함에 따라 소프트웨어 속도차이가 큰 문제가 되지않아 객체지향 언어가 탄생했다.

장점

  • 컴퓨터 처리구조와 유사해 실행속도가 빠르다.

단점

  • 유지보수가 어렵다.
  • 실행 순서가 정해져 있으므로 코드의 순서가 바뀌면 동일한 결과를 보장하기 어렵다.

객체지향 이란?

우리가 실생활 에서 쓰는 모든 것을 객체라 하며, 실제 세계를 모델링 하여 소프트웨어를 개발하는 방법이다.

객체지향의 특징

  1. 캡슐화
  • 실제로 구현하는 부분을 외부로 드러나지 않도록 하여 정보를 은닉할 수 있다.
  • 객체가 독립적으로 역할을 할 수 있도록 데이터와 기능을 하나로 묶어 관리하는것
  • 코드가 묶여있어 오류가 없이 관리하기 쉽다.
  • 데이터를 보이지 않고 외부와 상호작용을 할 떄는 메소드를 이용하여 통신을 한다. 보통 라이브러리로 만들어서 업그레이드해 사용함
  1. 상속성
  • 하나의 클래스가 가진 특징(메서드, 데이터)을 다른 클래스가 그대로 물려받는것
  • 이미 작성된 클래스를 받아서 새로운 클래스를 생성 (OverRiding)
  • 기존 코드를 재활용해 중복을 줄여주는 객체지향의 중요한 기능이다.
  1. 다형성
  • 약간 다른 방법으로 동작하는 함수를 동일한 이름으로 호출하는 것
  • 동일한 명령의 해석을 연결된 객체에 의존하는것
  • 오버라이딩 vs 오버로딩
    • 오버라이딩(Overriding) vs 오버로딩(Overloading)
      • 오버라이딩 : 부모클래스의 메소드와 같은 이름을 사용하여 매개변수도 같되 내부소스를 재정의 하는것
      • 오버로딩 : 같은 이름의 함수를 여러 개 정의한 후 매개변수를 다르게 하여 같은 이름을 경우에 따라 호출하는것
  1. 추상화
  • 객체들의 공통적인 특징(기능, 속성)을 도출하는 것
  • 객체지향적 관점에서는 클래스를 정의하는 것을 추상화라고 할 수 있다.( 클래스가 없는 객체지향도 존재 eg. javascript)
  1. 동적 바인딩
  • 가상 함수를 호출하는 코드를 컴파일할 떄, 바인딩을 실행시간에 결정하는 것
  • 파생 클래스의 객체에 대해, 기본 클래스의 포인터로 가상 함수가 호출될 떄 일어난다.
  • 함수를 호출하면 동적 바인딩을 통해 파생 클래스에 오버라이딩 된 함수가 실행
  • 프로그래밍의 유연성을 높여주며 파생 클래스에서 재정의한 함수의 호출을 보장 (다형성 개념 실현)

절차지향은 데이터 중심, 객체지향은 기능 중심이다. 절차지향의 반대는 객체지향이 아니다. 절차지향은 순서에 초점이 가 있고 객체지향은 객제간 관계/조직에 초점을 두고있다.

결론으로 뭐가 더 나은 설계인가?

정해진 정답은 없다. 비즈니스 모델의 성격에 따라 객체지향이 좋을수도 절차지향이 좋을수도 있다.

객체는 변수와 함수를 추상화 과정을 통해 좀 더 모듈화한 도구에 불과하다. 모듈화 함으로써 객체지향이 지닐수 있는 강점인 정보은닉화, 상속 및 다형성을 통한 확상성과 재사용, 이를 기반한 생산성과 유지보수의 용이성이 OOPdmㅣ 진정한 특징이자 정체성일지도 모른다.

profile
Jr. DataEngineer

0개의 댓글