절차지향(procedural Programming)
절차지향 프로그래밍은 물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시 되고
프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법을 말합니다.
대표적인 절차지향 언어에는 C언어가 있는데, 이는 컴퓨터의 작업 처리 방식과 유사하기 때문에 객체지향 언어를 사용하는 것에 비해 더 빨리 처리되어 시간적으로 유리하다고 볼수 있습니다. 옛날에는 하드웨어와 소프트웨어의 개발 속도차이가 크지 않았다면 지금은 하드웨어의 개발속도가 소프트웨어의 속도를 따라오지 못하는 상황이 발생합니다.
이는 객제치향 언어가 나타나면서 이러한 현상이 존재하게되었습니다.
장점
- 컴퓨터의 처리구조와 유사해 실행속도가 빠르다
- 메모리를 직접 조작할수있다.
단점
- 유지보수가 어렵다
- 실행 순서가 정해져 있어 코드의 순서가 바뀌면 동일한 결과를 보장하기 힘들다.
- 원하는 기능의 코드를 가져와서 복붙하면 오류가 발생함
객체지향(Object Oriented Programming)
객제치향 은 절차지향 언어와 달리 실제 세계를 모델링 하여 소프트웨어를 개발할수 있다
우리가 흔히 보는 의자 책상 등 을 하나의 객체로 프로그래밍 할수 있는 것이다. 객제치향 프로그래밍에서는 데이터와 절차를 하나의 덩어리로 묶어서 생각해야되고 마치 컴퓨터 부품을 하나씩 모아서 조립하는 것처럼 각 기능들을 불러와서 자신이 원하는 소프트웨어를 개발하는 것이다.
1. 캡슐화
- 캡슐화란 관련된 데이터와 알고리즘(코드)이 하나의 묶음으로 정리된 것으로
이러한 기능을 이용하여 개발자가 직접 개발하기 보다는 기존에 만들어져 있던 정형화된
코드들을 가져온다 , 관련된 코드와 데이터가 묶여있고 오류가 없어 사용이 편리하다.
또한 데이터를 감추고 외부 세계와의 상호작용은 메소드를 통하는 방법인데, 라이브러리 로 만들어 업그레이드 하면 쉽게 바꿀수가 있다.
- 메소드 : 메시지에 따라 실행시킬 프로시저로서 객체지향 언어에서 사용되는 것,
객제지향 언어에서는 메시지를 보내 메소드를 수행시킴으로써 통신을 수행한다.
2. 상속
- 상속이란 이미 작성된 클래스들을 이어받아서 새로운 클래스를 생성하는 기법으로 위에 서 말했던 기존의 자신이 필요로하는 코드들을 재활용하여 사용하는것을 말한다. 이것이
절차지향과 비교되는 객체지향 방법의 가장 큰 장점중 하나로 볼수가 있다.
3. 다형성
- 다형성이란 하나의 이름 으로 많은 상황에 대처하는 기법을 말한다 개념적으로 동일한 작업을 하는 함수들에 똑같은 이음을 부여할수 있고 코드가 더 간단해지는 효과를 볼수 가 있다.
위에 3가지 특성들로 인해 생긱는 객체지향 방법의 장점은
- 신뢰성있는 소프트웨어를 쉽게 작성할수있다 (개발자가 만든 데이터를 사용하기 때문에
직접개발한것보다 더 최적화가 된 코드를 쓰기 때문이다)
- 코드를 재사용하기 쉽다.
- 업그레이드가 쉽다.(각 함수들이 유기적으로 연결돼있지 않기때문에 가능하다.)
이로써 절차지향 과 객체지향 언어에 차이점을 간단하게 써 보았는데 이론적으로 본다면 객체지향 언어는 절차지향 언어에 비해 장점이 많지만 프로그래밍을 할때 항상 객체지향언어만 사용하는 것이 아니다. 객체지향 언어는 어떤 모듈에 있는 하나의 기능만 필요하더라도 모듈 전체를 가져와야 하기 때문에 절차지향 언어보다 프로그램 사이즈가 커질수 있기 때문이다 또한 데이터에 대한 접근도 절차지향식 보다 느려질 가능성이 많다.
객체지향과 절차지향의 차이점
객체지향의 반대는 절차지향이 아니고 절차지향의 반대역시 객체지향이 아니다. 위에서 설명 한 것처럼 절차지향은 순차적으로 실행에 초점이 되어 있고 객체지향은 객체간의 관계/조직에 초점을 두고 있다
객체지향 역시 순서도를 보면 절차지향적으로 프로그래밍이 실행되는걸 볼수 있다 다만
절차는 데이터를 초점을 두고 실행되지만 객체지향은 기능을 중심으로 실행되는 것을 볼수 있다 각 함수마다 하는 역할들이 나눠져 있기 때문이다.
'Java' 카테고리의 다른 글
부동소수점과 그 한계. (0) | 2020.05.13 |
---|---|
기계어와 어셈블리언어 고급언어. (0) | 2020.05.13 |
디자인패턴(ㅇ), 스트래티지 패턴( x ) (0) | 2020.05.13 |
CGI와 서블릿 그리고 톰캣 (1) | 2020.05.13 |
JVM과 바이트 코드 (0) | 2020.05.13 |