[프로그래밍 언어] 8. Abstract Data Types and Encapsulation Constructs
Y
Yerim
Category
Programming Language
추상화
추상화
•
중요한 속성만을 포함하는 개체의 개관 또는 표현
•
공통적인 속성이 고려될 필요가 없는 그룹
•
개체들의 인스턴스들을 모으는 것을 허용
•
공통적인 속성 → 다시 작성 X
•
자동차 인스턴스는 자동차 클래스를 상속
프로세스 추상화
•
어떻게 실행되는지 상세하게제공X, 호출 방법을 다른 프로그램에게 제공
•
모든 부프로그램은 프로세스 추상화라고 할 수 있다
◦
e.g. 정렬 프로세스를 위한 부프로그램 → 어떤 방식으로 정렬하는지 알 필요 없음
•
사용자는 이름, 프로토콜을 아는 것이 필요
데이터 추상화
•
레코드 데이터 구조에서 출발
•
추상 데이터 타입: 레코드 형태인 데이터 구조 + 데이터를 다루는 부프로그램
◦
데이터 표현, 그 타입의 연산을 제공하는 부프로그램이 포함된 인클로저
•
접근 제어 → 인클로저 외부 단위로부터 숨길 수 있음
◦
추상 데이터 타입의 변수를 선언 O, 내부 데이터 알 수 없음
◦
추상 데이터타입의 인스턴스 = 객체 (클래스)
•
사용자 정의 추상 데이터 타입
◦
타입 정의
◦
연산자들 집합
•
추상 데이터 타입
◦
객체 표현: 프로그램 단위로부터 숨겨짐 → 정보 은폐
▪
신뢰성 증가: 클라이언트는 객체 기본 표현 바꿀 수 없음 → 무결성 증가
▪
프로그래머가 유의할 변수 개수 감소
▪
변수 이름 충돌 감소
▪
클라이언트에게 독립적: 코드를 수정해도 클라이언트 변경 X
◦
타입 선언&타입의 객체 연산의 프로토콜 → 단일 구문 단위에 포함
◦
정의된 타입 변수 생성 가능 (int 등)
•
접근자 메서드
◦
객체의 데이터 멤버가 클라이언트로부터 은폐 →접근자 메서드(게터, 세터)로 간접 접근
◦
읽기 전용 접근: 게터
◦
세터 + 제한 조건 (어떤 범위로 제한 가능)
◦
클라이언트에게 영향을 주지 않고 구현 수정
◦
데이터 멤버를 공용으로 명세 X, private으로 명세
추상 데이터 타입의 설계 고려 사항
추상 데이터타입 사용
•
추상 데이터 타입 선언
•
부프로그램의 프로토타입
타입의 설계자에 의해 제공되는 대표적인 네 가지 연산
•
반복자
•
접근자
•
생성자
•
소멸자
언어 예제
C++ 추상 데이터 타입
•
추상 데이터 타입 → C언어 struct와 유사한 C++ 클래스 제공
•
캡슐화: 멤버 데이터 + 멤버 함수
◦
멤버 데이터와 멤버 함수는 클래스와 관련
◦
인스턴스 데이터와 인스턴스 멤버 함수는 인스턴스와 관련
◦
클래스 인스턴스 종류: 정적, 스택 동적, 힙 동적
▪
스택 동적: Player player;
▪
힙 동적: Player *player = new Player; // new 생성 delete 소멸
•
정보 은폐: 은폐 개체 + 가시 개체
◦
은폐 개체(멤버 데이터)는 private 절, 가시 개체(멤버 함수)는 public 절
•
생성자와 소멸자
◦
생성자: 클래스와 동일한 이름, 묵시적 호출, 멤버 데이터들 초기화, 중복 가능
◦
소멸자: 틸트(~)가 선행, 묵시적 호출, delete 연산자 사용 가능
◦
생성자, 소멸자 모두 반환 타입 X, 명시적 호출 가능
Java 추상 데이터 타입
•
모든 객체들은 힙에 할당, 참조 변수로 접근
•
Java는 메소드 머리부 + 몸체 모두 정의해야함
•
private, public 절보다 접그 수정자(public, private, protected, default)를 가짐
•
가비지 수집 → 소멸자가 없다
매개변수 추상 데이터 타입
•
추상 데이터 타입을 매개변수화 하는 것이 편리
◦
임의의 스칼라 타입 원소들을 저장할 수 있는 스택 추상 데이터 타입을 설계하는 것이 좋음
Java
ArrayList<Integer> myArray new ArrayList<Integer>();
•
포괄형 매개변수가 클래스인 경우 → 매개변수 추상 데이터 타입의 형태
•
collection 타입은 항상 다중 타입을 저장할 수 있다
•
객체 저장 시 문제점
◦
collection 제거될 때마다 적당한 타입으로 캐스팅
◦
collection에 추가될 때 오류 검사 없음
◦
원시 타입 저장 불가능
•
collection 클래스 → 포괄형 클래스 generic class <T>
◦
각괄호 안에 포괄형 매개변수를 보냄
◦
원시 타입 저장 불가능
◦
색인을 사용할 수 없음
Subscribe to 'Yerim-DevNote'
Subscribe to my site to be the first to receive notifications and emails about the latest updates, including new posts.
Join Slashpage and subscribe to 'Yerim-DevNote'!