[혼공자] 6주차 (혼공학습단 12기)
혼공학습단 12기는 7/01일부터 8/18일까지 진행하는 스터디 활동입니다.
★ 이번주 공부할 내용
# | 진도 | 기본 숙제(필수) | 추가 숙제(선택) |
6주차 (8/12 ~ 8/18) |
Chapter 10 ~ 11 | p.439 09-2 확인 문제 2번 문제 풀고 과정 설명하기 | java.lang 패키지에 속하는 주요 클래스와 용도를 정리해서 포스팅하기 |
🙋♂️Q&A: 신용권 저자님의 네이버 카페
💻유튜브 강의: 👉전체 강의 목록
혼자 공부하는 자바(개정판)
『혼자 공부하는 자바』가 더욱 풍성한 내용을 담아 돌아왔습니다! 개정판은 기존의 자바 8 & 11 버전은 물론, 최신 버전인 자바 21까지 다룹니다. 자바 21 버전의 강화된 언어 기능을 담은 총 260개
www.youtube.com
이번주 공부할 내용은
· Chapter10 예외 처리
· Chapter11 기본 API 클래스
파트입니다.
예외( Exception )란?
명사
일반적 규칙이나 정례에서 벗어나는 일을 의미합니다.
프로그래밍에서 또한 예외가 있습니다.
· 예외( 例外 ): 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류를 말합니다.
예외에는 일반 예외와 실행 예외 두 가지 종류가 있습니다.
이 둘의 차이점은 컴파일러가 체크를 하냐 하지 않냐에 있습니다.
컴파일 타임에 예외처리 코드가 없다면 "일반 예외"가 발생하게 되고,
"실행 예외"는 런 타임에 갑자기 발생하기 때문에 컴파일 과정에서는 예외 처리 코드가 있는지 검사하지 않습니다.
자주 실행되는 실행 예외로는
NullPointerException : 프로그램이 실행 중에 참조하려는 객체가 null일 때 발생합니다.
ArrayIndexOutOfBoundsException : 자바에서 배열의 인덱스가 범위를 벗어났을 때 발생하는 예외입니다.
NumberFormatException : 문자열을 숫자로 변환하려 할 때, 해당 문자열이 올바른 숫자(숫자로 변환될 수 없는 문자)가 아닐 경우 발생하는 예외입니다.
ClassCastException : 자바에서 클래스 형변환(casting)을 시도할 때, 변환하려는 객체가 변환하려는 타입으로 캐스팅할 수 없는 경우 발생하는 예외입니다.
자바 컴파일러는 소스 파일을 컴파일할 때 일반 예외가 발생할 가능성이 있는 코드를 발견하면 컴파일 타임에 에러를 방생시켜 개발자가 강제적으로 예외 처리 코드를 작성하도록 요구합니다.
그러나 실행 예외는 컴파일러가 체크해주지 않기 때문에 개발자의 경험을 바탕으로 예외 처리 코드를 작성해야 합니다.
런타임 에러는 정말 골치 아픈 거 같습니다...
예외 처리 코드에는
try-catch-finally 블록을 통해 예외 상황을 관리합니다.
try 코드블럭에 예외 발생가능이 있는 코드를 넣고 정상적으로 작동하면 넘어가고, 만약 해당 부분에서 예외가 발생한다면
catch 블럭으로 이동하여 예외 처리 코드를 실행합니다.
그리고 finally 블록의 코드를 실행합니다.
finally 블럭은 생략 가능하지만 try-catch블록에서 return문을 사용하더라도 항상 실행됩니다.
try 블록 내부에는 다양한 예외가 발생할 수 있으니 다중 catch 블록을 사용합니다.
예상되는 예외 상황별로 catch블록을 작성하여 예외 상황을 관리할 수 있습니다.
추가적으로 예외 떠넘기기라고 부르는 throws 키워드가 잇습니다.
예외처리는 try-catch가 기본이지만, 경우에 따라서 메소드를 호출한 곳으로 예외를 떠넘길 수도 있습니다.
throws 키워드는 메소드 선언부 끝에 작성되어 메소드에서 처리하지 않은 예외를 호출한 곳으로 떠넘기는 역할을 합니다.
리턴 타입 메소드이름(매개변수, ···) throws 예외클래스1, 예외클래스2, ··· {
}
이렇게 throws 뒤에 예외 클래스를 나열하는 것이 일반적이지만, throws Exception만으로 모든 예외를 간단히 넘길 수 있습니다.
■ 기본 숙제
#2. 익명 객체를 필드의 초기값으로, 로컬 변수값으로, 매개변숫값으로 대입하는 문제입니다.
package ch09;
public class Anonymous {
Vehicle field = new Vehicle() {
@Override
public void run() {
System.out.println("자전거가 달립니다.");
}
};
void method1(){
Vehicle localVar = new Vehicle() {
@Override
public void run() {
System.out.println("승용차가 달립니다.");
}
};
localVar.run();
}
void mehotd2(Vehicle v){
v.run();
}
}
package ch09;
public class AnonymousExample {
public static void main(String[] args) {
Anonymous anony = new Anonymous();
anony.field.run();
anony.method1();
anony.method2(new Vehicle(){
@Override
public void run() {
System.out.println("트럭이 달립니다.");
}
});
}
}
▶ chapter 10 기본숙제
2번의 정답은 4번 새로운 예외를 발생시키기 위해 사용된다.
throws는 메소드가 특정 예외를 던질 수 있음을 선언하는 데 사용됩니다.
즉, 해당 메소드 내에서 발생할 수 있는 예외를 호출자에게 떠넘긴다는 의미입니다.
기본 숙제가 이번 주 파트와 다른 거 같지만 오히려 좋습니다 ㅎㅎ
우여곡절이 있었지만 이렇게 잘 마무리해서 기분이 좋습니다 ㅎㅎㅎ
같이 공부하신 모든 분들 응원합니다!!!