morijwana
수로그
morijwana
전체 방문자
오늘
어제
  • 분류 전체보기
    • 강의노트
    • Machine Learning
      • Pandas
      • NLP
    • Computer Science
      • Linux
      • TIL
    • Development
      • React
      • Swift
      • Javascript
    • 스터디 기록
      • Clean Code
      • 구글 BERT의 정석
      • 개발도서
      • 기타
    • Problem Solving
      • Baekjoon
      • ICPC Sinchon
    • 끄적
      • 끄적끄적
      • 요리왕

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 백준
  • Solution Challenge
  • Python
  • ML
  • 개발도서
  • nlp
  • 회고
  • Bert
  • cs224n
  • 프로그래밍언어론
  • GDSC Sookmyung
  • 구글BERT의정석
  • 데이터사이언스
  • 자연어처리
  • 구부정스터디
  • word2vec
  • gdsc
  • 프레임워크없는프론트엔드개발
  • 민트하임스터디
  • Pandas

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
morijwana
강의노트

[2021-1 프로그래밍언어론] Chapter 11: Abstract Data Types and Encapsulation Constructs

강의노트

[2021-1 프로그래밍언어론] Chapter 11: Abstract Data Types and Encapsulation Constructs

2021. 6. 1. 00:54

The Concept of Abstraction

  • 추상화
    • 특징적인, 가장 중요한 특성으로 전체를 표현하는 것
    • 공통적인 속성이나 기능을 묶어 이름을 붙이는 것
  • 거의 모든 프로그래밍 언어는 subprogram을 통해 process abstraction을 지원한다.
  • 1980년대 이후의 거의 모든 프로그래밍 언어는 data abstraction을 지원한다.
    • process abstraction에서 처리하는 데이터까지 추상화하는 방법

 

Abstract Data Type

  • 다음의 두 조건을 만족하는 사용자 정의 자료형을 ADT라 칭한다:
    1. Hidden data representation
      • 서비스하고자 하는 기능만 보여주며, 구체적인 내부 동작과 객체의 데이터 타입 등은 모두 숨긴다.
      • 일종의 캡슐화
    2. Operation
      • 이 타입에 대한 연산들이 문법적으로 하나의 단위(single syntactic unit) 에 모두 포함되어야 한다.
    정리하자면 ADT는 데이터 구조와 그것을 핸들링할 수 있는 서브프로그램으로 구성되어 있다고 생각하면 될 것 같다. class를 생각해도 좋을 듯하다.
  • 장점
    • data representation 부분을 모두 숨기므로 신뢰성이 높다.
    • program organization 방법을 제공한다. 수정이 쉬워진다.
  • ADT 구현을 위한 언어 조건
    • 이러한 조건을 만족하는 어떠한 구조에 대한 타입 정의를 캡슐화할 수 있는 문법적 단위가 필요하다.
      • class 등
    • 가시성 조절 가능
      • private, protected 등
    • 몇몇 주요 operation은 프로세서 안에서 처리해줄 수 있어야 함

 

Language Examples

1. C++

  • C의 구조체 + Simula 67의 class
  • class는 타입이면서 캡슐화 장치다.
  • 모든 클래스 인스턴스는 같은 멤버 함수의 코드를 공유한다.
  • 각 클래스 인스턴스는 저마다의 클래스 데이터 멤버를 가진다.
  • 인스턴스는 static, stack dynamic, heap dynamic할 수 있다.
  • 가시성 조절이 가능하다.
    • private, public, protected
    • constructor(생성자)
      • 인스턴스의 멤버를 초기화하는 함수
      • 인스턴스가 Heap-dynamic할 때에는 공간을 할당하는 역할도 함
      • 인스턴스가 생성될 시 묵시적으로 호출되지만, new 키워드를 통해 명시적으로 호출할 수도 있음
      • 생성자의 이름은 클래스의 이름과 동일함
    • Destructor(소멸자)
      • 소멸자는 클래스 이름 앞에 ~를 붙여 호출할 수 있음
      • 인스턴스의 lifetime이 끝나면 묵시적으로 호출되지만, 명시적으로 호출될 수도 있음(위의 방법으로)
      • 객체가 사라질 때 공간을 메모리에 반납하는 역할을 함
    • clause

2. Java

  • 대부분 C++와 비슷함
  • 모든 사용자 정의 자료형은 class임
  • 모든 객체는 heap에 할당됨
  • 클래스 안의 모든 멤버들은 (clause 대신) 접근 제어 지정자를 가짐. 사용 안하면 garbage collection이 회수해감
  • package scope
    • 같은 package의 접근 제어 지정자가 없는 클래스 내 멤버들은 visible함

3. C#

  • C++와 Java를 기반으로 함
  • 2개의 접근 지정자를 가짐: internal과 protected internal
  • 모든 클래스 인스턴스들은 heap dynamic함
  • 모든 클래스가 사용할 수 있는 default constructor가 있음
  • Garbage collection이 있으므로, destructor는 잘 사용되지 않음
  • 구조체는 경량 클래스로, 상속 지원이 되지 않음
  • 데이터 멤버에 접근하기 위해서 getter와 setter를 사용함
    • getter와 setter를 묵시적으로 사용할 수 있는 방법을 제공함

 

Parameterized Abstract Data Types

  • = Generic Abstract Data Types
  • Java 5.0에서의 Parameterized Classes
    • Generic parameter들은 무조건 class여야 함. 기본 타입에 대해서는 wrapper가 있으니 걱정 ㄴㄴ
    • Collection types(ArrayLiss, LinkedList, Vector 등)등이 generic type임
    • 사용자 정의 generic class를 생성할 수 있음
    • 인덱스를 통해 원소에 접근할 수 없음
  • C#에서의 Parameterized Classes
    • Java 5.0과 비슷하지만, 얘는 wildcard classes를 지원하지 않음
    • Array, List, Stack, Queue, Dictionary 등이 미리 정의되어 있음
    • Parameterized structures의 원소들은 인덱스를 통해 접근할 수 있음

 

Encapsulation Constructs

  • 조직화(organization): 한 프로그램을 여러 서브프로그램으로 나눠 작성
  • 물리적인 파일로 구분(partial compilation): 부분 컴파일 가능
  • 👉🏻 서브프로그램을 그룹화하여 논리적으로 연관되며 부분 컴파일이 가능하도록 함 = 캡슐화
  • Nested program이 지원된다면 특정 서브프로그램 내에서만 쓰이는 기능들은 그 안에 nested하게 정의

Language Examples

1. C

  • 서브프로그램을 묶어 독립적으로 컴파일될 수 있는 파일로 분리
  • 인터페이스는 header 파일에 위치
  • 단점: 링커가 인터페이스와 구현부 간의 타입 검사를 진행하지 못함. #include로 링킹해줘야 함

2. C++

  • header와 code file로 분리할 수 있다는 점은 C와 유사
  • 캡슐화를 위해 class를 사용할 수 있음
  • Java의 package와 비슷한 개념인 friends가 있음. friends로 지정하면 동일 파일의 다른 클래스의 Private한 멤버에 접근할 수 있음

3. C# Assemblies (.NET 친구들)

  • 분리되어 컴파일할 수 있는 dll 파일이나 exe 파일로 묶임
  • dll: 클래스나 메서드의 집합
  • internal: 어셈블리 안의 모든 클래스에서 볼 수 있게 해주는 접근 지정자

 

Naming Encapsulation

  • 이름을 위한 scope 생성
  • C++의 namespace, Java의 Packages
저작자표시 (새창열림)

'강의노트' 카테고리의 다른 글

[2021-1 프로그래밍언어론] Chapter 14: Exception Handling and Event Handling  (0) 2021.06.01
[2021-1 프로그래밍언어론] Chapter 12: Object-Oriented Programming  (0) 2021.06.01
[2021-1 프로그래밍언어론] Chapter 10: Implementing Subprograms  (0) 2021.05.30
[2021-1 데이터마이닝및분석] Chapter 2: Data (3) Similarity  (0) 2021.04.16
[2021-1 데이터마이닝및분석] Chapter 2: Data (2) Preprocessing  (0) 2021.04.15
  • The Concept of Abstraction
  • Abstract Data Type
  •  
  • Language Examples
  •  
  • Parameterized Abstract Data Types
  •  
  • Encapsulation Constructs
  •  
  • Naming Encapsulation
'강의노트' 카테고리의 다른 글
  • [2021-1 프로그래밍언어론] Chapter 14: Exception Handling and Event Handling
  • [2021-1 프로그래밍언어론] Chapter 12: Object-Oriented Programming
  • [2021-1 프로그래밍언어론] Chapter 10: Implementing Subprograms
  • [2021-1 데이터마이닝및분석] Chapter 2: Data (3) Similarity
morijwana
morijwana
행복한 휴학생의 devlog

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.