우물 밖 병아리

[자료구조] 추상화, ADT(추상자료형), Class와 Struct 본문

CS/자료구조

[자료구조] 추상화, ADT(추상자료형), Class와 Struct

HOY01 2024. 3. 11. 17:28

*개인 학습 목적으로 정리한 글입니다. 오류가 있다면 부담없이 지적해주세요, 감사합니다.*

자료구조를 공부해보자

1. 추상화

<어머니가 심부름을 시키는 상황>

1. "마트에 가서 노란 걸 하나 사오렴." ---> 지나치게 추상적

2. "마트에 가서 레몬을 사는데 직경이 5cm보다 작고, 길이는 10cm 이하이며 가격은 1000원 이하에다 색상이 #FFD404이고 줄기는 3mm보다 가는 것을 사오렴." ---> 지나치게 구체적

 

 ---> 1과 2사이의 추상성이 필요하다.

 

추상화란?

- 복잡하고 구체적인 대상에서 필수적인(중요한) 사항만을 표현하는 것

ex) 우리가 크롬에 어떤 것을 검색하고자 할 때, 우리는 해당 기능에 대해서만 알면 됨

크롬이 내부적으로 어떻게 동작하는지는 알 필요가 없음. ---> 굳이 보여주지 않는다~

 

- 추상화 통해 문제를 효율적으로 제어, 관리할 수 있음

ex) <자동차 부품 관리 프로그램>

메인 부품: 엔진 출력, 성능

타이어 부품: 타이어 브랜드, 사이즈

외관 부품: 부품 색상, 종류, 사이즈  ---> 중요한 사항만 표현!

 

cf) Information Hiding(정보 은닉)

시스템이 모듈의 디테일들에 접근하는 것을 제어하기 위해

퍼블릭 인터페이스/메소드만을 통해 접근할 수 있도록 하는 것

(캡슐화는 information hiding을 위한 방법 중 하나)


2. ADT(추상자료형)

- 구현 방법에 상관없이 자료 자체의 형태와 관계된 연산들을 정의한 것

ex) 스택 - 삽입한 순서로 쌓이는 값(Data)의 모임.

가장 위에 값을 넣는 push, 가장 위의 값을 하나 빼서 알려주는 pop등의 연산(Operation) 존재

 

- "구현 방법은 상관없다"

ex) Python2와 Python3의 <list> 자료형,

C++와 Python3의 <list>,

Java와 Python3의 <list>

--->3가지 경우 구체적 구현, 연산은 다를 수 있으나 ...

전부 같은 <list>의 기능을 설명하기 때문에 같은 ADT == 추상자료형임

 

- 데이터와 연산에 대한 분명한 내용을 제공하면서, 내부 구현은 숨김

   ---> 사용자에게 데이터, 연산의 인터페이스만을 제공(자료구조의 추상화)


3. 자료구조

- ADT의 데이터 + 연산은 클래스와 오브젝트들로 쉽게 구현 가능

Data: 멤버 변수

Operations: 멤버 함수

 

- 자료구조: 데이터 요소 각각을 저장하고 찾는 연산에 특화된 구조를 갖는 값들의 모음

 

- 특징

1. 각각의 요소들로 분해될 수 있음

2. 요소들의 배치는 접근 방법에 영향을 미침

3. 배치와 접근 방법은 캡슐화될 수 있음

 

- 복합 자료구조: 하나의 변수 아래에 여러 요소의 모음을 저장하는 구조

 ---> 개별 요소에 접근할 수 있도록 함

ex) 배열(Array), 클래스(Class), 구조체(Struct)

 

*Class/Struct

- members/fields라 불리는 서로 다른 자료형의 요소를 포함할 수 있음

- 온점(.)이 변수 이름과 멤버 식별자 사이에 쓰임 ---> 개별 멤버에 접근

- 같은 타입의 다른 변수에 할당하거나(추가 학습 필요)

함수의 파라미터로 전달되거나

함수의 리턴 값으로 반환될 때 사용될 수 있음 


4. 참고

https://engineerinsight.tistory.com/313

https://sirius7.tistory.com/5

 

[자료구조] - 4. 추상자료형, 리스트 ADT

추상자료형, 리스트 ADT 추상자료형(abstract data type, ADT): 데이터구조의 추상형 ADT는 다음을 명세 1. 저장된 데이터 2. 데이터에 대한 작업들 3. 작업 중 발생 가능한 에러 상황들 예: 주식거래 시스

sirius7.tistory.com

 

[자료구조] ADT(Abstract Data Type)란?: 배열, 스택, 큐, 집합, 맵, 트리, 우선순위 큐의 ADT와 자바에서

Computer Science 모아보기 👉🏻 https://github.com/seoul-developer/CS GitHub - seoul-developer/CS: 주니어 개발자를 위한 전공 지식 모음.zip 주니어 개발자를 위한 전공 지식 모음.zip. Contribute to seoul-developer/CS develo

engineerinsight.tistory.com

https://namu.wiki/w/%EC%B6%94%EC%83%81%EC%A0%81%20%EC%9E%90%EB%A3%8C%ED%98%95

 

추상적 자료형

위키백과의 설명(영문) Abstract Data Type, ADT. 자료 자체의 형태와 그 자료에 관계된 연산들을

namu.wiki

https://coldpresso.tistory.com/15

 

객체와 OOP의 4가지 특징

1. 객체란? - 객체란 현실 세계에서 실재하는 모든 "대상"을 "변수"(상태/속성)와 "함수"(행동)로 추상화 시킨 개념이다. * 여기서 추상화는 대상의 본질적인 특징을 추출하여 표현한 것이라고 이해

coldpresso.tistory.com