2023. 9. 4. 21:31ㆍJava
제네릭 (Generic)
클래스나 메소드에 사용할 데이터 타입을 여러 참조 자료형을 사용할 수 있도록 하는 것
1) 제네릭을 사용하지 않았을 때
여러 참조 자료형을 사용할 수 있도록 Object 클래스를 사용한다.
public class ObjectBox {
private Object object;
//object만 들어올 수 있는게 아니라 object의 후손들 모두 들어올 수 있다
//ObjectBox는 어떤 Object든 저장할 수 있고, 어떤 Object든 꺼낼 수 있다.
public void add(Object obj){
this.object = obj;
}
public Object get() {
return this.object;
}
public void set(Object obj) {
this.object = obj;
}
}
=> 호출 시 원래 타입으로 변환시키는 번거로운 과정이 필요하다.
ObjectBox string = new ObjectBox<>();
string.set("kim");
String str = (String)string.get();
2) 제네릭을 사용할 때
클래스나 인터페이스 이름 뒤 or 메소드의 리턴 타입 앞에 붙는다.
<T>는 T라는 이름의 제네릭 타입을 선언한다는 의미
public class ObjectBox<T> {
private T object;
public void add(T obj){
this.object = obj;
}
public T get() {
return this.object;
}
public void set(T obj) {
this.object = obj;
}
}
=> 사용하는 시점에 어떤 자료형을 사용할 것인지 지정한다.
=> 사용할 때는 형변환하지 않아도 된다.
ObjectBox<String> string = new ObjectBox<>();
string.set("StringGeneric");
String str = string.get();
장점
- 불필요한 형변환을 제거한다.
- 정해진 타입만 사용하도록 강제 => 컴파일 시 잘못된 타입의 값이 저장되는 것을 막는다.
제네릭이 사용될 때
1. 하나의 타입으로 고정할 때 - 제한
2. 다양한 타입을 호환되게 할 때 - 확장
컬렉션 프레임워크 (Collection Framework)
일정 타입의 데이터들을 하나의 그룹으로 묶어 효율적으로 저장하고, 관리할 수 있는 기능을 제공하는 뼈대
- java.util 패키지에 포함
- List, Queue, Set, Map 등의 인터페이스 제공하며, 이를 구현하는 클래스를 제공한다.
배열은 크기가 고정되어 있는데에 반해, 컬렉션 프레임워크는 가변적인 크기를 갖는다.
데이터 삽입, 탐색, 정렬 등 편리한 API를 제공한다.
1. Collection
컬렉션 프레임워크에서 가장 기본이 되는 인터페이스
하나의 자료를 모아서 관리하는데 필요한 기능을 제공한다.
값이 있지만 순서는 기억하지 못함 (Iterator 를 통해 값 유무 확인)
2. Iterator
자료구조에서 자료를 읽기 위한 목적으로 사용되는 인터페이스
자료의 유무를 확인하는 hasNext()와 자료를 꺼내는 next() 함수로 구성
3. List
순서가 있는 데이터를 사용할 때 쓰임
인덱스로 객체를 관리 -> 저장 시 자동 인덱스 부여 & 인덱스로 객체 검색, 삭제 가능
Collection 상속받음
3-1. ArrayList
List를 인터페이스를 구현하고 있는 대표적인 클래스
길이에 제한이 없어 크기를 조절할 수 있다.
4. Set
중복을 허용하지 않는 자료구조로 중복 값은 마지막 값 하나만 저장됨
set 인터페이스에 저장되는 객체들은 object가 가지고있는 equals()메소드와 hashCode() 메소드를 오버라이딩 해야한다
Collection 상속받음
4-1. HashSet
Set 인터페이스를 구현하므로 순서없이 저장되며 중복 저장하지 않는다.
순서가 없으므로 인덱스로 객체 검색 불가 (get() X) -> forEach()나 iterator로 전체 검색
5. Map
key, value로 구성된 객체를 저장하는 구조
Key값은 중복 불가 - 중복 시 새로운 값으로 대치
Value는 중복 가능
'Java' 카테고리의 다른 글
11. 회원관리 프로그램 (0) | 2023.09.10 |
---|---|
10. 예외처리와 enum (0) | 2023.09.10 |
8. 익명 클래스와 람다식 (0) | 2023.09.04 |
7. 자바 리플렉션 (Reflection) (0) | 2023.09.04 |
6. 불변 객체 (Immutable Object) & Final (0) | 2023.09.03 |