본문 바로가기
Study/중앙정보처리학원과정

15일차. collection framework(컬렉션 프레임워크) ArrayList

by 얏옹이 2022. 11. 14.
반응형

오전엔 interface...오후엔 드디어 collection framework를 배우기 시작했다.

 

아... 벌써부터 머리엔 지진이 나기 시작한거같고 목덜미에 식은땀이 나는거같고 복통이 밀려오는거같은데...

 

하아.... 여기에 SQL DB연동까지 해서 진행할 생각을 하니 벌써부터 조퇴 마렵....

 

collection framework는 크게 List, Set, Map 3가지로 나뉜다. 강사님께서 각각의 특징을 ★★꼭★★ 암기하라고 하셨는데

 

이를 짚고 넘어가볼까 한다.

 

먼저 List형은 순서가 있는 자료관리, 즉, 선입 선출이다, 우리가 일상생활에서 예를들자면 맛집의 대기표 라던지

 

병원에서 진료대기표를 예로 들수 있겠다. 아 WOW 접속할때 대기열도 여기에 포함될수도 있겠다.

 

먼저 입력된 자료가 순서대로 출력되게 되어있으며, 중복 허용이 가능하다. 병원 진료대기표에 김수철 이라는 사람이 한명일수도 있지만, 동명이인이 있을수 있는것처럼 말이다.

 

List 인터페이스 에는 ArrayList, Vector, LinkedList, Stack, Queue등의 구현클래스가 있다.

 

반면에 Set은 자료가 입력된 순서가 상관이없다, 그리고 중복을 허용하지 않는다. 예를들면 수학의 집합같은 개념이다.

 

로또번호도 Set의 예시가 될수 있을거같다. 

 

집합 A에는 1,3,5,7,9가 있다면 이건 꼭 1,3,5,7,9라고 하지 않아도 된다, 3,5,7,9,1도 A 집합이 맞다. 그리고 B라는 집합에 3,5,7,2,4가 있다면 3,5,7은 교집합이 되면서 A에도 존재하고 B에도 존재하는것이 되기때문에 중복 데이터가 존재하지 않는다.

 

Set인터페이스 에는 HashSet, TressSet등의 구현클래스가 있다. 

 

Set 인터페이스와 List인터페이스는 둘다 공통적으로 Collection 인터페이스의 하위 인터페이스이기때문에

 

Collection 인터페이스에서 선언된 메서드를 공통적으로 사용한다. 이중에 자주 사용하는 메서드는

 

add(), remove(), size() 정도가 되는거같다. add는 문자 그대로 List 자료형에 값을 추가하는 메서드

 

remove는 collection 매개변수에 해당하는 인스턴스가 있으면 제거, size는 배열의 .length와 비슷한 개념으로 List에 포함되어있는 요소(item)의 갯수를 int형으로 반환한다.

 

마지막으로 Map 인터페이스는 특이하게 key와 value 한 쌍(pair)로 이루어져있다.

 

여기에서 key는 고유의 값이라 중복이 불가, value는 중복이 가능하다. 예를들면 이름과 주민번호를 들수 있겠다.

 

이름은 중복이 있을수 있지만 주민번호는 고유의 값이기때문에 중복될수가 없다.

 

오늘 수업했던 ArrayList를 집에서 다시 복습해보았다.

 

 

ArrayList 타입의 list변수에 새 객체를 선언해주었다. 그리고 값을 할당해주지 않았기때문에 자동초기화로 null 처리된다.

 

list.size()로 list안에 요소(item)들을 int타입의 정수로 반환받아 출력해보았다. 지금은 담겨있는게 없기때문에 0이 출력된다.

 

이제 list에 값들을 대입해주자.

 

 

.add(Object)는 add하고 () 괄호 안에 Object 타입이 들어올수있다. Object는 모든 클래스의 최상위 클래스이다.

 

이건 즉, Type에 가리지않고 모든 타입의 자료를 add로 추가해줄수 있다는것이다.

 

위의 사진과 같이 String 문자열, 정수, 실수, Char타입, Boolean타입 다 추가가 가능하다.

 

잘 입력이 되었는지 for문을 이용하여 각 요소들을 출력해주면

 

이렇게 잘 출력된다. 여기서 배열처럼 index의 값을 가져와주는 메소드를 .get을 이용하여 가지고 왔다.

 

클래스간 형변환을 이용하여 추가로 코딩 해보았다.

 

Object 타입으로 저장된 문자열의 글자수? 를 출력해야하는데. Object클래스에는 글자수를 출력해주는

 

length 메소드가 존재하지 않는다. length는 String 클래스에 존재하는데. 이를 사용하기 위해서 

 

Object 타입의 변수에 글자수를 저장한후, 그 변수를 String 클래스 타입으로 다운캐스팅 후에 length로 글자개수를 세어줘야한다.

 

Object와 String 클래스는 상속관계기때문에 강제 다운캐스팅이 가능한점을 이용하여 수업했다.

 

 

 

인덱스5번에 문자열을 추가로 할당해준후 Object 클래스 타입의 strList 변수에 해당 인덱스의 값을 할당해주었다.

 

그리고 그 strList변수를 String 타입으로 강제형변환 해준후에 다시 String 타입의 변수에 담고

 

그 변수를 .length를 이용하여 글자수를 반환받았다.

 

 

이렇게 출력하면 낙타는 혹이 두개요,라는 문자열에 띄어쓰기 포함하여 총 10이라고 출력된다.

반응형