1. 자료 추상화 (Data Abstraction) 이란?
ㅇ 여러 자료형을 하나로 묶어(단순화) 더 높은 단계로 정의(추상화)하는 것
- 例) 사용자 정의 자료형으로써 구조체 등
ㅇ 결국,
- 컴퓨터에 저장되는 비트(0,1) 및 메모리 공간 관점이 아닌,
- 인간 사고와 유사한 관점으로 보려는 것
- (즉, 기계적 처리 관점 -> 인간이 데이터를 다루는 관점)
2. 추상 자료형 (Abstract Data Type, ADT) 이란?
ㅇ 새로운(필요한) 자료형을, 추상적으로 정의한 형태
- 자료형에 속하는 값들의 집합을 고려해보고,
- 그에 적용 가능한 연산들을 정의하여,
- 이를 추상화시킨 것
ㅇ 특히,
- 추상 자료형은, 행동 만을 정의할 뿐, 실제 구현 방법은 명시하지 않음
- 추상 자료형을, 구체적으로 구현한 것을 자료구조 라고 함
- 즉, 추상 자료형은, 자료구조의 구현과는 상관없이, 핵심/본질적인 면 만을 정의한 것임
3. 추상 자료형의 성격
ㅇ (정의)
- `자료` 및 `연산`을 모두 하나의 단위로 묶음
. 사용자 정의 자료형 (user defined data type)
. 사용자 정의 연산 (user defined operation type)
ㅇ (장점)
- 외부로부터 내부 자료를 함부로 접근 못하게함 (보안성)
. 자료형에 대한 의도되지 않은 변화를 최소화하고,
. 이를 마치 블랙박스 처럼 취급할 수 있게 함
. 이를두고, 캡슐화(Encapsulation) 또는 정보은닉(Information Hiding) 라고도 함
- 코드 재사용성 향상 (재사용성)
- 구현 코드 만 수정 가능 (수정 용이성)
- 파급효과(수정시 다른 코드에 영향줌) 감소 등
ㅇ (특징)
- 형태 : `자료` 및 `연산`을 모두 하나의 단위로 묶어둠
- 구성 : 데이터와 그 데이터에 관련된 추상적인 연산들로 구성됨
- 기반 : 자료의 캡슐화 (data encapsulation) 또는 정보은닉 (information hiding)
. 세부 구현 사항을 감춤
.. 형태 및 연산이 수학적으로 만 정의되어 있고,
.. 구현의 세부사항을 정의 않고,
.. 그 기능이 무엇인지 만 나열함
. 인터페이스 또는 접근을 다양화시킬 수 있음
.. 내부의 데이터에 접근은 못하지만, 사용은 가능
.. 즉, 데이터의 저장 방법을 몰라도 사용은 가능
.. 따라서, 더 많은 정보를 줄 수 있음
. 변경이 전체에 영향을 미치지 않게 함
.. 데이터의 무결성을 보장하고, 사용자 정의 데이터 타입을 보다 안전하게 사용 가능
ㅇ (종합)
- 내부적으로는, 데이터와 함수(메소드)를 서로 연결짓고,
- 외부적으로는, 데이터의 표현 방식을 사용자로부터 숨김
- 따라서, 사용자는 목적에 맞게, 가져다 사용 만 하면 됨
. 구현자와 사용자를 분리해 줄 수 있음
※ (적용,응용)
- 자료 추상화 (추상 자료형)에 의해,
- 비로소, 객체지향 프로그래밍 기법이 가능하게 됨
- 특히, 객체지향 언어의 클래스는, 추상 자료형의 구현에 매우 적합한 형태임