throw
: 예외를 발생시키는 명령어
package ch06;
public class Ch06Ex061 {
public static void main(String[] args) {
// 예외 객체 생성 / 활동 X
new NullPointerException();
System.out.println("after new NullPointerException");
// 예외 객체 생성 및 활동 시작
throw new StringIndexOutOfBoundsException();
// error, throw 이하 코드는 실행 안됨
// System.out.println("after new StringIndexOutOfBoundsException");
}
}
출력 결과
after new NullPointerException
Exception in thread "main" java.lang.StringIndexOutOfBoundsException
at ch06.Ch06Ex061.main(Ch06Ex061.java:9)
throws
: 예외에 대해 try ~ catch 처리를 양도 / 전가
: 현재 예외가 발생한 메소드는 try ~ catch 처리를 하지 않으므로, 해당 메소드를 사용하는 곳이 있다면 try ~ catch 처리 필요
package ch06;
class Ch06Test1 {
public void throwsTest() throws NullPointerException {
throw new NullPointerException();
}
}
public class Ch06Ex062 {
public static void main(String[] args) {
Ch06Test1 test = new Ch06Test1();
try {
test.throwsTest();
} catch (NullPointerException e) {
System.out.println("throws 표현이 있는 메소드는 내부에 예외 처리가 없다.");
}
}
}
출력 결과
throws 표현이 있는 메소드는 내부에 예외 처리가 없다.
return
: 일반적인 사용법 - 메소드에서 수행 결과를 메소드를 호출한 곳으로 전송
: 특별한 사용법 - return; 단독 사용 시, 메소드 종결
Set
: interface - 객체 생성(new) 불가
: 자료 저장 구조에 대한 정의
: 순서 없음
: data 중복 저장 불가
: sub class - HashSet ...
▶ Iterator
: data 저장 객체(List, Set)에 결합하여 data를 검색
→ 1. 데이터 간의 이동
→ 2. 데이터 유무 확인
→ 3. 데이터 추출
: 시작점은 before first, 종착점은 after last
: 데이터를 한 칸씩 이동하며 추출
: 최근 추세는 Generic을 기본적으로 사용
▷ 사용법
: hasNext() - 다음 데이터가 있는지 확인, 반환 type은 boolean
: next() - 데이터 간의 이동 후, 데이터 추출
package ch07;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Ch07Ex05 {
public static void main(String[] args) {
HashSet set1 = new HashSet();
// HashSet의 데이터 저장
set1.add(1);
set1.add(3.14);
set1.add('A');
set1.add(true);
set1.add("hello");
System.out.println("set1 : " + set1);
Iterator iter = set1.iterator();
System.out.print("iter.next() : ");
while (iter.hasNext()) {
System.out.print(iter.next() + " ");
}
}
}
출력 결과
set1 : [1, A, 3.14, hello, true]
iter.next() : 1 A 3.14 hello true
▶ HashSet
: 최근 추세는 Generic을 기본적으로 사용
▷ 기본 사용법
: add(data) - Set에 data 추가
: size() - Set에 저장된 data 개수
: contains(data) - Set에 data가 저장되어 있는지 확인, 반환 type은 boolean
: clone() - Set 복제, 결과 반환 type은 Object
: isEmpty() - Set이 비어있는지 확인, 반환 type은 boolean
: remove(data) - Set 내부에 저장된 data를 삭제
: clear() - Set 초기화
package ch07;
import java.util.HashSet;
import java.util.Set;
public class Ch07Ex04 {
public static void main(String[] args) {
HashSet set1 = new HashSet();
// Set의 데이터 저장
set1.add(1);
set1.add(3.14);
set1.add('A');
set1.add(true);
set1.add(true); // 중복 저장 불가
set1.add("hello");
System.out.println("set1 : " + set1);
// Set에 저장된 데이터 개수
System.out.println("set1.size() : " + set1.size());
// Set에 특정 data가 저장되어 있는지 확인
System.out.println("set1.contains(3.14) : " + set1.contains(3.14));
// Set 복제
Object obj = set1.clone();
HashSet set2 = (HashSet) obj;
System.out.println("set2 : " + set2);
// Set이 비어있는지 확인
System.out.println("set2.isEmpty() : " + set2.isEmpty());
// Set의 data 삭제
set2.remove('A');
set2.remove(true);
System.out.println("after set2.remove A, true : " + set2);
// Set 초기화
set2.clear();
System.out.println("after set2.clear() : " + set2);
}
}
출력 결과
set1 : [1, A, 3.14, hello, true]
set1.size() : 5
set1.contains(3.14) : true
set2 : [1, A, hello, 3.14, true]
set2.isEmpty() : false
after set2.remove A, true : [1, hello, 3.14]
after set2.clear() : []
Map
: interface - 객체 생성(new) 불가
: 자료 저장 구조에 대한 정의
: {key, value} 한 쌍으로 저장 (이름 - 값)
: key에 따라 저장, key에 따라 출력하므로 순서 불필요
: key의 중복 저장 불가 / value의 중복 허용 (key가 같은 경우 마지막 value 값 저장)
: sub class - HashMap ...
▶ HashMap
: 최근 추세는 Generic을 기본적으로 사용
▷ 기본 사용법
: put(key, value) - key에 value 저장
: size() - Map에 저장된 data 개수 파악
: keySet() - Map에 저장된 key
: get(key) - key에 저장된 value 추출
: clone() - Map 복제, 결과 반환 type은 Object
: isEmpty() - Map이 비어있는지 확인, 반환 type은 boolean
: remove(key) - Map에 저장된 key와 value 삭제
: clear() - Map 초기화
package ch07;
import java.util.HashMap;
public class Ch07Ex03 {
public static void main(String[] args) {
HashMap map1 = new HashMap();
map1.put("first", 1);
map1.put("second", 3.14);
map1.put("third", 'A');
map1.put(4, true);
map1.put(4, false);
map1.put(5, "hello");
map1.put(6, 3.14);
// Map에 저장된 data 개수 파악
System.out.println("map1.size() : " + map1.size());
System.out.println("map1 : " + map1);
// Map에 저장된 key
System.out.println("map1.keySet() : " + map1.keySet());
// HashMap에 저장된 value
System.out.println("map1.values() : " + map1.values());
// key에 저장된 value 추출
System.out.println("map1.get(third) : " + map1.get("third"));
// Map 복제, 반환 type은 Object
Object obj = map1.clone();
HashMap map2 = (HashMap) obj;
System.out.println("map2 : " + map2);
// Map이 비어있는지 확인
System.out.println("map2.isEmpty() : " + map2.isEmpty());
// Map data 삭제
map2.remove("third");
map2.remove(5);
System.out.println("after map2.remove thrid, 5 map2 : " + map2);
// Map 초기화
map2.clear();
System.out.println("after map2.clear() map2 : " + map2);
}
}
출력 결과
map1.size() : 6
map1 : {third=A, 4=false, 5=hello, 6=3.14, first=1, second=3.14}
map1.keySet() : [third, 4, 5, 6, first, second]
map1.values() : [A, false, hello, 3.14, 1, 3.14]
map1.get(third) : A
map2 : {third=A, 4=false, 5=hello, 6=3.14, first=1, second=3.14}
map2.isEmpty() : false
after map2.remove thrid, 5 map2 : {4=false, 6=3.14, first=1, second=3.14}
after map2.clear() map2 : {}
List
: interface - 객체 생성(new) 불가
: 자료 저장 구조에 대한 정의
: 순서에 따라 저장, 순서에 따라 출력 (index)
: 저장 내용의 중복 허용
: 길이 개념은 size()
: 저장 index는 0부터 시작, size()-1 에서 종료
: sub class - ArrayList, LinkedList, Vector ...
▶ Enumeration
: Iterator와 동작 방식이 동일
: 데이터 저장 객체와 결합, 검색의 역할을 수행
▷ 사용법
: hasMoreElements() - 다음 데이터가 있는지 확인, 반환 type은 boolean
: nextElements() - 데이터 간의 이동 후, 데이터 추출
package ch07;
import java.util.Enumeration;
import java.util.Vector;
public class Ch07Ex06 {
public static void main(String[] args) {
Vector vec1 = new Vector();
vec1.add(1);
vec1.add(3.14);
vec1.add('A');
vec1.add(true);
vec1.add("hello");
System.out.println(vec1);
Enumeration enu = vec1.elements();
System.out.print("vec1 : ");
// before first에서 after last까지 검색
while (enu.hasMoreElements()) {
System.out.print(enu.nextElement() + " ");
}
}
}
출력 결과
[1, 3.14, A, true, hello]
vec1 : 1 3.14 A true hello
▶ ArrayList
: 최근 추세는 Generic을 기본적으로 사용
▷ 기본 사용법
: add(data) - List 내부에 저장
: size() - List의 길이
: get(index) - List 내부 index에 저장된 데이터 추출
: clone() - List 복제, 결과 반환 type은 Object
: toArray() - List를 Object[]로 변환
: isEmpty() - List가 비어있는지 확인, 반환 type은 boolean
: clear() - List 초기화
: indexOf(data) - List의 앞에서부터 data의 위치를 검색, 첫 위치를 반환
: lastIndexOf(data) - List의 뒤에서부터 data의 위치를 검색, 마지막 위치를 반환
: remove(index) - index 위치에 저장된 데이터 삭제
: remove(data) - List 내부에 저장된 data를 삭제
◎ Object
: 모든 class의 최상위 class
→ 어떤 class를 생성해도 자동 상속
→ Collection API는 Object의 HeteroGeneous Collection
→ ArrayList == Object[] 이므로, ArrayList.clone(), ArrayList.toArray()의 결과값이 Object[]
package ch07;
import java.util.ArrayList;
public class Ch07Ex02 {
public static void main(String[] args) {
// Generic Type
ArrayList<String> listGStr = new ArrayList<String>();
// error, String Type이 아님
// listGStr.add(1);
// listGStr.add(3.14);
// listGStr.add('A');
// listGStr.add(true);
listGStr.add("hi");
ArrayList list1 = new ArrayList();
list1.add(1); // add : data 추가
list1.add(3.14);
list1.add('A');
list1.add(true);
list1.add("hi");
// List 길이
System.out.println("list1.size() : " + list1.size());
// List 내부 데이터 추출
System.out.println("list1.get(0) : " + list1.get(0));
// List 복제, 반환 type은 Object
Object obj = list1.clone();
ArrayList list2 = (ArrayList) obj;
// List의 배열 변환
Object [] objArr = list2.toArray();
System.out.println("objArr[4] : " + objArr[4]);
// List가 비어있는지 확인
System.out.println("list2.isEmpty() : " + list2.isEmpty());
// List 초기화
list2.clear();
System.out.println("list2.clear() after list2.isEmpty() : " + list2.isEmpty());
// List 내부 위치 검색
System.out.println("list1.indexOf('A') : " + list1.indexOf('A'));
System.out.println("list1.lastIndexOf(3.14) : " + list1.lastIndexOf(3.14));
// List 내부 데이터 삭제
System.out.println(list1);
list1.remove(3);
list1.remove(3.14);
System.out.println(list1);
}
}
출력 결과
list1.size() : 5
list1.get(0) : 1
objArr[4] : hi
list2.isEmpty() : false
list2.clear() after list2.isEmpty() : true
list1.indexOf('A') : 2
list1.lastIndexOf(3.14) : 1
[1, 3.14, A, true, hi][1, A, hi]
▶ Vector
▷ 기본 사용법
: add(data) - Vector 내부에 저장
: addElement(data) - Vector 내부에 저장
: size() - Vector의 길이
: capacity() - Vector의 용량
: get(index) - Vector 내부 index에 저장된 데이터 추출
: contains(data) - Vector 내부에 data 값이 저장되어 있는지 확인
: elementsAt(index) - Vector 내부 index에 저장된 데이터 추출
: indexOf(data) - Vector의 앞에서부터 data의 위치를 검색, 첫 위치를 반환
: lastIndexOf(data) - Vector의 뒤에서부터 data의 위치를 검색, 마지막 위치를 반환
: firstElement() - 첫 번째 저장 data 검색
: lastElement() - 마지막 저장 data 검색
: remove(index) - index 위치에 저장된 데이터 삭제
: remove(data) - Vector 내부에 저장된 data를 삭제
: clone() - Vector 복제, 반환 type은 Object
: isEmpty() - Vector 내부에 data가 없는지 확인, 반환 type은 boolean
: toArray() - 배열로 변환
: clear() - Vector 초기화
: insertElementAt(data, index) - Vector의 index 위치에 data 저장
: setElementAt(setData, index) - Vector의 index 위치에 data를 setData로 수정
: remove(index/data) - Vector의 index 위치의 data / 저장된 data 삭제
: removeElementAt(index) - Vector의 index 위치 data 삭제
: removeElement(data) - Vector에 있는 data 삭제
: removeElementAll() - Vector에 있는 모든 data 삭제
package ch07;
import java.util.ArrayList;
import java.util.Vector;
public class Ch07Ex021 {
public static void main(String[] args) {
// Vector(n, m) - 특별한 배열, 처음 생성 시 n칸, 이후 추가로 더 필요할 때 m칸 생성
Vector vec1 = new Vector(5, 5);
vec1.add(1);
vec1.addElement(3.14);
System.out.println("vec1.size() : " + vec1.size());
System.out.println("vec1.capacity() : " + vec1.capacity());
vec1.add('A');
vec1.add(true);
vec1.add("hi");
vec1.add("hi");
System.out.println("vec1.size() : " + vec1.size());
System.out.println("vec1.capacity() : " + vec1.capacity());
System.out.println("vec1.get(3) : " + vec1.get(3));
System.out.println("vec1.contains(\"hi\") : " + vec1.contains("hi"));
System.out.println("vec1.elementsAt(1) : " + vec1.elementAt(1));
System.out.println("vec1.indexOf(\"hi\") : " + vec1.indexOf("hi"));
System.out.println("vec1.lastIndexOf(\"hi\") : " + vec1.lastIndexOf("hi"));
System.out.println("vec1.firstElement() : " + vec1.firstElement());
System.out.println("vec1.lastElement() : " + vec1.lastElement());
Vector vec2 = (Vector) vec1.clone();
System.out.println("vec2.isEmpty() : " + vec2.isEmpty());
Object [] objArr = vec2.toArray();
System.out.println("objArr[1] : " + objArr[1]);
vec2.clear();
System.out.println("after vec2.clear() : " + vec2);
System.out.println("vec1 : " + vec1);
vec1.insertElementAt(777, 2);
System.out.println("vec1 : " + vec1);
vec1.setElementAt("setElement", 2);
System.out.println("vec1 : " + vec1);
vec1.remove(3);
vec1.remove(true);
System.out.println("vec1 : " + vec1);
vec1.removeElementAt(4);
System.out.println("vec1 : " + vec1);
vec1.removeElement("setElement");
System.out.println("vec1 : " + vec1);
vec1.removeAllElements();
System.out.println("vec1 : " + vec1);
System.out.println("vec1.size() : " + vec1.size());
System.out.println("vec1.capacity() : " + vec1.capacity());
}
}
**출력 결과
vec1.size() : 2
vec1.capacity() : 5
vec1.size() : 6
vec1.capacity() : 10
vec1.get(3) : true
vec1.contains("hi") : true
vec1.elementsAt(1) : 3.14
vec1.indexOf("hi") : 4
vec1.lastIndexOf("hi") : 5
vec1.firstElement() : 1
vec1.lastElement() : hi
vec2.isEmpty() : false
objArr[1] : 3.14
after vec2.clear() : []
vec1 : [1, 3.14, A, true, hi, hi]
vec1 : [1, 3.14, 777, A, true, hi, hi]
vec1 : [1, 3.14, setElement, A, true, hi, hi]
vec1 : [1, 3.14, setElement, hi, hi]
vec1 : [1, 3.14, setElement, hi]
vec1 : [1, 3.14, hi]
vec1 : []
vec1.size() : 0
vec1.capacity() : 10
Generic Class
: 일반적인 사용법은 다양한 데이터를 담을 수 있지만, 원하지 않은 데이터가 섞일 수 있는 의도치 않은 상황 발생 가능
→ Generic Type 탄생 배경
: Generic Type - 저장할 수 있는 형태를 제한한 용법
▶다른 글에서 보충
: Object를 상속받아 사용자 정의의 toString()과 equals() 작성 가능
→ 모든 class의 최상위 class - Object
package ch07;
// Object 상속으로 사용자 정의 toString()과 equals() 생성
class Ch07MyClass {
String compareStand;
public Ch07MyClass() {}
public Ch07MyClass(String str) {
compareStand = str;
}
// equals() 메소드를 override > 사용자 정의의 비교문 작성 가능
@Override
public boolean equals(Object obj) {
Ch07MyClass tmp = (Ch07MyClass) obj;
return (this.compareStand == tmp.compareStand);
}
// toString() 메소드를 override > 사용자 정의의 메세지 출력문 작성 가능
@Override
public String toString() {
return "객체에 대한 안내문입니다.\n\"" + compareStand + "\"가 저장된 데이터입니다.\n감사합니다.";
}
}
public class Ch07Ex07 {
public static void main(String[] args) {
Ch07MyClass test1 = new Ch07MyClass("hello");
Ch07MyClass test2 = new Ch07MyClass("hello");
Ch07MyClass test3 = new Ch07MyClass("hello?");
System.out.println("test1.equals(test2) : " + test1.equals(test2));
System.out.println("test1.equals(test3) : " + test1.equals(test3));
System.out.println("test1.toString()");
System.out.println(test1.toString());
}
}
출력 결과
test1.equals(test2) : true
test1.equals(test3) : false
test1.toString()
객체에 대한 안내문입니다.
"hello"가 저장된 데이터입니다.
감사합니다.
: 글 작성
◆ Ch10Test4WriteGUIRe.java
package ch10.ch10test;
import java.awt.Button;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextArea;
import java.awt.TextField;
import ch10.WindowAdapterObject;
public class Ch10Test4WriteGUIRe {
Frame frm;
TextField tf1, tf2;
TextArea ta;
Label lb1, lb2, lb3;
Button btn;
Ch10Test4WriteEventRe event;
public Ch10Test4WriteGUIRe() {
frm = new Frame();
tf1 = new TextField();
tf2 = new TextField();
ta = new TextArea();
lb1 = new Label("Title");
lb2 = new Label("Writer");
lb3 = new Label("Content");
btn = new Button("Save");
event = new Ch10Test4WriteEventRe(tf1, tf2, ta);
}
public void makeGUI() {
frm.setSize(300, 350);
frm.setLayout(null);
frm.setVisible(true);
frm.add(lb1); frm.add(lb2); frm.add(lb3);
frm.add(tf1); frm.add(tf2); frm.add(ta); frm.add(btn);
lb1.setBounds(25, 40, 40, 20);
tf1.setBounds(70, 40, 200, 20);
lb2.setBounds(25, 70, 40, 20);
tf2.setBounds(70, 70, 200, 20);
lb3.setBounds(25, 100, 60, 20);
ta.setBounds(25, 130, 250, 170);
btn.setBounds(225, 310, 50, 20);
setEvent();
}
public void setEvent() {
frm.addWindowListener(new WindowAdapterObject());
btn.addActionListener(event);
}
}
◆ Ch10Test4WriteEventRe.java
package ch10.ch10test;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
public class Ch10Test4WriteEventRe implements ActionListener{
TextField tf1, tf2;
TextArea ta;
ArrayList<BoardRe> list = new ArrayList<BoardRe>();
public Ch10Test4WriteEventRe(TextField tf1, TextField tf2, TextArea ta) {
this.tf1 = tf1;
this.tf2 = tf2;
this.ta = ta;
}
@Override
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if (cmd.equals("Save")) {
BoardRe board = new BoardRe(tf1.getText(), tf2.getText(), ta.getText());
list.add(board);
System.out.println(list);
tf1.setText("");
tf2.setText("");
ta.setText("");
}
}
}
◆ Ch10Test4WriteMainRe.java
package ch10.ch10test;
public class Ch10Test4WriteMainRe {
public static void main(String[] args) {
Ch10Test4WriteGUIRe write = new Ch10Test4WriteGUIRe();
write.makeGUI();
}
}
◆ BoardRe.java
package ch10.ch10test;
public class BoardRe {
String title;
String writer;
String content;
public BoardRe(String title, String writer, String content) {
this.title = title;
this.writer = writer;
this.content = content;
}
@Override
public String toString() {
return "제목 : " + title + ", 작성자 : " + writer + ", 내용 : " + content;
}
}
출력 결과
[제목 : a, 작성자 : b, 내용 : cccc],
[제목 : a, 작성자 : b, 내용 : cccc, 제목 : d, 작성자 : e, 내용 : fff]