728x90
반응형
절차지향 프로그래밍이란 물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시 되며, 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법으로 대표적인 절차지향 언어는 C언어가 있습니다.
장점은 컴퓨터의 처리구조와 유사해 실행속도가 빠르지만,
단점으로 유지보수가 어렵고, 실행 순서가 정해져 있으므로
코드 순서가 바뀌면 동일한 결과를 보장하기 어려우며, 디버깅하기도 어렵습니다.
하지만 하드웨어의 발전으로, 성능에 조금 부담을 주더라도 큰 단점이 아니게 되었기에 모듈화, 캡슐화해서 개념적으로 접근하는 형태를 갖는 객체지향 프로그래밍이 탄생했습니다.
객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그램을 객체라는 독립된 단위들의 모임으로 보고 개발하는 것입니다. 객체는 상태와 행위를 가지며, 서로 메시지를 주고받고 데이터를 처리할 수 있습니다. 이러한 객체들이 서로 상호작용하면서 프로그램을 구성하는 것이 객체 지향 프로그래밍의 핵심입니다.
- 절차지향 프로그래밍: 프로그램의 순서와 흐름을 먼저 세우고 필요한 자료구조와 함수들을 설계하는 방식
- 객체지향 프로그래밍: 자료구조와 이를 중심으로 한 모듈들을 먼저 설계 후 이들의 실행순서와 흐름을 짜는 방식
절차지향 vs 객체지향
접근 방식 | Top-Down | Bottom-Up |
구성 요소 | 함수 | 객체 |
접근 제어 | 없음 | public, protected, private |
다형성 | 불가능 | 함수, 생성자, 연산자 등 오버로딩 가능 |
상속 | 불가능 | 가능 |
보안성 | 낮음 | 높음 |
데이터 공유 | 모든 함수 공유 | 객체 간 멤버 함수로만 공유 |
- 절차지향 프로그래밍 (Procedural Programming)
- 프로시저(루틴, 하위 프로그램, 서브루틴, 메서드, 함수 등)를 이용하여 작성하는 프로그래밍 방식
- 프로시저 콜(함수 호출)의 개념을 바탕으로 한 프로그래밍 패러다임
- 기능 중심으로, ‘어떤 기능을 어떤 순서로 처리할 것인가?’의 관점을 사용
- C, Visual Basic, Fortran, Pascal 등
- 특징
- 하나의 큰 기능을 처리하기 위해 작은 단위의 기능들로 나누어 처리하는 Top-Down 접근 방식으로 설계 = 큰 틀부터 설계
- 데이터와 함수를 별개로 취급 → 함수가 많아질 수록 데이터의 변경 사항을 추적하기 어려워짐
- 모든 함수는 데이터 공유가 가능
- 정해진 순서대로 입력해야 하므로 순서가 바뀌면 결과를 도출하기 어려움
- 프로그램이 커질수록 구조가 복잡해져 유지보수가 어려움 (소형 프로젝트에 적합)
- 객체지향 프로그래밍 (Object-Oriented Programming)
- 우리가 실생활에서 쓰는 모든 것을 객체라고 하며, 프로그램 구현에 필요한 객체를 파악하고 각각의 객체들의 역할이 무엇인지를 정의하여 객체 간의 상호작용을 통해 프로그램을 만드는 것. 객체는 클래스라는 틀에서 생겨난 실체(Instance)
- 객체가 중심이 되며, ‘누가 어떤 일을 할 것인가?’의 관점으로 바라보는 방식
- C++, C#, Java, Python 등
- 객체지향 프로그래밍의 주요 특징 4가지
- 추상화 (Abstraction): 구체적으로 정의하는 것이 아니라 필요한 정보만을 중심으로 간소화 하는 것. 지하철 노선도 처럼 실제 지형도보다 지하철역 간의 상대 위치가 중요하게 정리된 것이 추상화의 대표적인 예.
- 캡슐화 (Encapsulation): 객체가 독립적인 역할을 할 수 있도록 데이터와 기능을 하나로 묶어서 관리하는 것. 실제로 구현되는 부분을 외부에 드러나지 않도록 하여 정보를 은닉 가능.
- 상속성 (Inheritance): 하나의 클래스가 가진 데이터나 기능을 다른 클래스가 그대로 물려받는 것. 기존 코드를 재사용하여 확장 가능.
- 다형성 (Polymorphism): 하나의 클래스나 메서드가 다양한 방식으로 동작이 가능한 것. 오버라이딩과 오버로딩이 있음. (오버라이딩 - 상속받은 메소드를 서브클래스에서 재정의 하는것 & 오버로딩 - 같은 이름의 메소드가, 받는 파라미터(매개변수)에 따라 다르게 동작하는 것)
- 장점
- 상속, 캡슐화, 다형성의 특징으로 코드를 재사용하거나 확장하기 좋아서 유지보수가 쉬움
- 관련이 많은 객체의 상호작용을 생각해 실세계에 대한 모델링을 좀 더 쉽게 해줌
- 캡슐화 특징으로 실제로 구현되는 부분을 외부에 드러나지 않도록 은닉하여 보안성이 높음
- 단점
- 캡슐화와 격리구조 때문에 절차지향 프로그래밍보다 실행 속도가 느림
- 객체 단위의 구성으로 필요한 절차지향 프로그래밍보다 메모리 비용이 큼
요약
- 절차지향은 데이터 중심, 객체지향은 기능 중심
- 절차지향의 반대는 객체지향이 아니고 객체지향의 반대는 절차지향이 아님
728x90
반응형
'Computer Science (CS)' 카테고리의 다른 글
[CS공부 - 6회] 멀티 프로세스와 멀티 스레드 (1) | 2023.11.02 |
---|---|
[CS공부 - 5회] RESTful API (0) | 2023.10.31 |
[CS공부 - 4회] 동기와 비동기 (블로킹과 논블로킹) (0) | 2023.10.27 |
[CS공부 - 2회] 대칭키와 비대칭키(비밀키와 공개키) (0) | 2023.10.23 |
[CS공부 - 1회] TCP와 UDP (1) | 2023.10.20 |