일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- transient
- 상속
- statement
- swing
- 조회
- Connection
- stream
- Join
- where
- DB연동
- driver
- 자바
- Annotaion
- 다이얼로그
- JDBC
- 예외처리
- Transaction
- Reader
- DB
- Oracle
- Serializable
- InputStream
- java
- array
- select
- set
- 16bit
- 오라클
- 8bit
- 난수
- Today
- Total
오버플로
[Java] Stack / autoboxing / unboxing 본문
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 |