관리 메뉴

사과하는 제라스

12. Support for Object-Oriented Programming 본문

대학 전공 공부/프로그래밍 언어

12. Support for Object-Oriented Programming

Xerath(제라스) 2022. 5. 2. 07:00

목차

    728x90
    반응형

    <객체 지향 언어들이 제공해야 될 기능들이 무엇인가>

     

    12.1. Introduction

    - COBOL, LISP 등의 언어들이 처음 나왔을 시기엔 OOP 개념과 거리가 있었으나, 최근의 언어들이 거의 대부분 OOP 개념을 탑재하였음.

     

    12.2. O.O.P

    - 객체 지향 개념이 처음 제안된건 SIMULA67, but 실질적으로 발전되기 시작한건 Smalltalk80이다.

    - 객체 지향 언어의 최소한의 제공 기능 조건

    1. ADT(Abstract Data Type)(=class) -> 11장에서 배운 내용 그대로임.

    2. Inheritance -> 목적은 Customizing(modification(1. override, 2. add new member)을 통해 reuse된다.) 

    3. Dynamic Binding(=Run-time Binding)(polymorphism)

     

    -Software Engineering의 Productivity

    1. Reuse(재사용)

    2. Automation(자동화)

     

    12.2.2. Inheritance(상속)

    1. 메소드, 변수 추가 가능

    2. 메소드 변경(by Overriding)

    3. private으로 선언된 클래스는 클래스 내에서만 접근 가능

     

    instance method, variable

    vs

    class method(class에서 인스턴스 없이 호출 가능), variable(클래스에서만 존재하는 변수)

     

    - Java에선 multiple inheritance(다중 상속) 불가능, C++은 다중 상속 가능.

     

    12.2.3. Dynamic Binding(=Dispatch)

    : Polymorphism(다형성)의 일종임. 즉, Polymorphism을 제공하기 위해서는 Dynamic Binding이 필수적임.

     

    그래서 Dynamic Binding이 뭔데?(다음이 예시)

    --------------------------------------------------------------------------------------------------------

    sort(int s1)

    sort(char s2)

    sort(float s3)

    이렇게 Overloading해두면

     

    sort(mydata) <- Actual parameter(위에서는 mydata)의 타입을 보고 런타임 중에 결정된다.

    --------------------------------------------------------------------------------------------------------

     

    - 부모 클래스를 참조하는 객체는 자식 클래스 또한 참조할 수 있음.(polymorphic reference)

    -> 무엇을 참조하냐는 런타임 시 포인터가 어떤 것을 가리키고 있냐에 따라 결정됨.

    ex)

    부모 클래스 A를 상속한 자식 클래스 B가 있을 때 A의 참조 변수로 B의 멤버에 접근할 수 있다.

    (단, B에서 상속한 내용이 아닌 멤버에 대해서는 접근 불가능하다.)

     

    - Abstract class(추상 클래스)에는 instance를 만들 수 없다.

    자체적으로 객체를 생성할 수 없기에 '상속'을 통해 자식 클래스에서 인스턴스를 생성해야 한다.

     

     

     

    728x90
    반응형