퀴즈 피드백 (출력 결과 예상하기)
public class Quiz {
public static void main(String[] args) {
// TODO Auto-generated method stub
test1();
test2();
test3();
test4();
test5();
System.out.println("main end");
}
public static void test1() {
try {
System.out.println("test1 start");
Test t = new Test();
System.out.println(t.toString());
System.out.println("test1 try end");
} catch(Exception e) {
System.out.println("test1 catch");
} finally {
System.out.println("test1 finally");
}
}
public static void test2() {
try {
System.out.println("test2 start");
Test t = null;
System.out.println(t.toString());
System.out.println("test2 try end");
} catch(Exception e) {
System.out.println("test2 catch");
} finally {
System.out.println("test2 finally");
}
}
public static void test3() {
try {
System.out.println("test3 start");
Test t = null;
System.out.println(t.toString());
System.out.println("test3 try end");
} catch(Exception e) {
System.out.println("test3 catch");
}
System.out.println("test3 finally");
}
public static void test4() {
try {
System.out.println("test4 start");
Test t = null;
System.out.println(t.toString());
System.out.println("test4 try end");
} catch(NullPointerException e) {
System.out.println("test4 catch null");
} catch(Exception e) {
System.out.println("test4 catch");
}
System.out.println("test4 end");
}
public static void test5() {
System.out.println("test5 start");
Test t = null;
System.out.println(t.toString());
System.out.println("test5 end");
}
}
class Test {
public String toString() {
return "Test";
}
}
출력 결과
test1 start
Test
test1 try end
test1 finally
test2 start
test2 catch
test2 finally
test3 start
test3 catch
test3 end
test4 start
test4 catch null
test4 end
test5 start
NullPointerExeption 관련 오류메시지..
public static void test2() throws Exception {
// test2를 불렀을 때 Exception이 발생할 수 있다고 알려줌
try {
Sample2 s2 = null;
System.out.println(s2.toString());
} catch(Exception e) {
System.out.println("test2 catch 처리");
}
}
// 일반 예외 | 실행 예외
public class XXXException extends [Exception | RunTimeException] {
public XXXException() { }
public XXXException(String message) {
super(message);
// 부모 생성자를 상속받아서 오류 메세지를 설정해줌
}
}
throw new XXXException();
throw new XXXException("메세지");
void test() {
throw new XXXException("오류닷!");
}
try {
test();
} catch (XXXException e) {
System.out.println("예외 캐치");
}
getMessage : 왜 예외가 발생했는지에 대한 간단한 설명 포함
printStackTrace() : 예외 발생 코드를 추적해서 전부 콘솔에 출력, 어떤 예외가 어디에서 발생했는지 상세하게 출력해주기 때문에 프로그램을 테스트하면서 오류를 찾을 때 활용된다
: 자바에서 기본적으로 제공하는 라이브러리(library), 프로그램 개발에 자주 사용되는 클래스 및 인터페이스 모음
클래스 | 설명 |
---|---|
Object | 자바 클래스의 최상위 클래스 |
System | 표준 입력장치(키보드)로부터 데이터를 입력받을 때 사용 |
표준 출력장치(모니터)로부터 출력할 때 사용 | |
자바 가상 머신을 종료시킬 때 사용 | |
쓰레기 수집기를 실행 요청할 때 사용 | |
Class | 클래스를 메모리로 로딩할 때 사용 |
String | 문자열을 저장하고 여러가지 정보를 얻을 때 사용 |
Wrapper | 기본 타입의 데이터를 갖는 객체를 만들 때 사용 |
문자열을 기본 타입으로 변환할 때 사용 | |
입력값 검사에 사용 | |
Byte, Short, Character, Integer, Float, Double, Boolean |
: 자바의 최상위 부모 클래스로, 다른 클래스를 상속하지 않으면 java.lang.Object를 상속
: Object의 메소드는 모든 클래스에서 사용 가능
equals() : 기본적으로 == 연산자와 동일한 결과 리턴(번지 비교) => 객체의 값을 비교하기 위해서는 값만을 비교하는 방식으로 오버라이딩해서 사용해야함
hashCode() : 해시코드란 객체 식별을 위한 하나의 정수값으로 객체의 메모리 번지를 이용해서 해시코드를 만들어 리턴한다 => 개별 객체는 해시코드가 모두 다르다 => 때문에 값만을 비교하기 위해서 오버라이딩해서 사용해야 함
toString() : 객체의 문자 정보를 리턴하는 메소드
: Wrapper 객체란 기본 타입(byte, char, short, int, long, float, double, boolean) 값을 내부에 두고 포장하는 객체
기본 타입 | 포장 타입 |
---|---|
byte | Byte |
char | Char |
short | Short |
int | Int |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
boxing과 unboxing
boxing : 기본 타입의 값을 포장 객체로 만드는 과정
unboxing : 포장 객체에서 기본 타입의 값을 얻어내는 과정
boxing : 생성자 or valueOf 이용
// 기본 타입의 값을 줄 경우
Byte obj = new Byte(10);
Integer obj = Integer.valueOf(1000);
// 문자열을 줄 경우
Byte obj = new Byte("10");
Integer obj = Integer.valueOf("1000");
ex. byte
num = obj.byteValue();
ex. char
ch = obj.charValue();
: byte[] 배열을 문자열로 변환하는 생성자를 가짐
리턴타입 | 메소드명(매개변수) | 설명 |
---|---|---|
char | charAt(int index) | 특정 위치의 문자리턴 |
boolean | equals(Object anObject) | 두 문자열을 비교 |
리턴타입 | 메소드명(매개변수) | 설명 |
---|---|---|
byte[] | getBytes() | byte[]로 리턴 |
byte[] | getBytes(Charset charset) | 주어진 문자셋으로 인코딩한 byte[]로 리턴 |
리턴타입 | 메소드명(매개변수) | 설명 |
---|---|---|
int | indexOf(String str) | 문자열내에서 주어진 문자열의 위치를 리턴 |
int | length() | 총 문자의 수를 리턴 |
리턴타입 | 메소드명(매개변수) | 설명 |
---|---|---|
String | replace(CharSequence target, CharSequence replacement) | target 부분을 replacement로 대치한 새로운 문자열을 리턴 |
String | substring(int beginIndex (, int endIndex)) | beginIndex 위치에서 끝(endIndex)까지 잘라낸 새로운 문자열을 리턴 |
String | toLowerCase() | 알파벳 소문자로 변환한 새로운 문자열을 리턴 |
String | toUpperCase() | 알파벳 대문자로 변환한 새로운 문자열을 리턴 |
String | trim() | 앞뒤 공백을 제거한 새로운 문자열을 리턴 |
String | valueOf(int i) | 기본 타입값을 문자열로 리턴 |
valueOf(double d) |
: 인덱스로 관리, 중복해서 객체 저장 가능(ArrayList, Vector, LinkedList)
기능 | 메소드 | 설명 |
---|---|---|
객체추가 | boolean add(E e) | 주어진 객체를 맨끝에 추가 |
void add(int index, E element) | 주어진 인덱스에 객체를 추가 | |
set(int index, E element) | 주어진 인덱스에 저장된 객체를 주어진 객체로 바꿈 | |
객체검색 | boolean contains(Object o) | 주어진 객체가 저장되어 있는지 여부 |
E get(int index) | 주어진 인덱스에 저장된 객체를 리턴 | |
isEmpty() | 컬렉션이 비어 있는지 조사 | |
int size() | 저장되어있는 전체 객체수를 리턴 | |
객체삭제 | void clear() | 저장된 모든 객체를 삭제 |
E remove(int index) | 주어진 인덱스에 저장된 객체를 삭제 | |
boolean remove(Object o) | 주어진 객체를 삭제 |
: 초기 용량 10, 용량 초과하면 자동으로 늘어남 (고정 가능)
: 객체가 제거 되면 그 뒤의 인덱스들이 한칸씩 당겨짐
: 전체 객체 대상으로 한 번씩 반복해 가져오는 반복자(Iterator) 제공
+ 인덱스로 객체를 검색해서 가져오는 메소드 XXXXX
기능 | 메소드 | 설명 |
---|---|---|
객체추가 | boolean add(E e) | 주어진 객체를 저장, 객체가 성공적으로 저장되면 true를 리턴하고 중복 객체면 false를 리턴 |
객체검색 | boolean contains(Object o) | 주어진 객체가 저장되어 있는지 여부 |
isEmpty() | 컬렉션이 비어 있는지 조사 | |
Iterator <E> iterator() | 저장된 객체를 한번씩 가져오는 반복자 리턴 | |
객체삭제 | void clear() | 저장된 모든 객체를 삭제 |
boolean remove(int index) | 주어진 객체를 삭제 |
Set<E> mySet = new HashSet<E>();
특징
: 동일 객체 및 동등 객체는 중복 저장하지 않음
동등 객체 판단 방법
ex. 한 문장 안에 들어 있는 알파벳 수 구하기
=> HashSet을 만들어서 문장의 각 인덱스의 위치에 있는 값이 띄어쓰기가 아닐 경우에 안에 넣어준다 (중복되는 값은 들어가지 않음)
String str = "Returns a completion of the value and message";
Set<String> myStrSet = new HashSet<String>();
for (int i = 0; i<str.length(); i++) {
if (str.charAt(i) != ' ') {
String target = String.valueOf(str.charAt(i)).toLowerCase();
myStrSet.add(target);
}
}
기능 | 메소드 | 설명 |
---|---|---|
객체추가 | V put(K key, V value) | 주어진 키와 값을 추가, 저장이 되면 값을 리턴 |
객체검색 | boolean containsKey(Object key) | 주어진 키가 있는지 여부 |
boolean containsValue(Object value) | 주어진 값이 있는지 여부 | |
Set<Map.Entry<K,V>> entrySet() | 키와 값의 쌍으로 구성된 모든 Map.Entry객체를 Set에 담아서 리턴 | |
V get(Object key) | 주어진 키의 값을 리턴 | |
boolean isEmpty() | 컬렉션이 비어 있는지 여부 | |
Set<K> keySet() | 모든 키를 Set 객체에 담아서 리턴 | |
int size() | 저장된 키의 총 수를 리턴 | |
Collection<V> values() | 저장된 모든 값 Collection에 담아서 리턴 | |
객체삭제 | void clear() | 모든 Map.Entry(키와 값)를 삭제 |
V remove(Object key) | 주어진 키와 일치하는 Map.Entry 삭제, 삭제가 되면 값을 리턴 |
Map<K(키), V(값)> map = new HashMap<K(키), V(값)>();
ex. 한 문장 안에서 사용된 알파벳들의 개수 구하기
=> HashMap을 만들어서 사용된 알파벳을 key값으로, 카운트를 값으로 갖는 객체를 넣어준다. 검색했을 때 알파벳 key가 이미 존재하는 경우, 기존의 값을 불러와서 +1 해주는 방식으로 카운트 해준다.
String str = "Returns a completion of the value and message";
Map<String, Integer> myStrMap = new HashMap<String, Integer>();
for (int i = 0; i<str.length(); i++) {
if (str.charAt(i) != ' ') {
String target = String.valueOf(str.charAt(i)).toLowerCase();
if(myStrMap.containsKey(target)) {
myStrMap.put(target, myStrMap.get(target) + 1);
} else {
myStrMap.put(target, 1);
}
}