안녕하세요 오늘은 객체지향언어와 절차지향언어의 차이를 빠르게 알아보도록 하겠습니다.
객체지향언어와 절차지향언어는 프로그래밍의 언어의 어떤식으로 처리하는지의 방식입니다. 객체지향언어들과 절차지향언어들의 차이를 이글에 정리해두었습니다.
절차 지향 프로그래밍
정의
절차 지향 프로그래밍언어는 프로그램을 순차적으로 처리하는 방식으로, 프로그램 전체가 유기적으로 연결되어 있어야 합니다. 대표적인 절차 지향 언어로는 C 언어가 있습니다.
특징
절차 지향 언어는 컴퓨터의 처리 구조와 유사하여 실행 속도가 빠르다는 장점이 있습니다. 프로그램을 기능 중심으로 바라보고, 어떤 기능을 어떤 순서로 처리하는가에 초점을 맞춥니다.
예시
자동차 제조 과정을 예로 들자면, 엔진, 차체, 핸들, 의자, 바퀴 등을 순서대로 만들어야 합니다. 서로 분리되거나 순서가 틀리면 안 되며, 절차 지향 프로그래밍은 이와 같은 방식으로 동작합니다.
장점
- 실행 속도
- 절차 지향 프로그래밍 언어는 컴퓨터의 처리 구조와 유사하게 설계되어 있어 실행 속도가 빠릅니다. 이는 순차적으로 명령을 실행하기 때문에 오버헤드가 적고, 성능이 중요한 시스템에서 유리합니다.
- 구조가 단순함
- 절차 지향 프로그래밍은 순차적인 접근 방식을 사용하므로 코드의 구조가 단순하고 직관적입니다. 따라서 배우기 쉽고, 간단한 프로그램을 작성하는 데 적합합니다.
단점
- 유지 보수의 어려움
- 모든 구성 요소가 유기적으로 연결되어 있어 하나가 고장 나면 시스템 전체에 영향을 미칠 수 있습니다. 문제 해결을 위해 시스템 전체를 수리해야 하므로 유지 보수가 까다롭고 디버깅이 어렵습니다.
- 비효율성
- 코드의 순서가 엄격하게 정해져 있어 융통성이 부족하며, 순서가 바뀌면 결과가 달라질 수 있습니다. 이로 인해 생산 효율이 떨어집니다.
객체 지향 프로그래밍 (Object-Oriented Programming)
정의
객체 지향 프로그래밍은 프로그램을 다수의 객체로 나누고, 이들 객체가 서로 상호작용하도록 만드는 프로그래밍 패러다임입니다. 객체는 구체적인 사물이나 추상적인 개념을 의미하며, 컴퓨터의 모든 부품과 기능이 객체가 될 수 있습니다.
특징
- 캡슐화 (Encapsulation)
- 데이터와 알고리즘을 하나로 묶어 하나의 캡슐처럼 만드는 것입니다. 데이터와 코드를 외부에서 알 수 없도록 하여 정보 은닉을 가능하게 합니다.
- 상속 (Inheritance)
- 상위 클래스의 모든 것을 하위 클래스가 물려받는 것입니다. 이를 통해 코드를 재사용할 수 있습니다.
- 다형성 (Polymorphism)
- 하나의 객체가 여러 형태로 재구성되는 것입니다. 자바의 오버로드(Overload)와 오버라이드(Override)가 다형성의 대표적인 예입니다.
- 추상화 (Abstraction)
- 실존하는 객체의 여러 특성 중, 프로그램에 필요한 부분만 추출하고 필요하지 않은 것은 제거하는 것입니다.
장점
- 재사용성
- 상속을 통해 코드를 재사용할 수 있어 편리합니다.
- 생산성 증가
- 독립된 객체로 구성되어 있어 유지 보수가 용이하고 생산적으로 작업할 수 있습니다.
- 자연스러운 모델링
- 객체는 세상에 존재하는 모든 것이므로, 개발자가 생각하는 대로 자연스럽게 구현할 수 있습니다.
단점
- 느린 개발 속도
- 모든 객체의 역할과 기능을 이해해야 하기 때문에 프로그래밍에 많은 시간이 소요됩니다.
- 느린 실행 속도
- 객체 지향 언어의 처리 속도는 절차 지향 언어보다 느립니다.
- 높은 난이도
- 객체 지향 언어는 난이도가 높습니다. 특히 다중 상속이 지원되는 C++는 복잡도가 높습니다.
객체 지향 프로그래밍 언어
- Java
- C++
- Python
- 최초의 객체 지향 언어: 시뮬라67
- 기타: 비주얼 베이직 닷넷, 액션스크립트, 스위프트 등
객체 지향 프로그래밍 vs 절차 지향 프로그래밍 차이점
객체 지향 프로그래밍(OOP)과 절차 지향 프로그래밍(POP)은 다음과 같은 차이점을 가지고 있습니다:
1. 코드 구조와 관리
- 객체 지향 프로그래밍 (OOP):
- 구조화: 코드가 클래스와 객체로 구성되어 있으며, 캡슐화, 상속, 다형성 등의 개념을 사용해 모듈화가 잘 되어 있습니다.
- 재사용성: 클래스와 객체를 통해 코드의 재사용성과 유지보수성이 높습니다.
- 유지보수: 변경 사항이 클래스 내부에 국한되어 관리가 용이합니다.
- 절차 지향 프로그래밍 (POP):
- 직접적인 명령: 코드가 함수와 절차로 구성되어 있으며, 순차적으로 실행됩니다.
- 간단함: 구조가 단순하고 이해하기 쉬워 초기 개발이 빠릅니다.
- 유지보수: 함수 간의 의존성이 높아져, 프로그램이 커질수록 유지보수가 어려워집니다.
2. 실행 속도
- OOP:
- 객체 생성과 메모리 관리로 인해 실행 속도가 다소 느릴 수 있습니다.
- POP:
- 직접적인 명령 실행으로 인해 상대적으로 실행 속도가 빠릅니다.
3. 적합한 용도
- OOP:
- 대규모 프로젝트, 유지보수와 확장성이 중요한 애플리케이션에 적합합니다. 예: 웹 애플리케이션, 엔터프라이즈 소프트웨어.
- POP:
- 실행 속도가 중요한 시스템 프로그래밍, 단순한 절차적 작업에 적합합니다. 예: 임베디드 시스템, 간단한 스크립트.
4. 개발 복잡성
- OOP:
- 초기 설계가 복잡하지만, 장기적인 유지보수와 확장이 용이합니다.
- POP:
- 초기 개발이 간단하지만, 복잡한 프로그램의 유지보수는 어려울 수 있습니다.
결론
객체 지향 프로그래밍과 절차 지향 프로그래밍은 각각의 장단점이 뚜렷합니다. OOP는 코드의 재사용성과 유지보수성이 뛰어나며 대규모 프로젝트에 적합한 반면, POP는 실행 속도가 빠르고 단순한 절차적 작업에 적합합니다. 프로젝트의 요구사항과 특성에 맞추어 적절한 패러다임을 선택하는 것이 중요합니다.
오늘은 이렇게 객체지향프로그래밍과 절차지향프로그래밍 두가지를 두고 차이점을 하나하나 알아보았습니다. 지금까지 읽어주신 여러분들 감사합니다.