관리 메뉴

오버플로

[Java] Stack / autoboxing / unboxing 본문

Java

[Java] Stack / autoboxing / unboxing

NACO 2021. 8. 12. 20:18

 1. Stack 

- Vector의 자식클래스

- LIFO (Last Input First Output)를 구현한 클래스

- is a 관계로 객체화 하지 않음

- 부모가 제공하는 method를 사용하면 Stack의 동작에 맞지 않기 때문에 사용하지 않음

  (add와 get을 사용하게되면 LIFO의 기능을 수행할 수 없으므로)

- Stack이 저장할 수 있는 크기보다 더 많은 값이 입력되면 StackOverflow가 발생함

- Stack의 요소들은 element가 아니라 item이라고 부름

- Stack은 프로그램 내의 history를 저장하게 될 때 사용함

- Stack사용법)

  1) 생성 : Stack<String> stk = new Stack<String>();

  2) 값 할당 : 입력되는 값은 순차적으로 쌓임

                  stk.push(값);

  3) Stack이 비었는지 확인 : stk.empty(); // 비어있을 때 true

  4) Stack에서 값 얻기 : stk.pop(); // 꺼낸 값은 사라짐

 

 2. autoboxing / unboxing 

- JDK1.5에서부터 추가된 기능

- JCF가 Wrapper Class를 Generic으로 사용하고 있을 때, 기본형 데이터형을 직접 할당하거나, 

  얻을 때 JVM이 자동으로 처리하는 일

 

1) autoboxing

- 기본형 데이터형 값을 추가할 때 동작하며, 기본형이 그에 대응하는 Wrapper클래스로 생성되어 할당되는 것

- 사용 : List<Integer> list = new ArrayList<Integer>();

            Generic이 Wrapper Class이므로 객체가 할당되어야하는데 기본형 데이터형이 할당된다.

            > list.add(10); // 기본형 데이터형을 추가하면 아래처럼 Wrapper로 객체화되어 할당됨

            >> list.add(new Integer(10)); // JDK 1.8까지는 괜찮음

            >> list.add(Intefer.valueOf(10)); // JDK 1.9부터 생성자가 비추천이므로 static method 사용

 

2) unboxing

- Wrapper Class가 Generic으로 사용된 JCF에서 값을 얻을 때 동작하며, Wrapper Class가 기본형으로 나오는 것

- 사용 : Integer val = list.get(0); // Wrapper Class로 값을 받음

              int val = list.get(0); // 내부적으로 코드가 int val = ((Integer)list.get(0)).intValue();

 


# 오늘의 코딩 #

- Stack을 이해해보자!

package test;

import java.util.Stack;

/**
 * Stack : LIFO를 구현한 자료구조 - 후입선출
 * Queue : FIFO(First Input First Output) - 선입선출
 * @author user
 */
public class UseStack {

	public UseStack() {
		
		//1. 객체화 : is a 관계의 객체화를 하지 않음 (stack 역할을 하기 위해)
		Stack<String> stack = new Stack<String>();
		
		//2. 값할당 : 부모의 method를 사용할 수 있으나 사용하지 않음
		stack.push("Java");
		stack.push("Oracle");
		stack.push("JSP");
		stack.push("HTML");
		System.out.println(stack);
		
		//3. 값 사용 : stack이 비었는지 확인하고 사용해야 함
		System.out.println(stack.empty()); // 비어있을 때 true
		
		while (!stack.empty()) { //stack이 비어있지 않으면 반복
			System.out.println(stack.pop());
		}//while
		
		System.out.println(stack);
		//Stack은 프로그램안에서 history를 저장할 때 사용
		
		
	}//UseStack
	
	public static void main(String[] args) {

		new UseStack();
		
	}//main

}//class

# 출력 결과 #

[Java, Oracle, JSP, HTML]
false
HTML
JSP
Oracle
Java
[]

 

>> Stack은 LIFO로! 마지막으로 들어간게 가장 먼저 POP 되는 것 확인!! 

 

 

 

'Java' 카테고리의 다른 글

[Java] Layout Manager (배치관리자)  (0) 2021.08.17
[Java] JFC / Swing / Component  (0) 2021.08.15
[Java] JCF - Set, Map  (0) 2021.08.11
[Java] JCF - List / Generic  (0) 2021.08.10
[Java] JCF - List, Set, Map  (0) 2021.08.09
Comments