- 절차 지향 프로그래밍(procedural programming)
- C언어.
물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시 되며
프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법
Backgraound
옛날에는 하드웨어와 소프트웨어의 개발 속도차이가 크지 않았습니다. 하지만 소프트웨어 언어의 발달과 컴파일러의 발달로 하드웨어가 소프트웨어의 발달을 따라오지 못하는 상황이 발생했습니다. 이는 객체지향 언어가 등장하게 되는 계기로 작용했습니다. 객체지향 프로그래밍은 개발하려는 것을 기능별로 묶어 모듈화를 함으로써 하드웨어가 같은 기능을 중복으로 연산하지 않도록 하고,모듈을 재활용하기 때문에 하드웨어의 처리량(Throughput) 을 획기적으로 줄여주었습니다.
절차지향의 단점
- 재사용할 수 없다.
- 확장성이 떨어진다.
- 유지보수가 어렵다.
- 객체 지향 프로그래밍(Object Oriented Programming)
- C++, JAVA, Python
프로그래밍 방식의 변화
초기 : 절차지향 방식
단점 : 조금만 복잡해져도 순서도로 나타내는 것이 불가능한 "스파게티 코드"
* 에츠허르 다익스트라가 1968년 "GOTO문의 해로움"
Edsger Wybe Dijkstra : (GOTO Statement Considered Harmful)
1968년 GOTO의 해로움이라는 논문에서 함수(프로시져)단위 호출방식의
구조적 프로그래밍 방식의 등장.
단점 : - 재사용할 수 없다.
- 무어의법칙(Moore's law)을 따라가지 못하는 소프트웨어
* Moore's law : 18개월마다 반도체 집적회로의 성능이 2배로 증가한다.
(HW 18개월마다 2배의 성능으로 증가)
< Software Crisis > 직면하게 된다.
이를 극복하기 위한 대안 : 객체 지향 프로그래밍
구조적 프로그래밍과 다르게 큰 문제를 작게 쪼개는 것이 아니라,
먼저 작은 문제들을 해결할 수 있는 객체들을 만든 뒤,
이 객체들을 조합해서 큰 문제를 해결하는 상향식(Bolttom-up) 해결을 도입.
이 객체란 것을 일단 한번 독립성/신뢰성이 높게 만들어 놓기만 하면
그 이후엔 그 객체를 수정 없이 재사용할 수 있으므로 개발 기간과 비용이 대폭 줄어들게 된다.
]
1. 캡슐화 ( Encapsulation )
2. 상속 ( Inheritance )
3. 다형성 ( Polymorphism )
+ 추상화 ( Abstraction )
와 같은 issue 들이 있다.
'JAVA > OOP' 카테고리의 다른 글
OOP : Polymorphism (상속/인터페이스에 의한 다형성) (0) | 2015.02.04 |
---|---|
OOP : Abstraction (추상화) (0) | 2015.02.04 |
객체지향의 5원칙 (SOLID) (0) | 2015.02.04 |
OOP : Abstraction, Encapsulation, Inheritance and Polymorphism (0) | 2015.02.04 |
Class, Instance and Object (0) | 2015.02.04 |