본문 바로가기
JAVA

[JAVA 개념5] 컬렉션 프레임워크1 (개념과 List)

by 자유데이터 2018. 11. 12.
반응형

컬렉션 프레임워크는 아주 중요한 개념이고 양이 많기 때문에 두 번에 걸처 포스팅을 하겠다.



1.컬렉션 프레임워크
:객체를 수집해 저장한다.
:다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미한다.

1)Framework
: 제어권한이 사용자에게 없다.
: 지정된 장소에 지정된 방법으로 내용을 채워야 한다.
2)Library
: 프로그램에서 가져다 쓸 수 있는 API.
: 프레임워크에서 많이 가져다 쓴다.
3)Runtime
: 프로그램이 실행할 수 있는 환경을 말한다. (실행환경)
4)Platform = Framework+Runtime

        **Framework와 Library
            

프레임워크와 라이브러리의 차이점은 제어 흐름에 대한 주도성이 누구/어디에 있는가 이다.
즉, 프레임워크는 전체적인 흐름을 스스로가 쥐고 있으며 사용자는 그 안에서 필요한 코드를 짜 넣지만,
라이브러리는 사용자가 전체적인 흐름을 만들며 라이브러리를 가져다 쓰는 개념이다.
(참고 사이트:: http://webclub.tistory.com/458)


배열은 한 번 정한 크기타입을 바꿀 수 없다. (라이브러리로서 큰 단점이다.)
또한, 객체를 삭제했을 때 해당 인덱스가 비게 되고 나중에 어디 인덱스가 비어있는지 확인해야한다.
따라서, 배열의 단점을 보완한 컬레션 프레임워크를 이용해 객체들을 효율적으로 추가,삭제, 검색할 수 있다. (CRED)

                                                <JCF(Java Collection Framework)의 전제적인 hierarchy>


자주 사용되는 컬렉션을 나타낸 그림으로 java.util 패키지에 포함되어 있다.

list 컬렉션 - 순서를 보장해준다. 중간에 값이 변경되면 순서가 밀리거나 땡겨진다.                                                 
set 컬렉션 - 중복이 허용되지 않는다. 순서를 보장하지 않는다.                                                                                 
map컬렉션 - 이름과 값을 묶어서(key와 value 쌍으로) 저장하여 이름을 통해 찾는다. 따라서 순서가 필요가 없다.


2.List 컬렉션
: 인덱스로 관리 한다.
: 중복해서 객체 저장이 가능하다.

-주요 메소드

기능
메소드
설명
객체 추가
boolean add(E e)
주어진 객체를 맨끝에 추가(인덱스 번호가 없으면 자동)
void add(int index, E element)
주어진 인덱스에 객체를 추가
set(int index, E element)
주어진 인덱스에 저장된 객체를 주어진 객체로 바꿈
객체 검색
boolean contain(Object o)
주어진 객체가 저장되어 있는지 여부
E get(int index)
주어진 인덱스에 저장된 객체를 리턴
isEmpty()
컬렉션이 비어 있는지 조사
int size()
저장되어있는 전체 객체수를 리턴
객체 삭제
void clear()
저장된 모든 객체를 삭제
E remove(int index)
주어진 인덱스에 저장된 객체를 삭제
boolean remove(Object o)
주어진 객체를 삭제

1)ArrayList
예제를 통해 추가하기 제거하기 값 불러오기 등 자세히 알 수 있다.

ex)


-여기서 궁금해진
List<T> list = new ArrayList<>(); 와 ArrayList<T> list = new ArrayList<>(); 의 차이
1. 인터페이스 List 대신에 구현 클래스 ArrayList의 형타입을 알 수 있다면 더 편리하게 사용할 수 있습니다.  (낮게 나는 새가 더 자세히 본다)
2. 구현 클래스 ArrayList 대신에 인터페이스 List를 사용하면 더 많은 형타입을 받아 들일 수 있습니다. 
    (높게 나는 새가 더 멀리 본다.)    (출처: http://yongdev.tistory.com/13 )


2)LinkedList
: 인접참조를 링크해서 체인처럼 관리한다.
: 따라서 특정 인덱스에서 객체를 제거하거나 추가하게 되면 바로 앞뒤 링크만 변경하면 되기 때문에
  빈번한 객체의 삭제와 삽입에 적합하다.

ex)

엄청 큰 시간 차이를 볼 수 있다.

List는 배열과 다르게 전체 배열을 출력하고 싶을때
배열의 이름만 입력해도 된다.
배열은 Arrays.toString(배열이름);


3)Vector
: 멀티 스레드에서 스레드가 동시에 접근할때
  동기화를 통해 안전하게 접근하는 것이 있는데, vector 또한 스레드에 안전한 배열 방식이다.
: vector는 무조건 동기화한다.
: 이해가 안간다면 멀티 스레드를 공부하고 다시 보면 된다.

ex)Board - VectorExample(main)



반응형

댓글