다양한 종류의 객체, 데이터를 처리할 수 있도록 클래스, 인터페이스, 메서드를 정의하는 기법
제네릭(Generic)은 클래스나 메서드에서 사용할 데이터 타입을 미리 지정하는 대신, 나중에 사용할 때 타입을 지정할 수 있도록 하는 기법입니다. 이는 코드의 재사용성을 높이고, 컴파일 시 타입 안전성을 보장합니다.
| 특성 | 제네릭 클래스 (Generic Class) | 제네릭 메서드 (Generic Method) |
|---|---|---|
| 선언 키워드 | class ClassName<T> | <T> returnType methodName(T param) |
| 사용 목적 | 다양한 타입을 처리하는 클래스 정의 | 다양한 타입을 처리하는 메서드 정의 |
| 타입 파라미터 위치 | 클래스 이름 옆에 지정 | 메서드 이름 옆에 지정 |
| 타입 파라미터 사용 범위 | 클래스 전체에서 사용 가능 | 메서드 내부에서만 사용 가능 |
| 인스턴스 생성 | new ClassName<Type>() | 메서드 호출 시 타입을 명시하거나 추론 |
| 타입 안정성 | 컴파일 시 타입 체크 가능 | 컴파일 시 타입 체크 가능 |
public class Box<T> {
private T t;
public void set(T t) { this.t = t; }
public T get() { return t; }
}
public <T> void printArray(T[] array) {
for (T element : array) {
System.out.println(element);
}
}제네릭은 Java에서 타입 안전성과 코드 재사용성을 높이는 중요한 기법입니다. 제네릭 클래스와 제네릭 메서드를 통해 다양한 타입을 유연하게 처리할 수 있으며, 컴파일 시 타입 체크를 통해 안전성을 보장받을 수 있습니다. 제네릭을 적절히 활용하면 더 읽기 쉽.고 유지보수하기 쉬운 코드를 작성할 수 있습니다.
public class ClassName<T>{}
public interface InterfaceName<T>{}
| 제네릭 타입 파라미터 | 의미 | 사용 예시 |
|---|---|---|
| T | Reference Type (참조 타입) | 클래스나 메서드에서 일반적인 타입을 나타낼 때 사용 |
| E | Element (요소) | 컬렉션 프레임워크에서 요소를 나타낼 때 사용 |
| K | Key (키) | 맵에서 키를 나타낼 때 사용 |
| V | Value (값) | 맵에서 값을 나타낼 때 사용 |
T (Reference Type): 제네릭 클래스나 메서드에서 일반적인 타입을 나타내기 위해 사용됩니다. 보통 임의의 타입을 지정할 때 사용합니다.
public class Box<T> {
private T t;
public void set(T t) { this.t = t; }
public T get() { return t; }
}
E (Element): 주로 컬렉션 프레임워크에서 요소를 나타내기 위해 사용됩니다. 예를 들어, ArrayList나 Set에서 각 요소의 타입을 지정할 때 사용합니다.
public class ArrayList<E> {
private E[] elements;
public void add(E element) { /* ... */ }
public E get(int index) { return elements[index]; }
}
K (Key): 주로 맵 인터페이스에서 키를 나타내기 위해 사용됩니다. 예를 들어, HashMap에서 각 키의 타입을 지정할 때 사용합니다.
public class HashMap<K, V> {
private K key;
private V value;
public void put(K key, V value) { /* ... */ }
public V get(K key) { return value; }
}
V (Value): 주로 맵 인터페이스에서 값을 나타내기 위해 사용됩니다. 예를 들어, HashMap에서 각 값의 타입을 지정할 때 사용합니다.
public class HashMap<K, V> {
private K key;
private V value;
public void put(K key, V value) { /* ... */ }
public V get(K key) { return value; }
}
제네릭 타입 파라미터는 Java에서 타입을 일반화하고 다양한 데이터 구조를 유연하게 다룰 수 있게 해줍니다. 각 타입 파라미터는 특정 용도에 맞게 사용되어 코드의 가독성과 유지보수성을 높입니다.
내일 하자.
Wrapper Class:
기본자료형을 참조자료형처럼 쓸 수 있게 만든 객체
기본자료형: 모두 소문자로 선언 -> Wrapper 앞 글자만 대문자
기본자료형을 멤버변수로 가지는 참조선언
Why Wrapper: 추가메서드 존재
참조자료형으로 만들면 Java로 많은 걸 할 수 있음(메서드)
intVal 함 쳐봐
집합 <3
HashSet은 HashCode로 비교함
그래서 HashCode 메서드 필요 ㅋㅋ
int intVal 10;
intVal. // 메서드 호출 불가
Integer intVal = 10;
String result = intVal.toString();
System.out.println(result);
//이진수 -> String. Integer라는 Wrapper Class에서 알아서 해줌. 자바 개발자 ㄳ
| 기본 자료형 | Wrapper 클래스 | 기본 자료형을 Wrapper 클래스로 변환 (오토박싱) | Wrapper 클래스를 기본 자료형으로 변환 (언박싱) |
|---|---|---|---|
byte | Byte | Byte byteObj = b; | byte b = byteObj; |
short | Short | Short shortObj = s; | short s = shortObj; |
int | Integer | Integer intObj = i; | int i = intObj; |
long | Long | Long longObj = l; | long l = longObj; |
float | Float | Float floatObj = f; | float f = floatObj; |
double | Double | Double doubleObj = d; | double d = doubleObj; |
char | Character | Character charObj = c; | char c = charObj; |
boolean | Boolean | Boolean boolObj = b; | boolean b = boolObj; |