java.util.Vector의 자식 클래스(java.util.List의 모든 기능 사용할 수 있다.)
* 주의 : 부모의 method는 사용하지 않는다.
LIFO(Last Input First Output)를 구현한 클래스.
대상이 쌍히다가 위로 넘치는 StackOverFlowError 가 발생할 수 있다.
history를 사용할 때.
1. 생성) - 자식 클래스로 생성
Stack<Item\> stack = new Stack<Item\>();
2. 값 할당
stack.push(값);
3. Stack이 비었는지 확인
stack.empty() - 비었으면 true, 존재하면 false
4. 스택에서 값얻기
stack.pop() - 얻어진 값은 사라진다.
11개의 행이 자동 생성. 동기화 가능. 속도가 느림.
16개의 행이 자동 생성. 동기화 불가능. 속도가 빠름.
1. 생성
Map<K, V> map = new 구현클래스<K, V>(); //K - key, V - value
Map<String, String> map = new HashMap<String, String>();
2. 값 추가
* 값(entry(키와 값의 쌍))은 **순서대로 입력되지 않는다.**
* 키가 존재하면 해당 키에 덮어쓴다.
map.put(키, 값);
map.put("java", "완벽한 OOP언어다");
map.put("oralce", "대용량 DBMS다");
map.put("java", "WORA"); //"java"키가 존재하므로 값을 덮어씀. "완벽한 OOP언어다" -> "WORA"(변경)
3. 값 얻기
map.get(키);
데이터형 변수명 = map.get(key); //key에 대한 값이 변수에 할당.
키가 존재하지 않으면, null 반환
4. map에 키가 존재하는지?
boolean 변수명 = map.constainskey(key); //키가 존재하면 true
5. map에 모든 값 얻기(값에 대한 검증)
모든 키를 얻기 : Set<키Generic> set = map.keySet();
//Set : 중복없고, 검색안됨. Set으로 키 찾기
모든 값 얻기 : Iterator<키Generic> ita = set.iterator();
while(ita.hasNext()){
value = map.get(ita.next());
}
5. 맵 값(행 - entry) 삭제
map.remove(key) //키, 값 둘 다 삭제
map.clear(); //전체 삭제
Java Foundation Class
java에서 GUI Application을 제작할 수 있는 클래스들.
(GUI Application : Window용 application)
AWT(Abstract Window Toolkit)와 Swing 두 가지 제공.
AWT :
무거운 컴포넌트 -> 느리다.
지원되는 컴포넌트 수가 적다.
미려하지 않은 컴포넌트.
에러가 많다.
학습의 용이성.
OS에 따라 컴포넌트의 크기와 디자인이 다르다.
java.awt패키지에서 제공
컴포넌트에 이미지를 넣을 수 없다.
Swing :
AWT의 개선판
가벼운 컴포넌트 -> AWT보다 빠름.
지원되는 컴포넌트 수가 많다.
미려한 컴포넌트.
에러가 적다.
학습의 난이도가 있다.
OS가 달라져도 컴포넌트의 크기와 디자인이 동일하다.
javax.swing패키지에서 제공
컴포넌트에 이미지를 넣을 수 있다.
공통점 :
자바 자체로는 .exe파일을 만들 수 없다.
컴포넌트 프로그래밍(윈도우 프로그램을 작성하기 위해 제공하는 구성품 들.) (체크박스, 텍스트필드, 라디오, 버튼, 스크롤바 같은 거)
그래픽성능이 매우 떨어짐.(자바로는 게임 못 만듬.)
Window component, Container component, Component
1. Window Component 상속
public class Test extends JFrame{
/*JFrame를 상속하는 이유 :
Window는 Frame을 올리기 위한 판.
Window를 상속받으면 Frame을 별도로 생성하여 window객체와 has a관계를 설정하고,
설정된 Frame객체에 일반 컴포넌트나 컨테이너 컴포넌트를 배치하여 사용.
하지만, Frame을 상속받으면, Window가 생성되므로 일반 컴포넌트나 컨테이너 컴포넌트를
배치하여 사용.*/
2. 생성자에서 사용자에게 제공할 컴포넌트 생성.
public Test(){
super("타이틀바에 들어갈 메시지");
JButton btn = new JButton("버튼");
JLabel jl = new JLabel("라벨");
3. 컴포넌트를 배치(배치관리자 사용)
add(컴포넌트); - 부모인 java.awt.Container 클래스에서 제공하는 method
4. 윈도우 크기 설정
setSize(넓이, 높이);
5. 사용자에게 보여주기
setVisible(true);
6. 윈도우 종료 처리
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}//Test
}//class
컴포넌트들을 손쉽게 배치하기 위해 제공하는 클래스.
배치관리자 자체는 눈에 보이지 않는다.(non-visual component)
Window Component, Container Component가 배치관리자를 가진다.
java.awt패키지에서 제공(Swing Component는 AWT의 Component와 호환이 된다.)
테두리 레이아웃.
프레임을 동, 서, 남, 북, 가운데로 나누는 레이아웃.
하나의 영역에는 하나의 컴포넌트만 배치가 가능.(컴포넌트의 고유크기가 무시되고, 영역의 크기만큼 증가한다.)
Window Component의 기본 레이아웃.
1. Layout매니저 생성
BorderLayout bl = new BorderLayout();
2. 프레임에 레이아웃 적용.
setLayout(bl);
3. 원하는 영역에 컴포넌트 배치
add("위치", 컴포넌트);
add(컴포넌트, "위치")
* BorderLayout에서 제공하는 문자열 상수(West) 또는 Constant("위치")(BorderLayout.SOUTH)를 사용가능.
1. 윈도우 컴포넌트 상속
public class Test extends JFrame{
public Test(){
super("Layout Manager");
2. 컴포넌트 생성
JButton jbtn = new JButton("버튼"); //버튼이 고유크기로 생성.
3. 배치관리자를 생성, 적용
setLayout(new BorderLayout()); //배치관리자가 적용된다.
4. 컴포넌트 배치
add("North", jbtn); //컴포넌트 북쪽에 버튼 배치.
//배치를 수행하면 버튼의 고유크기는 무시되고, 크기에 맞게 늘어남.
5. 크기 설정
setSize(300,300);
6. 사용자에게 보여주기
setVisible(true);
7. 종료처리
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}//main
}//class
Container Component의 기본 레이아웃(JPanel, JScrollPane)
배치하는 컴포넌트는 고유크기를 유지.
배치하는 순서대로 L -> R 진행하면서 컴포넌트가 배치된다.
1. 배치관리자 생성
FlowLayout fl = new FlowLayout();
2. 배치관리자를 적용
setLayout(fl);
- 생성 & 적용을 한번에 하면,
setLayout(new FlowLayout());
3. 컴포넌트 배치
add(컴포넌트명);
- 윈도우 크기가 변화하면, 컴포넌트의 위치가 변경된다.