본문 바로가기

자바/정리

(JAVA)Collection Framework

컬렉션(Collection)이 뭘까.

수집이라는 뜻이 있다는걸 알것이다. 자바에서 컬렉션은 여러 데이터(객체) 들을 모아 놓은 것을 말한다.

 

프레임워크(Framework)는?

어려운 개념일수는 있다. 프레임은 "틀" 이라는 뜻이 있다. 즉, 틀을 정해서 작업하는 것이다. 뭔소리일까.

 

프레임워크는 개발자가 코드를 짤때 규칙들을 정해준다. 이거할때는 이걸 지켜야된다 같은것들 말이다. (안드로이드 핸드폰을 만들때는 하단에 USB-C 타입을 넣어야해.)

 

과거에는 사람들이 자기들 마음대로 규칙없이 프로그램 설계를 하다 보니 다른 사람이 이어서 개발,유지보수 할때는 가독성이 지옥이였다고 한다.

그래서 선배 개발자들이 프레임워크 라는 것을 도입하여 이 기능 쓰고 싶으면 여기에다 넣어 혹은 이 기능 쓰고 싶으면 이것도 추가해 같은 규칙을 만들어 버렸다.

 

그래서 결과적으로 메서드들을 사용하기 좋게 정리해 버렸다.

 

현재 나는 Spring Framework를 공부 하고 있는데 하루에도 정신이 몇번씩 가출하니 자바 개념을 사람들이 확실히 잡아 놨으면 좋겠다.(자바를 복습하면 스프링이 이해가 가는 상황이 많아지다 보니 뭐든 기초가 제일 중요한것 같다.)

 

 

 

참고로 자료구조의 희망이자 자바의 꽃인 컬렉션은 내용이 방대하다 보니 기능들은 하나씩 따로 게시글을 만들어서 게시할 예정이다.

 

이야기가 길어졌지만 이번 게시글에서는 우리는 Collection Framework의 기본 개념을 배울 것이다.

 

컬렉션은 3가지 인터페이스를 정의한다.

 

List

Set

Map

 

하여 이 3가지 인터페이스들을 가지고 컬렉션 클래스에 붙여주면 컬렉션을 사용할수 있게 된다.

 

물론 이것들 말고도 더 있다. 전반적인 구조를 한번 볼까.

 

 

보이는것 처럼 종류가 많다. 구조도를 보다보면 의문이 들것이다.

 

Vector, Stack,HashTable등의 클래스들은 컬렉션프레임워크 이전에 개발되어 사용되던 녀석들이라서 Set,List,Map 이 보이질 않는다. 따라서 사용하는것도 있지만 잘 사용되질 않는것도 있다.

 

우리는 생소할수도 있지만 대표적으로

 

List : ArrayList, LinkedList.

 

Set : HashSet, TreeSet

 

Map : HashMap, TreeMap

 

이 녀석들을 사용할 예정이다.

 

이젠 각자의 특징에 대해 알아보자.

 

List

List를 보면 ArrayList, LinkedList 가 있는데 어떤 느낌이 드는가? 같은 인터페이스를 공유하니 비슷한 기능이 있을것 같지 않은가?

 

예시로 설명하면 주문 리스트가 있다.

 

식당에서 주문 리스트를 만들었다.

 

1번 손님 : 햄버거

2번 손님 : 피자

3번 손님 : 스타벅스 초콜릿 시럽 자바칩 프라푸치노

4번 손님  : 햄버거

 

위와 같이 4명의 손님이 줄서 있다고 하자 그런데 주문 순서는 무조건 다르겠지만 같은 주문을 해서 음식 이름이 같을수는 있다. 그러면 고민도 하지 말고 List 자료형을 써주는 것이다.

 

즉. List 자료형은 순서를 신경쓰고 중복을 허용 한다는 것이다.

 

List도 메서드를 사용한다. 다음과 같다.

 

이건 답이 없으니 외우거나 필요할때마다 찾아 보도록 하자.

 

Set

결과 부터 말하면 Set의 규칙은 순서를 신경 안쓰고 중복을 안한다

 

Set은 주로 수학에서 집합 구할때 쓰는데

한마디로 가방(주머니)이다.

 

우리가 소풍갈때 가방을 싸보자. 가방안에 도시락도 넣을수 있고 물도 넣고 돗자리도 넣을수 있을것이다.

그런데 돗자리를 두개 챙기지는 않을 것이다.(두개 챙기는 분들은 죄송합니다... 예시가 그냥...)

그리고 가방안에 돗자리가 왼쪽에 있던 도시락이 오른쪽에 있던 상관 없을 것이다.(신경쓰시는 분들은 죄송합니다... 그저...)

 

이런 느낌들면 Set을 써라.

집합 구한다? 그러면 그냥 Set을 쓰면 된다. 메서드는 다음과 같다.

 

 

Map

결과 부터 말하면 Map의 규칙은 순서를 신경 안쓰고 중복은 키중복은 안되고 값 중복은 된다.

 

갑자기 새로운 말이 나왔다. 키 중복이랑 값 중복이라니.

 

우리가 네카라쿠베당토직야에 회원 가입을 하는 매우 행복한 상상을 해보자.

내가 15003 번째에 가입하던 362467번째에 가입하던 상관은 없을 것이다.

 

그런데 아이디 중복검사 했을때 회원 아이디가 같으면 이미 다른 회원이 사용중인 아이디 입니다. 라고 경고창 받을 것이다. 그럼 고민도 안하고 다른 아이디 입력할 것이다.

 

그런데 이미 다른 회원이 사용중인 비밀번호 입니다. 라는 경고를 본적이 있는가? 없을 것이다.

 

Map은 이럴때 사용한다. 간단하지 않은가?

 

Map에 사용되는 메서드는 다음과 같다.

 

 

Iterator

갑자기 이상한 녀석이 튀어나왔다. 반복자라는 녀석인데 어렵게 생각하지 말고 값을 읽는 녀석이라고 생각하자.

 

List, Set, Map 의 자료구조는 각자 다르게 만들어져있다. 물론 구조가 다르니 읽는 방법도 다르다.(반대의 경우를 포함하여 List에 있는 메서드가 Set에는 없을수가 있다 get, contains 등) 그런데 List로 만든 자료구조를 Set으로 바꿔봐라 컴퓨터가 읽는 방법도 바꿔야 하지 않겠는가? 그럼 손이 많이간다. 야근하는거다.

 

그래서 프레임워크 표준화가 되어 저 녀석 하나로 해결하는 것이다. 편하다. 직접적인 사용방법은 다음 게시글에서 코드로 설명하겠다. 메서드는 다음과 같다.

 

 

 

 

 

 

열심히 해서 만인이 평등해 지는 스프링에서 살아 남자!

'자바 > 정리' 카테고리의 다른 글

(JAVA)HashSet, TreeSet  (0) 2023.01.03
(JAVA) ArrayList, LinkedList  (0) 2022.12.22
(JAVA)제네릭  (0) 2022.12.13
(JAVA) Object 클래스 toSting(), hashcode()  (0) 2022.12.08
(JAVA) Object 클래스 equals()  (0) 2022.12.08