
- Wrapper Class
기본 자료형인 변수를 객체로 사용 가능하게 도와주는 클래스
따라서 기본형 타입의 클래스 타입으로 보면 된다.
위 사진에서 Shoft가 아니라 Short이다.
- Wrapper Class 선언 및 사용
Wrapper 클래스명 객체명 = new Wrapper생성자(값); // 박싱
기본자료형 변수명 = Wrapper객체.intValue(); // 언박싱
Wrapper클래스명 객체명 = 일반자료형 값; // 오토박싱
일반자료형 변수명 = Wrapper객체; // 오토 언박싱
- Wrapper 클래스를 사용하는 이유
- 기본형 타입을 객체로 다루어야 할 때
- 기본형 타입이 아닌 객체로 값을 저장해야 할 때
- 매개변수로 객체를 넘길 때 (특히 Object)
- 객체 간의 비교가 필요할 때
Wrapper 클래스 사용해보기!
package wrapper;
public class WrapperTest {
public static void main(String[] args) {
// int data = 10;
// 박싱
// Integer obj = new Integer(data);
Integer obj = (Integer) 10;
// 언박싱
System.out.println(obj.intValue());
// 10출력
// 오토 박싱, 언박싱
Integer obj2 = 10;
int data2 = obj2;
WrapperTest w = new WrapperTest();
// w.f(data2);
// w.f(obj2);
w.f((Integer)20);
w.f(obj2.intValue());
// 기본자료형 값을 넘기면서 아래의 f()메소드를 호출하고 싶을 때는?
// 박싱 해서 넘기면 박싱해서 맞는 타입의 메소드를 찾아서 매개변수를 넘겨줌
// 반대의 경우에는 언박싱으로 타입을 맞춰줘서 해준다.
w.f(30); // 첫번쨰 f()는 그냥 넘기고, 두번째 f()는 오토박싱 ,
//세번째는 오토박싱, 업캐스팅까지 해줘야함.
}
// 오버로딩가능하기 때문에 같은이름으로 만들어도 상관없다.
void f(int data) {
System.out.println("기본 자료형으로 호출 : " + data);
}
void f(Integer data) {
// 오토박싱
// data = 30;
System.out.println("클래스 타입으로 호출 : " + data);
}
void f(Object obj) {
System.out.println("오브젝트 타입으로 호출 : "+obj);
}
}
- Generic (제네릭)
클래스를 선언할 때 내부에서 자료형을 정하지 않는 기법
사용할 때 (객체를 생성할 때) 객체의 그 자료형을 지정한다.
키워드 | 의미 |
E | Element |
N | Number |
T | Type |
K | Key |
V | Value |
1. 제네릭 클래스
클래스 내부에서 사용될 자료형을 지정한다.
class 클래스명 <키워드> {
내부에서 키워드를 자료형으로 사용가능
}
제네릭 클래스명 < 사용할 자료형> 객체명 = new 제네릭클래스명<>();
객체 내부의 키워드로 작성한 변수들이 전부 사용할 자료형으로 선언된다.
제네릭 클래스 사용해보기!
package generic;
// 제네릭 클래스
public class GClassTest<Aespa>{
Aespa data;
void init() {
System.out.println("가지고 있는 데이터 : " +data);
}
}
package generic;
// 메인 메소드가 존재하는 클래스
public class GenericMain {
public static void main(String[] args) {
GClassTest<String> obj = new GClassTest<>();
obj.data = "에스파는 나야 둘이 될 수 없어";
obj.init();
GClassTest<Integer> obj2 = new GClassTest<>();
obj2.data = 100; // 오토박싱
obj2.init();
2. 제네릭 메소드
메소드 내부에서 사용될 자료형을 지정한다.
<키워드> 리턴타입 메소드명 (자료형 매개변수,...) {
내부에서 키워드를 자료형으로 사용가능
}
제네릭 메소드 사용해보기!
package generic;
// 제네릭 메소드
public class GMethodTest {
<T> T f(T data) {
if (data instanceof Integer) {
System.out.println("정수로 호출");
} else if (data instanceof Double || data instanceof Float) {
System.out.println("실수로 호출");
} else if (data instanceof String) {
System.out.println("문자열로 호출");
} else if (data instanceof Character) {
System.out.println("문자로 호출");
}
return data;
}
}
package generic;
public class GenericMain {
public static void main(String[] args) {
GMethodTest obj = new GMethodTest();
obj.<String>f("Hello");
// 제너릭 메소드들은 보통 내부에서 사용될 자료형을 유추로 알 수 있게 설계되어있다.
// 따라서 호출 시 명시적으로 자료형을 적어주지 않아도 된다.
obj.f(10);
obj.f(10.524);
// 넘기는 매개변수로 구분이 가능하기 때문에 굳이 정해주지 않아도 괜찮음.
}
3. 제네릭 인터페이스
인터페이스 내부에서 사용될 자료형을 지정한다.
interface 인터페이스명<키워드> {
내부에서 키워드를 자료형으로 사용가능
}
- 컬렉션 프레임워크 (Collection Framework)
많은 데이터들을 쉽고 효과적으로 관리할 수 있는 표준화된 방법을 제공하는 클래스 및 인터페이스들의 집합
- 종류
List extends Collection 인터페이스
구현 클래스
ArrayList
LinkedList
Vector
Set extends Collection 인터페이스
구현 클래스
HashSet
TreeSet
- ArrayList
여러 데이터들을 배열을 이용해서 나열해 놓은 구조
컬렉션 클래스들 중 가장 많이 사용되는 클래스이다.
배열을 이용해서 값을 저장한다.
인덱스를 이용해서 배열 요소에 빠르게 접근 가능하지만 크기를 늘리거나 줄이기 위해서
새로운 배열을 생성하고 기존의 값들을 다 옮겨야 하므로 느리다.
배열은 처음에 몇 칸으로 할당할지 고정해야 하지만, ArrayList는 값을 넣는 만큼 자동으로 늘어난다.
ArrayList 사용해보기!
package collection;
import java.util.ArrayList;
public class ArrayTest {
public static void main(String[] args) {
// arrylist로 ardata 선언
ArrayList<Integer> arData = new ArrayList<>();
// ArrayList에 추가된 요소의 개수
System.out.println("arData 크기 : " + arData.size());
// 추가된 값이 없으므로 0 출력
// ArrayList에 요소 추가하기
arData.add(10);
arData.add(20);
arData.add(30);
arData.add(40);
arData.add(50);
// ArratList의 구조 간단하게 확인하기
System.out.println("arData 추가한 값 확인 : " + arData);
for (int i = 0; i < arData.size(); i++) {
// ArrayList에서 요소 가져오기
System.out.println("arData 각 값 확인 : " + arData.get(i));
}
// ArrayList의 요소 수정하기
arData.set(2, 300);
System.out.println("arData 수정한 값 확인 : " + arData);
// ArrayList의 요소 삭제하기
// 매개변수에 정수값을 넘긴다.
// remove(int index)가 호출 : 넘긴 정수를 인덱스로 활용해서 삭제
// 매개변수에 Integer 객체를 넘긴다.
// remove(Object o)가 호출 : 넘긴 객체와 같은 객체를 찾아서 삭제
arData.remove((Integer) 300);
System.out.println("arData 삭제한 값 확인 : " + arData);
}
}
'WEB > JAVA' 카테고리의 다른 글
DAY 14 : 쓰레드, 동기화, 파일 입출력 (0) | 2022.03.13 |
---|---|
DAY 13 : HashSet, HashMap, 빠른 for문 (0) | 2022.02.14 |
DAY 11 : 익명 클래스, 예외 처리, 오브젝트 클래스 (0) | 2022.01.12 |
DAY 10 : 접근 권한 제어자, 추상 클래스, 인터페이스, .... (0) | 2022.01.06 |
DAY 09 : 상속, 다형성, 업캐스팅, 다운 캐스팅 (0) | 2022.01.06 |