메모장

[멘토씨리즈] 컬렉션 프레임 워크 본문

JAVA/[멘토씨리즈]

[멘토씨리즈] 컬렉션 프레임 워크

Itchild 2024. 4. 9. 13:22
728x90
반응형

 

- 제네릭

자바의 제네릭은 데이터의 타입을 일반화 한다는 것을 의미한다. 클래스나 메서드 정의 시 일반화 하여 사용할 데이터 타입을 컴파일 할때 미리 지정하는 방법 이다. 제네릭을 사용하면 컴파일 할때 타입이 미리 정해지므로 타입 검사나 변환과 같은 번거로운 작업을 생략할 수 있으며 클래스나 메서드 내부에 사용될 데이터 타입의 안정성 높일 수 있다.

제네릭 선언
public class 클래스명<T>{...}
public interface 인터페이스명<T>{...}
 

클래스에 제네릭을 부여하면 해당 클래스를 선언할때 데이터 타입을 부여하게 된다. 그러면 객체를 생성할 때 타입이 지정된 부분이 대체 되어 해당 클래스는 지정된 객체만을 저장할 수 있게 되고 , 따로 타입을 변환할 필요없이 데이터를 출력할 수 있다. 또한 클래스를 사용해 다른 데이터를 저장 하고 싶다면 클래스를 다시 선언하여 원하는 데이터 타입을 부여한 후 사용하면 된다 . 제네릭을 이용하면 하나의 객체로 다양한 데이터를 사용할 수 있다.


ArrayList

 

ArrayList는 가장 많이 사용하는 List 인터페이스의 대표적인 구현 클래스 이다.

List <데이터 타입> list = new ArrayList <데이터 타입>();
        제네릭                 선언객체     제네릭
 
  • ArrayList 데이터 저장

데이터를 추가하려면 add() 메서드를 사용한다. ex ) add(E e), add(int index, E e ) 메서드를 사용

E는 리스트 선언시 지정한 저장 데이터 객체를 의미 !

add() 로 데이터를 삽입하면 기존에 존재하는 마지막 데이터의 뒤에 차례대로 삽입된다.

삽입시에는 index가 부여되며 배열과 마찬가지로 순차적으로 부여 !

원하는 index 위치에 데이터를 삽입할 수 있다. 그러나 연속성 없이 순서를 부여해 삽입하는것은 불가능 !!

ex ) 데이터가 3개 있는 곳에 인덱스가 0,1 ,2 인데 갑자기 4번 인덱스 칸에 삽입 하려고 한다 ? xxx

 

데이터를 변경할 때는 set() 메서드를 사용한다. 변경을 원하는 index위치와 치환할 값 또는 객체를 지정하면 해당 위치의 값이 변경된다.

void set(int index, E value);
 

데이터를 삭제할 때는 remove() 메서드를 사용한다. 단지 데이터만 삭제되는 것이 아니라 해당 위치의 공간 까지 삭제 된다. 원하는 위치의 공간을 삭제 할 수 있고 빈 공백을 메우기 위해 뒤의 데이터들이 앞으로 이동 한다.

 

데이터를 얻을 때는 get() 메서드를 사용한다. 원하는 index 위치에 저장되어 있는 값을 출력 할 수 있다.

ex ) get(int index)

Set

 

Set 컬렉션은 객체의 저장 순서를 저장하지 않는다. List컬렉션은 데이터 저장시 중복을 허용하지만

Set 컬렉션은 데이터의 중복을 허용하지 않는다 . 또한 데이터를 저장할때 순서, 즉 index를 부여하지 않기 때문에, 데이터가 입력된 순서로 출력된다는 보장이 없다.

  • HashSet
Set<E> set = new HashSet<E>();
Set<E> set = new HashSet<>();
 

HashSet 데이터 저장

데이터를 저장 할 때 순서 (index)를 부여하지 않고 , 데이터의 중복을 허용하지 않는다. 즉 , 동일한 값 또는 객체를 허용하지 않는다는 의미 ! 여기서 동일한 객체란 , 꼭 같은 타입의 인스턴스를 의미 하는것은 아니다. HashSet은 데이터를 객체의 hashCode() 값을 호출하여 비교하고 같으면 equals() 메서드를 호출하여 다시 비교해 두 객체가 같음을 증명 합니다 .

HashSet 데이터 삭제

List 컬렉션과 똑같이 remove() 메서드 사용. Set 컬렉션은 index가 존재하지 않으므로 순서에 의한 삭제는 지원하지 않는다.

 

728x90
반응형