● Wrapper class
- 기본 자료형들의 클래스 타입
- 클래스타입 객체 = new 클래스타입(일반타입의 값); // boxing
or 클래스타입 객체 = 클래스타입.valueOf(일반타입의 값);
- 일반타입 변수 = 객체.000Value(); // unboxing(000 : 자료형)
※ JDK4 버전 이상부터는 AUTO를 지원한다.
- 클래스타입 객체 = 일반타입의 값; // auto boxing
- 일반타입 변수 = 객체; // auto unboxing
※ int와 Integer는 다른 타입이다.
● Wrapper Class를 사용하는 이유
- 원시타입(일반타입)을 박싱하면 다양한 메소드를 제공받을 수 있다.
- 여러 일반 타입을 하나의 타입으로 묶기 위해서는 반드시 클래스 타입(Wrapper class)으로 사용되어야 하고,
이 때에는 박싱을 해주어야 한다.
● 알고리즘
- 어떤 문제가 발생되었을 때 해결할 수 있는 절차 혹은 순서
● 자료구조
- 의미 없는 데이터를 하나의 정보로 만들어주는 알고리즘들의 집합
- 수집한 자료를 저장하는 방법
● 컬렉션 프레임워크(Collection Framework) : 자료구조
- 많은 데이터를 쉽고 효과적으로 관리 할 수 있는 표준화된 방법을 제공하는 클래스의 집합
1. List extends Collection // List, Collection : 인터페이스
- List 구현 클래스
(1) Vector
- 용량 관리, 보안성 강화, 처리량 감소
(2)LinkedList
- FILO(First In Last Out)으로 인해 넣을 때는 빨라도 뺄 때에는 상대적으로 느리다.
(3)ArraylList
- 인덱스로 데이터를 관리한다.
- 컬렉션 클래스 중 실무에서 가장 많이 사용되는 클래스이다.
- 배열의 특징인 인덱스를 이용하여 값을 저장하고 관리한다.
- add() : 추가하기
- size() : ArrayList의 길이(사이즈)
- get() : 가져오기
- sort() : 순서대로 정렬
- reverse() : 가운데를 기준으로 반대로 바꿔줌
- shuffle() : 섞기
2. Set extends Collection // Set, Collection : 인터페이스
3. Map
● 배열과 ArrayList의 차이
- 배열 : 길이에 제한을 두어야 할 때 자주 사용된다.
- ArrayList : 몇 개의 데이터가 들어올 지 알 수 없을 때 사용한다.
실습(hashCode())
- hashCode(): 해당 객체의 주소값(메모리상의 주소가 아닌 hash값을 통한 중복없는 값)
import java.util.Random;
public class HashCodeTest {
public static void main(String[] args) {
Random r1 = new Random();
Random r2 = new Random();
String s1 = "ABC";
String s2 = "ABC";
String s3 = new String("ABC");
String s4 = new String("ABC");
String s5 = new String("AAA");
// 메모리상의 주소값은 아니다.
System.out.println(r1.hashCode());
System.out.println(r2.hashCode());
// String 클래스에서는 필드의 주소가 아닌,
// 상수의 주소를 리턴하도록 재정의되었다.
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
System.out.println(s3.hashCode());
System.out.println(s4.hashCode());
System.out.println(s5.hashCode());
}
}
![](https://blog.kakaocdn.net/dn/naT0A/btrvY5damgy/FTtT2NQO1tkukpZspyO0L0/img.png)
실습(Wrapper(1))
- boxing, unboxing
public class WrapperTest {
public static void main(String[] args) {
int data_i = 10;
// boxing
Integer data_I = Integer.valueOf(data_i); // 클래스 타입에 valueOf()를 이용하여 일반타입의 값을 담아준다.
// unboxing
data_i = data_I.intValue(); // 일반타입에 ***Value()를 이용하여 클래스 타입을 담아준다.
}
}
- auto boxing, auto unboxing
public class WrapperTest {
public static void main(String[] args) {
int data_i = 10;
// auto boxing
Integer data_I = data_i; // 클래스 타입에 일반타입을 바로 담아준다.
// auto unnboxing
data_i = data_I; // 일반타입에 클래스 타입을 바로 담아준다.
}
}
실습(Wrapper(2))
- {1, 3.5, 12.5F, 'A', "ABC", true} 6개의 값을 6칸 배열에 담기
public class WrapperTask {
public static void main(String[] args) {
// auto boxing 후 upcasting이 되었다.
// 모든 자료형을 담을 수 있는 클래스는 Object 클래스이다.
Object[] arData = {1, 3.5, 12.5F, 'A', "ABC", true};
for (int i = 0; i < arData.length; i++) {
System.out.println(arData[i]);
}
}
}
![](https://blog.kakaocdn.net/dn/bWBPMS/btrvY5qGhd6/kKkMHIBZbOacjffistaCi0/img.png)
실습(ArrayList)
import java.util.ArrayList;
import java.util.Collections;
public class ArrayListTest<T extends Number>{
public static void main(String[] args) {
// <?> : 제네릭
// 임시로 타입을 선언하여 임시 타입으로 설계한다.
// 따로 다운 캐스팅을 할 필요가 없다.
// 지정할 타입에 제한을 둘 수 있다.
ArrayList<Integer> datas = new ArrayList<>();
// add() : 추가하기
System.out.println("add()------------");
datas.add(10);
datas.add(20);
datas.add(40);
datas.add(50);
datas.add(90);
datas.add(80);
datas.add(70);
datas.add(60);
System.out.println(datas);
// size() : ArrayList의 길이
System.out.println("size()------------");
System.out.println(datas.size());
// get() : 가져오기
System.out.println("get()------------");
try {
for (int i = 0; i < datas.size(); i++) {
System.out.println(datas.get(i));
}
} catch (IndexOutOfBoundsException e) {
System.out.println("칸을 넘었습니다.");
}
// sort() : 순서대로 정렬
System.out.println("sort()------------");
Collections.sort(datas); // up casting
System.out.println(datas);
// reverse() : 가운데를 기준으로 좌우를 바꿔준다, 오름차순을 내림차순으로 바꿔준다
System.out.println("reverse()------------");
Collections.reverse(datas);
System.out.println(datas);
// shuffle() : 섞기
System.out.println("shuffle()------------");
Collections.shuffle(datas);
System.out.println(datas);
}
}
![](https://blog.kakaocdn.net/dn/dQBDz9/btrvZ3lQpSh/tFMiKGOkZsikQ40hbNWAMK/img.png)
- 50뒤에 500 삽입(단, 50이 있을 때에만 삽입한다.)
※ 위의 코드에서 main 메소드 안에 이어서 작성했을 때의 결과이다.
if(datas.contains(50)) {
// 50 뒤에 추가해야 하므로 +1을 해준다.
datas.add(datas.indexOf(50) + 1, 500);
}
System.out.println(datas);
![](https://blog.kakaocdn.net/dn/cYtNPw/btrv0PHIPjd/BSLxkuz7NeM9iKHHKiexbk/img.png)
'웹 개발 > Java' 카테고리의 다른 글
[Web_JAVA] 31 (0) | 2022.03.17 |
---|---|
[Web_JAVA] 30 (0) | 2022.03.16 |
[Web_JAVA] 28 (0) | 2022.03.14 |
[Web_JAVA] 27 (0) | 2022.03.13 |
[Web_JAVA] 26 (0) | 2022.03.12 |