본문 바로가기

자동화프로그램/파이썬-기초

객체지향 언어의 장점과 단점, 개념, 종류, 절차지향 언어와 비교

반응형

객체 [Object]

객체는 객체지향언어를 공부하시는 분이라면 무조건 이해해야 할 만큼 중요합니다.

객체(Object)란? 세상에 존재하는 모든 것 입니다. 즉, 주변에 있는 사물, 생명을 말합니다. 프로그래밍 관점에서 객체는 데이터의 분산을 막기 위해서 데이터와 기능을 하나로 묶은 그룹이라고 볼 수있습니다.

객체지향 언어

객체 지향 언어의 사전적 의미

IT관련 객체 지향 프로그래밍에서 사용하는 언어입니다. 객체를 만들고 조작하며 객체끼리 관계를 맺음으로써 다수의 객체가 함께 수행될 수 있게 하는데요,이해를 돕기 위해 컴퓨터로 예를 들어보겠습니다.

컴퓨터(PC) = + 기능(화면제공, 소리, 입력, 등) + 데이터(본체, 모니터, 키보드, 마우스 등)

이러한 관계를 객체에 적용하면 이해하기가 쉬울 것 같습니다.

 

객체지향언어(Object-oriented Language)

객체지향 언어

객체지향언어란?
프로그래밍의 한가지 기법으로 객체를 만들고 객체를 사용하는 프로그래밍 방법입니다.

컴퓨터(PC)를 예로 들었을 때, 컴퓨터 한 대를 완성하기 위해서 여러 부품이 있어야 합니다. CPU, RAM, BOARD, SSD, HDD, VGA, POWER, CASE 등.

부품이 모두 연결되고 조립되어야 컴퓨터의 기능이 제대로 작동합니다. 여기서 컴퓨터 부품(주변기기)들을 객체라고 생각하시면 됩니다.

각 부품들의 역할이 나뉘어져 있고 각 부품들이 작동을 하게 됩니다. 고장이 나더라도 해당 부품만 수리 및 교체를 하면 간단하게 해결할 수 있습니다. 따라서 유지보수도 쉽고 편해집니다.

객체지향 언어

객체지향 언어의 특징

앞에서 예시와 같이 객체지향은 하나의 조립PC 같은 컴퓨터와 같습니다 이를 기반으로 객체지향 언어의 특징에 정리했습니다.

상속, 캡슐화, 다형성, 추상화 입니다.

상속(Inheritance)

상위 클래스의 모든걸 하위 클래스가 모두 이어 받는것 입니다. 즉, 부모가 자식에게 유전자를 물려주듯이 부모의 특징을 자식에게 모두 물려줍니다.

캡슐화(Encapsulation)

데이터와 코드의 형태를 외부로부터 알 수없게 하고, 데이터의 구조와 역할, 기능을 하나의 캡슐형태로 만드는 방법입니다.

다형성(Polymorphism)

상속과 연관이 있는 개념으로 한 객체가 다른 여러형태(객체)로 재구성 되는 것을 말합니다. 쉽게 말하면 한부모의 밑에서 태어난 자식(쌍둥이포함)이 똑같지는 않는것과 같은 것과 같다할 수 있습니다.

자바의 오버로드(Overload) 또는 오버라이드(Override)이 다형성의 대표적인 예라 할 수있고, 이 것을 구현하는걸 오버로딩(Overloading)과 오버라이딩(Overriding) 이라고 합니다.

추상화(abstraction)

추상화는 객체의 공통적인 속성과 기능을 추출하여 정의하는 것 입니다. 즉, 실제로 존재하는 객체들을 프로그램으로 만들기 위한 공통적인 특성을 파악해서 필요없는 특성을 제거하는 과정을 가르킵니다.

객체지향 언어 장점

객체지향언어의 장점

1. 재사용성

상속을 통해 프로그래밍시 코드의 재사용을 높일 수 있습니다.

2. 생산성 향상

잘 설계된 클래스를 만들어서 독립적인 객체를 사용함으로써 개발의 생산성을 향상시킵니다.

3. 자연적인 모델링

우리 일상생활의 모습의 구조가 객체에 자연스럽게 녹아들어 있기 때문에 생각하고 있는 것을 그대로 자연스럽게 구현할 수 있습니다.

4. 유지보수의 우수성

프로그램 추가, 수정을 하더라도 캡슐화를 통해 주변 영향이 적기때문에 유지보수가 쉽습니다.

객체지향 언어의 단점

객체지향언어의 단점

1. 개발속도가 느림

객체가 처리하려는 것에 대한 정확한 이해가 필요하기에 설계단계부터 많은 시간이 소요됩니다.

2. 실행속도가 느림

객체지향언어는 대체적으로 실행속도가 느립니다.

3. 코딩난이도 상승

다중 상속이 지원되는 C++ 같은 경우에 너무 복잡해져 코딩의 난이도가 상승합니다.

객체지향 언어의 종류

객체지향언어의 종류

- 자바[JAVA] : 객체지향언어의 대표적인 언어

- 시뮬라67[Simula67] : 최초의 객체지향언어

- 스몰토크[Smalltalk] : 최초로 GUI를 제공하는 언어

- 오브젝티브-C[Objective-C] : 애플의 운영체제인 iOS에서 사용되는 언어

- 비주얼 베이직 닷넷[Visual Basic .NET, VB.NET] : 비주얼 베이직(VB)의 발전된 객체지향언어

- C++ : 객체지향성이 더해진 C 언어의 확장형

- C# : 닷넷 플랫폼에 의존도가 높은 프로그래밍 언어

- 엠바카데로 델파이[Embarcadero Delphi] : 오브젝트 파스칼 프로그래밍 언어로부터 파생된 언어인 델파이를 이용

- 파이썬[Python] : 플랫폼 독립적이며 인터프리터식, 객체지향적, 동적 타이핑(dynamically typed) 대화형 언어

- 펄[Perl] : 인터프리터 방식의 프로그래밍 언어 혹은 그 인터프리터 소프트웨어

- 루비[Ruby] : 동적 객체 지향 스크립트 프로그래밍 언어이고, 순수 객체 지향 언어

- 액션스크립트[ActionScript] : 2000년 7월 액션스크립트 1.0이 플래시 5에서 처음 소개

- 액티브 서버 페이지(Active Server Page, 줄여서 ASP) : 마이크로소프트사에서 동적으로 웹페이지들을 생성하기 위해 개발한 서버 측 스크립트 엔진

- 스위프트[SWIFT] : 애플이 iOS8 과 OS X 프로그래밍을 위해 개발한 언어

절차지향 객체지향

 

절차지향(Procedural Programming)이란?

절차지향 프로그래밍이란 물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시 되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법입니다. 대표적인 절차지향 언어는 C언어가 있습니다. 이는 컴퓨터의 작업 처리 방식과 유사하기 때문에 객체지향 언어를 사용하는 것에 비해 더 빨리 처리되어 시간적으로 유리합니다. 옛날에는 하드웨어와 소프트웨어의 개발 속도차이가 크지 않았습니다. 하지만 소프트웨어 언어의 발달과 컴파일러의 발달로 하드웨어가 소프트웨어의 발달을 따라오지 못하는 상황이 발생했습니다. 이는 객체지향 언어가 등장하게 되는 계기로 작용했습니다. 객체지향 프로그래밍은 개발하려는 것을 기능별로 묶어 모듈화를 함으로써 하드웨어가 같은 기능을 중복으로 연산하지 않도록 하고, 모듈을 재활용하기 때문에 하드웨어의 처리양을 획기적으로 줄여주었습니다.

절차지향 언어의 장점

컴퓨터의 처리구조와 유사해 실행속도가 빠릅니다

절차지향 언어의 단점

유지보수가 어렵습니다.

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

디버깅이 어렵습니다.

 

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

객체지향의 반대는 절차지향이 아니고 절차지향의 반대는 객체지향이 아닙니다. 위에서 설명한 것처럼 절차지향은 순차적으로 실행에 초점이 되어 있고 객체지향은 객체간의 관계/조직에 초점을 두고 있습니다. 이렇게 설명하면 객체지향은 절차적으로 실행되지 않냐? 라는 의문이 드는데 객체지향 역시 절차지향과 동일한 순서로 실행됩니다.

 

절차지향은 데이터를 중심으로 함수를 구현합니다. 이에 반해 객체지향은 기능을 중심으로 메서드를 구현하게 됩니다.

 

요약

  • 절차지향은 데이터 중심, 객체지향은 기능 중심!!

  • 절차지향의 반대는 객체지향이 아니고 객체지향의 반대는 절차지향이 아님!!

반응형