티스토리 뷰

python - 절차지향, 객체지향




  절차지향 과 객체지향



 기존 프로그래밍은 주로 절차( procedure )지향 언어를 사용해왔다. 이는 프로그램의 단위를 함수 단위로 작성

 하면서 코드가 길어지고 커져도 수월하게 관리 할 수 있었다. 여러개의 파일에 여러개의 함수를 분리 시켜서 

 관리 해왔다.


 하지만 컴퓨터가 발전하면서, 프로그램이 더 커져감에 따라 함수 단위로는 더이상 프로그램의 규모를 감당 할 

 수 없게 되었고, 예전에는 하드웨어와 소프트웨어의 개발 속도 차이가 크지 않았다. 하지만 소프트웨어 언어의

 발달과 컴파일러의 발달로 하드웨어가 소프트웨어의 발전을 따라오지 못하는 상황이 발생 했다.

 이 때 새로 등장한 개념이 ' 객체 지향( Object Oriented Programming ) ' 이라고 한다. 

  

 이렇게 등장한 객체 지향이 등장했다고 해서, 절차 지향언어를 사용하지 않는건 아니다. 각각의 장단점이 있고, 

 상황에 맞는 언어와 프로그래머에게 맞는 언어가 있기 마련이다. 단지 절차 지향 언어와 객체 지향의 언어의 

 차이점이 있을 뿐이다.





 예를들어 자동차를 만들때 엔진, 핸들, 바퀴, 의자, 엑셀, 브레이크 등등 .. 많은 부품이 들어간다. 기존 절차

 지향적 관점으로 본다면 자동차를 만들기 위해서는 어느 한 곳을 김점으로 순서대로 만들어가야 한다. 차체 →  엔진  핸들 → 의자 → 바퀴 등등  이런 식으로 만들어 나가며 이들은 서로 분리 되면 안되고 순서가틀려서도

 안되며 하나가 고장 나면 전체 기능이 마비되도록 설계 되어 있다고 가정해보자. 또한 이들은 처음에 조립될 때의 부품을 다른 종류의 것으로 '대체 할 수 없다.' 는 전제도 있다고 하다면 매우 비효율 , 비생산 적일 것이다.


 여기서 객체 지향의 개념을 도입하면 상황이 달라진다. 그러면 일단 제작에 있어서 이들은 순서적 이지 않아도  된다. 차체, 엔진, 핸들 등 어떤 부품을 먼저 만들든 상관이 없어진다. 이들은 각각 따로 독립적으로 개발되어 

 나중에 한 공에 모여 자신의 기능만 제대로 발휘하면 된다.

 

 부품들이 결합되어 움직이다 어느 한곳이 고장난다고해도 전체 부품에 영향을 미치지 않는다.

 고장난 부품만 고쳐주면 될 뿐이다. 특정 부품을 업그레이드 할 수도, 교체할 수 도 있다.




  절차지향 언어 



 절차지향 프로그래밍은 물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시 되며 프로그램 전체가

 유기적으로 연결되도록 만드는 프로그래밍 기법이다. 대표적인 언어로는 C언어가 있다. 이는 컴퓨터의 처리

 방식과 유사하기 때문에 객체지향 언어비해 더 빨리 처리되어 시간적으로 유리하다.





  객체지향 언어 


 객체지향 프로그래밍은 개발 하려는 것을 기능별로 묶어 모듈화를 함으로써 하드웨어가 같은 기능을 중복으로 

 연산하지 않도록 하고, 모듈을 재활용하기 때문에 하드웨어의 처리량을 획기적으로 줄여 주었다.


 객체지향의 정의를 살펴보면 객체지향이란 실제세계를 모델링하여 소프트웨어를 개발하는 방법이다.

 객체지향 프로그래밍에서 데이터와 절차를 하나의 덩어리로 묶어서 생각하게 된다. 이는 컴퓨터 부품을 

 하나씩 사서 컴퓨터를 조립하는 것과 같은 방법이라고 생각하면 된다.



 객체지향의 특징 .3


   1. 캡슐화 : 캡슐화란 관련된 데이터와 알고리즘( 코드 )이 하나의 묶음으로 정리된 것으로써 개발자가 만들었으며,

      관련된 코드와 데이터가 묶여있고 오류가 없어 사용이 편리하다.

      데이터를 감추고 외부 세계와의 상호작용은 메소드를 통하는 방법이다. 라이브러리로 만들어 업그레이드하면 쉽게

      변경할 수 있다. 


      메소드 : 메세지에 따라 실행시킬 프로시저로서 객체지향 언어에서 사용되는 것. 객체지향 언어에서는 메시지를 보내

      메소드를 수행 시키고, 이로 통신한다.



   2. 상속 : 상속은 이미 작성된 클래스를 이어 받아서 새로운 클래스를 생성하는 기법으로 위에서 말한 기존 코드를 

      재활용하는 것을 의미 한다. 하드웨어의 처리량을 줄일 수 있다.



   3. 다형성 : 다형성이란 하나의 이름( 방법 )으로 많은 상황에 대처하는 기법이다. 개념적으로 동일한 작업을 하는 함수

      들에 똑같은 이름을 부여할 수 있으므로 코드가 더 간단해진다.






 객체지향의 장점 .4


   1. 신뢰성 있는 소프트웨어를 쉽게 작성할 수 있다. ( 개발자가 만든 데이터를 사용하기에 신뢰할 수 있다. )

   2. 코드를 재사용하기 쉽다.

   3. 업그레이드가 쉽다.

   4. 디버깅이 쉽다.







  절차지향 언어와 객체 지향 언어를 사용할 때 


 

 절자지향 언어와 객체지향 언어는 각각의 장단점이 있다. 언뜻 보기에는 객체지향 언어가 장점이 많아

 보이지만 객체 지향언어는 어떤 모듈의 하나의 기능만 가져오고자할때 모듈 전체를 가져와야하기 때문에

 절차지향 프로그래밍 보다 프로그램 사이즈가 더 커질 수도 있다. 속도역시 절차지향 언어보다 느려질 

 가능성이 높다. ( 메서드 이용을 통한 접근 때문에 )


 이를 선택하는건  개발자의 몫이며, 개발자의 역량에 달려있다.  다만 많은  PC 플랫폼에서 객체지향 높은

 추세를 보이고 있는건 사실이다. 대부분의 개발 툴들이 이미 객체 지향 형태로 제공되고 있다.







      

 














참고==============


http://blog.wishket.com

'Python > [ Python ] 심화' 카테고리의 다른 글

[ Python ] 클래스 (1)  (0) 2017.04.04

'Python/[ Python ] 심화' 관련 글 +더보기