오늘 진행한 학습 요약
1. Java 문법 종합반 4주차 : 예외처리, 제네릭
- 예외처리
- 오류 및 예외에 대한 이해
- 예외 발생과 try-catch, finally문
- 예외 클래스 구조 이해하기
- Chained Exception
- 타입으로 유연하게 다루기
- 제네릭(Generic)
- Collection
- Wrapper 객체
- 4주차 숙제 제출
2. [CH 2 프로그래밍 기초 개인 과제] Java로 계산기 만들기
- 클래스를 활용하지 않는 계산기
- 주요 코드 작성 내용
- 클래스를 활용하는 계산기
- 주요코드 작성내용
- 트러블 슈팅
학습 정리
1. Java 문법 종합반 4주차 : 예외처리, 제네릭
- 예외처리
- 오류 및 예외에 대한 이해
- 오류(Error)는 일반적으로 회복이 불가능한 문제
- 예외(Exception)는 일반적으로 회복이 가능한 문제
- 현실적으로 코드 레벨에서 할 수 있는 문제 상황에 대한 대응은 "예외 처리"에 속함
- 예외의 종류
- 코드 실행 관점에서의 예외
- 컴파일 에러 : .java파일을 .class파일로 컴파일할 때 발생하는 에러
대부분은 자바 프로그래밍 언어 규칙을 지키지 않아 발생
해결방법은 문법에 맞게 다시 작성 - 런타임 에러 : 프로그램이 실행 도중 맞닥뜨리게 되는 예외
- 컴파일 에러 : .java파일을 .class파일로 컴파일할 때 발생하는 에러
- 예외 처리 관점에서의 예외
- 확인된 예외(Checked Exception) : 컴파일 시점에 확인하는 예외로
반드시 예외처리를 해줘야 함 - 미확인된 예외(Unchecked Exception) : 런타임 시점에 확인되는 예외로
예외처리가 반드시 필요하지 않음
- 확인된 예외(Checked Exception) : 컴파일 시점에 확인하는 예외로
- 코드 실행 관점에서의 예외
- 예외 발생과 try-catch, finally문
- 예외 처리 흐름
- 1. 예외 정의
- 2. 예외 발생 알림
- 3. 사용자는 예외가 발생할 수 있음을 알고 예외를 핸들링
- 예외 정의하기
- 예외 처리 흐름
- 예외 클래스 및 메서드 만들기
class OurBadException extends Exception {
public OurBadException() {
super("위험한 행동을 하면 예외처리를 꼭 해야합니다!"); } }
class OurClass {
private final Boolean just = true;
// 신규 문법 throws!
public void thisMethodIsDangerous() throws OurBadException {
if (just) {
// 신규 문법 throw!
throw new OurBadException();
}
}
}
throws | throw |
메서드 이름 뒤에 붙어 이 메서드가 어떠한 예외사항을 던질 수 있는지 알려주는 예약어입니다. | 메서드 안에서, 실제로 예외 객체를 던질 때 사용하는 예약어입니다. |
여러 종류의 예외사항을 적을 수 있습니다. | 실제로 던지는 예외 객체 하나와 같이 써야 합니다. |
일반 메서드의 return 키워드처럼 throw 아래의 구문들은 실행되지 않고, throw문과 함께 메서드가 종료됩니다. |
public class StudyException {
public static void main(String[] args) {
OurClass ourClass = new OurClass();
try {
// 1. 위험한 메소드의 실행을 "시도" 해 봅니다.
// "시도" 해보는 코드가 들어가는 블럭입니다.
ourClass.thisMethodIsDangerous();
} catch (OurBadException e) {
// 2. 예외가 발생하면, "잡아서" handling 합니다.
// 예외가 발생하는경우 "handling" 하는 코드가 들어가는 블럭입니다.
// 즉 try 블럭 내의 구문을 실행하다가 예외가 발생하면
// 예외가 발생한 줄에서 바로 코드 실행을 멈추고
// 여기 있는 catch 블럭 내의 코드가 실행됩니다.
System.out.println(e.getMessage());
} finally {
// 3. 예외의 발생 여부와 상관없이, 실행시켜야 하는 코드가 들어갑니다.
// 무조건 실행되는 코드가 들어가는 블럭입니다.
System.out.println("우리는 방금 예외를 handling 했습니다!");
}
}
}
- 예외 클래스 구조 이해하기
- 가장 추상적인 "문제"
- 조금 더 구체적인 "오류, 예외"
- 그것보다 더 구체적인 “Checked Exception”, “Unchecked Exception”
- 자바의 Throwable Class
- 1. Object : 모든객체의 원형
- 2. Throwable : 문제상황을 뜻하는 클래스로 Object 클래스를 상속
- 3. 에러(Error) 클래스 : IOError
- 3. 예외(Exception) 클래스 : IOException, RuntimeException
- 2. Throwable : 문제상황을 뜻하는 클래스로 Object 클래스를 상속
- 1. Object : 모든객체의 원형
- Java 예외 리스트
더보기
더보기
더보기
// 출처 : https://programming.guide/java/list-of-java-exceptions.html
java.io
IOException
CharConversionException
EOFException
FileNotFoundException
InterruptedIOException
ObjectStreamException
InvalidClassException
InvalidObjectException
NotActiveException
NotSerializableException
OptionalDataException
StreamCorruptedException
WriteAbortedException
SyncFailedException
UnsupportedEncodingException
UTFDataFormatException
UncheckedIOException
java.lang
ReflectiveOperationException
ClassNotFoundException
InstantiationException
IllegalAccessException
InvocationTargetException
NoSuchFieldException
NoSuchMethodException
CloneNotSupportedException
InterruptedException
산술 예외
IndexOutOfBoundsException
ArrayIndexOutOfBoundsException
StringIndexOutOfBoundsException
ArrayStoreException
ClassCastException
EnumConstantNotPresentException
IllegalArgumentException
IllegalThreadStateException
NumberFormatException
IllegalMonitorStateException
IllegalStateException
NegativeArraySizeException
NullPointerException
SecurityException
TypeNotPresentException
UnsupportedOperationException
java.net
HttpRetryException
SocketTimeoutException
MalformedURLException
ProtocolException
SocketException
BindException
ConnectException
NoRouteToHostException
PortUnreachableException
UnknownHostException
UnknownServiceException
URISyntaxException
java.text
ParseException
java.time
DateTimeException
java.time.zone
ZoneRulesException
- Chained Exception
- 연결된 예외
- 예외는 다른 예외를 유발할 수 있음
- 원인 예외를 새로운 예외에 등록한 후 다시 새로운 예외를 발생시키는데 이를 예외 연결
- 원인 예외를 다루기 위한 메소드
- initCause() : 지정한 예외를 원인 예외로 등록
- getCause() : 원인 예외를 반환
- 연결된 예외
// 연결된 예외
public class main {
public static void main(String[] args) {
try {
// 예외 생성
NumberFormatException ex = new NumberFormatException("가짜 예외이유");
// 원인 예외 설정(지정한 예외를 원인 예외로 등록)
ex.initCause(new NullPointerException("진짜 예외이유"));
// 예외를 직접 던집니다.
throw ex;
} catch (NumberFormatException ex) {
// 예외 로그 출력
ex.printStackTrace();
// 예외 원인 조회 후 출력
ex.getCause().printStackTrace();
}
// checked exception 을 감싸서 unchecked exception 안에 넣습니다.
throw new RuntimeException(new Exception("이것이 진짜 예외 이유 입니다."));
}
}
// 출력
Caused by: java.lang.NullPointerException: 진짜 예외이유
- 타입으로 유연하게 다루기
- 제네릭(Generic)
- 중복되거나 필요 없는 코드를 줄여주는 것
- 타입 안정성을 해치지 않는 것
- 제네릭 문법
// 1.
public class Generic<T> {
// 2.
private T t;
// 3.
public T get() {
return this.t;
}
public void set(T t) {
this.t = t;
}
public static void main(String[] args) {
// 4.
Generic<String> stringGeneric = new Generic<>();
// 5.
stringGeneric.set("Hello World");
String tValueTurnOutWithString = stringGeneric.get();
System.out.println(tValueTurnOutWithString);
}
}
- Collection
- 리스트는 추상적 자료구조로서, 순서를 가지고, 일렬로 나열한 원소들의 모임.
순서가 있고, 중복을 허용한다는 점에서 집합(Set)과 구별 - 배열은 순서를 가지고, 일렬로 특정한 메모리 공간에 나열되어 있기 때문에 특별
- 리스트는 추상적 자료구조로서, 순서를 가지고, 일렬로 나열한 원소들의 모임.
- Wrapper 객체
- 객체 특성을 이용한 추상적인 기능을 사용하려거나,
기본형 값 대신 객체로 저장해야 하거나,
객체로의 “기능”이 필요할 때
>> 원시형 값들을 잠시 객체로 만들어 사용할 수 있음 - 본값을 객체화하는 것을 박싱
- 객체를 다시 기본값으로 만드는 것을 언박싱
- 객체 특성을 이용한 추상적인 기능을 사용하려거나,
Integer num = new Integer(17); // Boxing
int n = num.intValue(); // UnBoxing
Character ch = 'X'; // AutoBoxing
char c = ch; // AutoUnBoxing
- 4주차 숙제 제출
2. [CH 2 프로그래밍 기초 개인 과제] Java로 계산기 만들기
- 클래스를 활용하지 않는 계산기
- 주요 코드 작성 내용
- Case문을 활용한 계산기를 추가하였다.
- 주요 코드 작성 내용
- 클래스를 활용하는 계산기
- 주요코드 작성내용
- 가장 먼저 저장된 결과 인덱스부터 삭제할 수 있도록 기존 코드내용 수정하였다.
- 트러블 슈팅
- Set으로 가장먼저 저장된 결과 인덱스를 삭제할 수 있도록 resultlist.remove(0)을 주어서 0번째 인덱스가 삭제될 수 있게끔 수정하였다.
- 위 코드 수정에 따른 App.java 클래스 SetRemoveResult 값을 수정하였다.
- 주요코드 작성내용