프로그래밍[Univ]/프로그래밍 언어론

[프로그래밍 언어론] OOP (객체지향 프로그래밍론) Part 1

Cloud Travel 2011. 12. 4. 23:19
* OOP Language의 탄생형태
 ⓐ 이미 존재한 언어에 객체 지향 개념을 Add
  ex) C++ - C언어에 객체 지향 개념 Add  
       Ada96 - Ada에 객체 지향 개념 Add
       CLOS - Lisp에 객체 지향 개념 Add
 ⓑ 객체 지향을 목적을 태어난 언어중 구조가 이전에 있던 언어와 비슷하게 만들어진 경우
  ex) Java - C++에 기초를 두어 만듬
 ⓒ 객체 지향을 목적으로 태어난 언어중 새로운 형태로 나온 언어
  ex) small Talk

* 프로그램언어의 개발 관점 변경
이건 앞에서도 필자가 한번 정의한 것 같지만, 한번더 정리 해보겠다.
 - 1950~70 : procedural > Sub Program에 중점을 둠
 - 1980 초  : Data-Oriented > Data에 중점을 두었다. ADT가 탄생하고 이로인해 Encapsulation과
                 Information Hiding 개념이 탄생하였다. 
 - 1980 후  : OOP > ADT에 상속과 동적바인딩을 통한 polymorphism을 추가 하였다.
                 OOP = ADT + inheritance + Dynamic-binding(polymorphism)

* 상속 
 - ADT에서 나타난 문제점
  : 재사용을 하기 힘들고, 독립적이고 모두 동등한 위치에 존재한다.
   

 - ADT -> Class 로의 변화 (Class의 사례화는 Object)

 - Operation -> Method로 변화
   ※ Message Protocol, Message Interface : Method를 모두 묶은 것
 - 상속하는 방법은 크게 두가지로 나뉜다.
  > Simplest case : 부모의 모든 operation과 Attr을 모두 상속 시키는 것
  > Access controls를 이용하여 부분적으로 상속시킬지 안할지를 정할 수 있다.
    (Access controls : public, private, protected)
 - 다중 상속을 지원할 것인가?(Single Inheritance vs Multiple Inheritance)
  > 다중 상속이 해결하기 힘들어서 언어마다 존재여부가 다르다.
 - 상속의 단점 : 상속에 의해 프로그램이 복잡해 질수 있다.

* 다형성 (Polymorphism)
 - 다형성이란?
  > 추상메소드(Virtual Method), 추상클래스(Virtual Class : 추상 메소드의 모음)를 선언하고, 추상클래스의
     객체를 통해서 객체가 담고 있는 자식클래스 정보에 따라서 다르게 동작하게 하는 것을 말한다. 
 - 다형성을 실현하기 위해서는 반드시 Dynamic Binding이 일어나야한다.
   (만일 Static Binding이라면 추상클래스의 객체가 담을 수 있는 클래스 정보는 하나로 제한된다.)