충분히 쌓여가는
객체 지향 프로그래밍/절차 지향 프로그래밍 본문
절차지향 프로그래밍(Procedural Programming)
- 순차적인 처리가 중요시되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법
절차지향 프로그래밍 장점
- 컴퓨터의 처리구조와 유사함 -> 실행속도 빠름
절차지향 프로그래밍 단점
- 유지보수 어려움
- 실행 순서가 정해져 있기 떄문에 코드의 순서가 바뀌면 동일한 결과를 보장하기 어려움
- 디버깅 어려움
객체지향 프로그래밍(Object Oriented Programming)
- 데이터와 절차를 하나의 덩어리로 묶어서 생각함
- 하드웨어가 소프트웨어의 발달을 따라오지 못하는 상황이 발생 -> 객체지향 언어가 등장하는 계기
- 개발하려는 것을 기능별로 묶어 모듈화 함으로써 하드웨어가 같은 기능을 중복으로 연산하지 않도록 함
- 모듈 재활용 -> 하드웨어의 처리양을 획기적으로 줄여줌
객체지향 프로그래밍 장점
- 순차적인 처리가 중요시되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법
객체지향 프로그래밍 특성
- 캡슐화(Encapulation)
- 객체를 캡슐로 싸서 내부를 보호하고 볼 수 없게 하는 것, 객체의 기본적인 특징
- 상속(Inheritance)
- 상위 개체의 속성이 하위 개체에 물려져, 하위 개체가 상위 개체의 속성을 모두 가지는 관계
- 코드의 중복 작성을 방지, 코드 재사용 -> 코드 작성에 드는 시간과 비용 감소
- 다형성(Polymorphism)
- 같은 이름의 메소드가 클래스 혹은 객체에 따라 다르게 구현되는 것
- 추상화(Abstraction)
- 객체에서 공통된 속성과 행위를 추출 하는 것
- 공통의 속성과 행위를 찾아서 타입을 정의하는 과정
- 추상화는 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단하게 만드는 것
객체지향 프로그래밍 장점
- 코드의 재활용성이 높음
- 절차지향보다 코딩이 간편함
- 디버깅이 쉬움
객체지향 프로그래밍 단점
- 처리속도가 절차지향보다 느림
- 설계에 많은 시간소요가 들어감
객체지향 프로그래밍 vs 절차지향 프로그래밍
- 객제지향 언어는 어떤 모듈에 있는 하나의 기능만 필요하더라도 모듈 전체를 가져와야하기 때문에 절차지향 프로그래밍보다 프로그램 사이즈가 더 커질 수 있음
- 데이터에 대한 접근도 상대적으로 절차지향보다 느려질 가능성이 있음
- 메소드를 통해서만 접근이 가능하기 때문에 절차지향식처럼 특정 함수에 접근할 수 없고, 식으로만 접근이 가능해 속도적인 측면에서 불이익이 있다
정리
절차지향 | 객체지향 | |
접근방식 | Top-Down (시스템 동작 방식을 먼저 생각, 그 다음 세부 모델 디자인) |
Bottom-Up (세부 모델 디자인 후 조립) |
구현 관점 | 전체적인 기능 동작을 고려 -> 각 단계별로 기능을 구현 | 필요한 속성의 객체를 설계(보안성, 데이터, 함수 등) -> 각 객체의 상호작용(절차)을 설계 |
구성 요소 | 함수 | 객체 |
접근 제어 | 없음(public) | Public, Protected, Private |
오버로딩, 다형성 | 불가능 | 함수, 생성자, 연산자 등을 오버로딩 가능 |
상속 | 불가능 | 가능(Public, Protected, Private) |
보안성 | 낮음 | 높음 |
데이터 공유 | 모든 함수가 공유 가능 | 객체 간 멤버함수로만 공ㅇ유 |
Friend 함수 | 없음 | C+에 있음 |
가상클래스 가상 함수 |
없음 | 상속 개념 아래 존재 |
예시 언어 | C, Visual Basic, Fortran, Pascal | C++, Java, VB.NET, C#, Python |
장점 | 컴퓨터 눈높이로 구성된 문법 | 프로그래머 관점 구조를 파악 좋음 객체 기능을 제공 -> 코드를 절약 |
단점 | 프로젝트가 커짐 -> 구조 복잡, 중복 코드 작성할 수 있음 | 제공된 객체 기능에서 오버헤드를 최적화 할 수 없다면 상대적으로 느려짐 |
용도 | 자원이 한정되어 있거나 바닥부터 설계할 필요가 있는 프로젝트에서 사용됨 | 규모가 크고 협업이 잦으며, 생산성이 중시되는 프로젝트에서 사용됨 |
'IT > Computer Science' 카테고리의 다른 글
동기(Synchronous) / 비동기(Asynchronous) (0) | 2022.12.30 |
---|---|
OSI (Open System Interconnection) 7계층 (1) | 2022.12.30 |
프로토콜(Protocol) / OSI 7계층 (1) | 2022.12.29 |
MSA(MicroService Architecture) (0) | 2022.12.29 |
HTTP와 HTTPS (0) | 2022.12.27 |