본문 바로가기

웹 개발/Java

[Web_JAVA] 29

● 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()); 
		
	}
}

 

결과

 

 

 

 

실습(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]);
		}
		
	}
}

 

결과

 

 

 

 

실습(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);
		
	}
}

 

결과

 

 

- 50뒤에 500 삽입(단, 50이 있을 때에만 삽입한다.)

※ 위의 코드에서 main 메소드 안에 이어서 작성했을 때의 결과이다.

if(datas.contains(50)) {

	// 50 뒤에 추가해야 하므로 +1을 해준다.
	datas.add(datas.indexOf(50) + 1, 500);
}

System.out.println(datas);

 

결과

 

 

 

'웹 개발 > 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