관리 메뉴

사과하는 제라스

11. Abstract Data Types and Encapsulation Constructs 본문

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

11. Abstract Data Types and Encapsulation Constructs

Xerath(제라스) 2022. 5. 2. 06:59

목차

    728x90
    반응형

    11.1. Abstraction에 대한 개념

     

    - Abstraction <=> detail, representational, concrete

    - Abstraction을 통해 프로그래밍의 복잡성을 해결할 수 있음.

    - Process Abstraction vs Data Abstraction

    1) Process Abstraction(Imperative 언어들, 거의 모든 언어긴 하지)

    Fortran 이전의 Plankalkul이란 언어때부터 즉, 매우 오래 전부터 Process Abstraction은 존재했었음. (≡함수)

    => Subprogram(function)의 형태로 한 곳에 쭉 나열하는게 아니라 함수로 만들어서 기능별로 작성해두는 방식.

    2) Data Abstraction(O.O.P에서 나온 개념)

    변수, 함수들을 하나의 덩어리로 만들어서 하나의 데이터 타입으로 쓰는 방식.

     

    11.2. Data Abstraction이란?

     

    - Abstraction Data Type(ADT)(=class) = 하나의 Data Type(변수), 그에 대한 연산을 정의한 SubProgram(=메소드)을 하나의 덩어리로 만든 것.

    1. Encapsulation

    2. Information Hiding

     

    - Process Abstraction의 문제였던 Side Effect...(자기 변수 이외의 변수를 건드림)

    1. 전역변수를 건들기

    2. Call-by-reference

    -> coupling 문제(서로 얽히는 것.) 발생함.

     

    ∴ 객체 지향 개념이 생겨났음.

    1. Encapsulation을 통해 데이터가 하나의 덩어리가 되어서 그것을 바꿀 수 있는 것은 클래스 안의 메소드 뿐!

    2. Information Hiding을 통해 데이터의 접근을 제한(private, public 등)함!

     

    아하~!

     

    11.2.2. user-defined abstract type 

    - class에 선언되어 있는 필드나 메소드를 사용할 수 있음. 

    - 'protocol'(=API, Interface) 역할임. => 호출자와 피호출자 간의 Interface

    - client에서 class에 직접 접근할 수는 없고 제공받는 메소드, 필드만을 사용 가능함. => Reliability 증가

     

    11.3.Design Issues for Abstract Data Types

    - prototype(=specification)=> Interface class와 같은 것으로, 직접 모든게 구현되어 있지 않은 부분. <=> Implementaion 

    - 객체는 보이는 부분과 안 보이는 부분으로 나누어져 있다.

    1. Iterator(반복자), 2. Accessor(접근 제한자), 3. Constructor, 4. Destructor

     

    11.4. 예시 언어들

     

    - SIMULA67 -> Smalltalk80 -> ...(O.O.P 언어들)

     

    1. C++(C+O.O개념/기능)

    - 접근 제한자 : private, protected, public

    - constructor : 멤버 타입명(ex) Stack stk ), destructor : delete(delete stk)

    - .h : Specification    vs   .cpp : Implementation

     

    2.Objective-C

    - Interface <=> Implementation

    (prototype <=> definition)

    3. Java

    class(일반 클래스)

    Interface class(Implementation)

    Abstract class(구현이 덜 된 class)

     C++하고 다른 점은 독립된 class가 없다.(모든 class는 누군가로부터 상속을 받는다. Object class(root class)로부터 상속을 받아 내려온다.)

     

    - 프로그래머가 deallocate 할 일이 없음. 가비지 콜렉터가 있으므로~ => dangling pointer 문제, 가비지 문제 걱정X

     

     

    728x90
    반응형