객체를 캡슐로 싸서 그 내부를 보호하고 볼 수 없게 하는 것으로 객체의 가장 본질적인 특징
상속 Inheritance
상위 개체의 속성이 하위 개체에 물려져서, 하위 개체가 상위 개체의 속성을 모두 가지는 관계
다형성 Polymorphism
같은 이름의 메소드가 클래스 혹은 객체에 따라 다르게 구현
장점
코드의 재활용성이 높습니다.
코딩이 절차지향보다 간편합니다.
디버깅이 쉽습니다.
단점
처리속도가 절차지향보다 느립니다.
설계에 많은 시간소요가 들어갑니다.
절차지향 Procedural
장점 : 컴퓨터의 처리구조와 유사해 실행속도가 빠릅니다
단점
유지보수가 어렵습니다.
실행 순서가 정해져 있으므로 코드의 순서가 바뀌면 동일한 결과를 보장하기 어렵습니다.
디버깅이 어렵습니다.
주요 차이점
객체지향 역시 절치 지향과 동일한 순서로 실행됩니다. 다만 절차지향은 데이터를 중심으로 함수를 구현하고, 이에 반해 객체지향은 기능을 중심으로 메소드를 구현하게 됩니다.
절차지향 언어를 사용한다면, 말 그래도 실행순서, 절차가 더 중점이 되고, 객체지향 언어를 사용한다면, 필요한 객체들의 종류와 속성 등이 더 중점이 됩니다.
즉, 절차지향의 반대는 객체지향이 아니고, 객체지향의 반대는 절차지향이 아닙니다.
표로 정리
절차지향(POP)
객체지향(OOP)
영문명
Procedure Oriented Programming
Object Oriented Programming
접근 방식
Top-Down (시스템 동작 방식을 먼저 생각, 그 다음 세부 모델 디자인)
Bottom-Up (세부 모델 디자인 후 조립)
구현 관점
전체적인 기능 동작을 고려 ↓ 각 단계별로 기능을 구현
필요한 속성의 객체를 설계 (보안성, 데이터, 함수 등) ↓ 각 객체의 상호작용(절차)을 설계
구성 요소
함수
객체
접근 제어
없음(전부 Public)
Public, Protected, Private
오버로딩, 다형성
불가능
함수, 생성자, 연산자 등을 오버로딩 가능
상속
불가능
가능(Public, Protected, Private)
보안성
낮음
높음
데이터 공유
모든 함수가 공유 가능
객체 간 멤버함수로만 공유
Friend 함수
없음
C++에 있음
가상 클래스, 가상 함수
없음
상속 개념 아래 존재함
예시 언어
C, Visual Basic, Fortran, Pascal
C++, Java, VB.NET, C#, Python
장점
컴퓨터 눈높이로 구성된 문법으로 바닥부터 입맛대로 설계하기 좋습니다.
인간 눈높이에서 구조를 파악하기가 좋습니다. 또한 객체 기능을 제공하므로 코드를 절약할 수 있습니다.
단점
프로젝트가 커질 시 구조가 복잡해지고 중복 코드를 작성할 수도 있습니다.
제공된 객체 기능에서 발생하는 오버헤드를 최적화 할 수 없다면 상대적으로 느려집니다.
용도
자원이 한정되어 있거나 바닥부터 설계할 필요가 있는 프로젝트에 사용됩니다.
규모가 크고 협업이 잦으며 생산성이 중시되는 프로젝트에 사용됩니다.
출처: https://usefultoknow.tistory.com/entry/절차지향Procedural-Programming-객체지향Object-Oriented-Programming-장단점-및-차이점 [UsefulToKnow:티스토리]절차지향(POP)
객체지향(OOP)
영문명
Procedure Oriented Programming
Object Oriented Programming
접근 방식
Top-Down
(시스템 동작 방식을 먼저 생각,
그 다음 세부 모델 디자인)
Bottom-Up
(세부 모델 디자인 후 조립)
구현 관점
전체적인 기능 동작을 고려
↓
각 단계별로 기능을 구현
필요한 속성의 객체를 설계
(보안성, 데이터, 함수 등)
↓
각 객체의 상호작용(절차)을 설계
구성 요소
함수
객체
접근 제어
없음(전부 Public)
Public, Protected, Private
오버로딩, 다형성
불가능
함수, 생성자, 연산자 등을 오버로딩 가능
상속
불가능
가능(Public, Protected, Private)
보안성
낮음
높음
데이터 공유
모든 함수가 공유 가능
객체 간 멤버함수로만 공유
Friend 함수
없음
C++에 있음
가상 클래스, 가상 함수
없음
상속 개념 아래 존재함
예시 언어
C, Visual Basic, Fortran, Pascal
C++, Java, VB.NET, C#, Python
장점
컴퓨터 눈높이로 구성된 문법으로 바닥부터 입맛대로 설계하기 좋습니다.
인간 눈높이에서 구조를 파악하기가 좋습니다. 또한 객체 기능을 제공하므로 코드를 절약할 수 있습니다.
단점
프로젝트가 커질 시 구조가 복잡해지고 중복 코드를 작성할 수도 있습니다.
제공된 객체 기능에서 발생하는 오버헤드를 최적화 할 수 없다면 상대적으로 느려집니다.
용도
자원이 한정되어 있거나 바닥부터 설계할 필요가 있는 프로젝트에 사용됩니다.
규모가 크고 협업이 잦으며 생산성이 중시되는 프로젝트에 사용됩니다.
객체지향 Object-Oriented
다형성 Polymorphism
장점
단점
절차지향 Procedural
주요 차이점
표로 정리