절차지향과 객체지향

강승구·2022년 5월 2일
0

절차지향(Procedural Programming)

물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시 되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법

절차지향의 특징

대표적인 예로는 C언어가 있다.
컴퓨터의 작업 처리 방식과 유사하기 때문에 객체지향 언어를 사용하는 것에 비해 더 빨리 처리 되어 시간적으로 유리하다.


절차지향의 장단점

장점

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

단점

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

객체지향(Object Oriented Programming)

객체지향 프로그래밍에서는 데이터와 절차를 하나의 덩어리(객체)로 묶어서 생각하게 된다.
이는 마치 컴퓨터 부품을 하나씩 사다가 컴퓨터를 조립하는 것과 같은 방법이다.

과거에는 하드웨어와 소프트웨어의 개발 속도차이가 크지 않았지만 소프트웨어 언어의 발달과 컴파일러의 발달로 하드웨어가 소프트웨어의 발달을 따라오지 못하는 상황이 발생했다.
이는 객체지향(Object Oriented Programming) 언어가 등장하게 되는 계기로 작용했다.
객체지향 프로그래밍은 개발하려는 것을 기능별로 묶어 모듈화를 함으로써 하드웨어가 같은 기능을 중복으로 연산하지 않도록 하고, 모듈을 재활용하기 때문에 하드웨어의 처리양을 획기적으로 줄여주었다.

객체지향(Object Oriented Programming) 특성

캡슐화(Encapsulation)

  • 객체를 캡슐로 싸서 그 내부를 보호하고 볼 수 없게 하는 것으로 객체의 가장 본질적인 특징
  • 예를 들면, 캡슐에 든 약은 어떤 색인지, 어떤 성분인지 보이지 않으며, 캡슐로부터 보호받기 때문에 외부의 접근으로부터 안전하다.
  • JAVA로 예를 들면, 클래스(Class)는 객체의 모양을 선언한 틀이며, 클래스 모양 그대로 생성된 실체(Instance)가 객체가 된다. 자바는 필드와 메소드를 클래스 내에 모두 구현하고 캡슐화를 통해 객체 내 필드에 대한 외부로부터의 접근을 제한한다.

상속(Inheritance)

  • 상위 개체의 속성이 하위 개체에 물려져서, 하위 개체가 상위 개체의 속성을 모두 가지는 관계
  • 예를 들면, '동물'은 '생물'의 속성을 가지고 있으며, '어류'는 '동물'의 속성과 '생물'의 속성을 모두 가지고 있다.
  • JAVA로 예를 들면, 자식 클래스가 부모 클래스의 속성을 물려받아 부모 클래스에 기능을 확장(Extends)하는 개념이다.
    이때 자바에서 부모 클래스를 슈퍼 클래스(Super Class), 자식 클래스를 서브 클래스(Sub Class)라고 부른다.
  • 상속은 슈퍼클래스에 만들어진 필드와 메소드를 물려받음으로써 코드의 중복 작성을 방지하고, 코드를 재사용함으로써 코드 작성에 드는 시간과 비용을 줄인다.

다형성(Polymorphism)

  • 같은 이름의 메소드가 클래스 혹은 객체에 따라 다르게 구현되는 것
  • 실세계에서 예를 들면, 동물들은 소리(음성)를 낼 수 있지만, 강아지는 '멍멍', 고양이는 '야옹', 닭은 '꼬꼬댁'하고 우는 것처럼 낼 수 있는 소리(음성)는 다양하다.
  • JAVA로 예를 들면, 슈퍼 클래스에 구현된 메소드를, 서브 클래스에서 자신의 특징에 맞게 동일한 이름으로 다시 구현하는 이른바 메소드 오버라이딩(Overriding)으로 부르고, 클래스 내에서 같은 이름의 메소드를 여러 개 만드는 메소드 오버로딩(Overloading)이 있다.

추상화(Abstraction)

  • 공통의 속성이나 기능을 묶어 이름을 붙이는 것
  • 객체 지향적 관점에서 클래스를 정의하는 것을 바로 추상화라고 정의 내릴 수 있다.
  • 예를 들어 물고기, 사자, 토끼, 뱀이 있을 때 이것들을 각각의 객체라 하며 이 객체들을 하나로 묶으려고 한다면 이 객체들을 동물 또는 생물이라는 추상적인 객체로 크게 정의하고 묶는 것을 추상화라고 한다.

객체지향(Object Oriented Programming) 장단점

장점

  • 코드의 재활용성이 높다.
  • 코딩이 절차지향보다 간편하다.
  • 디버깅이 쉽다.

단점

  • 처리속도가 절차지향보다 느리다.
  • 설계에 많은 시간소요가 들어간다.

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

객체지향 역시 절치 지향과 동일한 순서로 실행된다다.
하지만 절차지향은 데이터를 중심으로 함수를 구현하고, 이에 반해 객체지향은 기능을 중심으로 메소드를 구현하게 된다.

절차지향 언어를 사용한다면, 실행순서, 절차가 더 중점이 되고, 객체지향 언어를 사용한다면, 필요한 객체들의 종류와 속성 등이 더 중점이 된다.

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

profile
강승구

0개의 댓글