데이터와 그 데이터를 조작하는 함수들만 정의하고, 내부 구현은 숨기는 개념.
이를 통해 데이터 구조를 보다 추상적이고 일반적으로 다룰 수 있다.
Stack을 사용할 때 내부적으로 배열로 구현되든, 연결 리스트로 구현되든 상관없이 push(), pop()을 사용하면 된다.Queue 를 배열로 구현했다가 연결리스트로 바꿔도 사용하는 코드(enqueue(),dequeue())는 변하지 않는다.어려운것 같지만, 핵심적으로는 사용자들이 쓰기 편하게 하려고 만들어 놓은 것이라고 이해하면 될 것 같다.
개발자가 자료구조를 직접 구현할 필요 없이 이미 만들어진(표준화된) ADT 기능을 사용하면 더 편하다.
아래에서 알아보겠지만, Stack은 추상 자료형(ADT) 중 하나로, 이를 통해 ADT 개념을 살펴보면 다음과 같다.
push(x) -> 값을 삽입
pop() -> 값을 제거하고 반환
peek() -> 최상위 값만 반환(제거 X)
isEmpty() -> 비어있는지 확인
push()가 내부적으로 배열을 사용하는지, 연결 리스트를 사용하는지 몰라도 되고, 그냥 push(10),push(20)하면 값이 쌓이는 것만 이해하면 된다.✅ 특징
✅ 기능
insert(index, value) -> 특정 위치에 값 삽입
delete(index) -> 특정 위치의 값 삭제
get(index) -> 특정 위치의 값 가져오기
size() -> 리스트 크기 반환
✅ 활용예시
ArrayList<Integer> list = new ArrayList<>();✅ 특징
✅ 기능
push(value) -> 값을 삽입
pop() -> 값을 제거하고 반환
peek() -> 최상위 값만 반환(제거 X)
isEmpty() -> 비어있는지 확인
✅ 활용 예시
Stack<Integer> stack = new Stack<>();(),{},[] 올바른지 확인)✅ 특징
enqueue(value) -> 값 삽입
dequeue() -> 값 제거 및 반환
peek() -> 맨 앞 값 조회 (제거 X)
isEmpty() -> 비어있는지 확인
✅ 활용 예시
Queue<Integer> queue = new LinkedList<>();✅ 특징
✅ 기능
addFront(value) -> 앞쪽에 값 추가
addRear(value) -> 뒤쪽에 값 추가
removeFront() -> 앞쪽 값 제거
removeRear() -> 뒤쪽 값 제거
✅ 활용 예시
Deque<Integer> deque = new LinkedList<>();✅ 특징
insert(value, priority) -> 값 삽입 (우선순위와 함께)
deleteMax() / deleteMin() -> 가장 높은/낮은 우선순위 값 제거
peek() -> 우선순위가 가장 높은 값 조회
✅ 활용 예시
PriorityQueue<Integer> pq = new PriorityQueue<>();✅ 특징
add(value) -> 값 추가
remove(value) -> 값 제거
contains(value) -> 값 포함 여부 확인
union(set2) -> 합집합
intersection(set2) -> 교집합
difference(set2) -> 차집합
✅ 활용 예시
Set<Integer> set = new HashSet<>();✅ 특징
plaintext
put(key, value) -> 키-값 추가
get(key) -> 키에 해당하는 값 반환
remove(key) -> 특정 키 제거
containsKey(key) -> 키 포함 여부 확인
✅ 활용 예시
Map<String, Integer> map = new HashMap<>();