02-04 학습&숙제

한강섭·2025년 2월 4일
1

숙제

목록 보기
18/25
post-thumbnail

02-04 화요일 학습! 월말 평가 전 마지막 수업 집중합시다 😎


exception handling

예외의 감지 및 예외 발생 시 동작할 코드 작성 필요!

Object <- Throwable -< Error 계열, Checked exception 개열, Unchecked exception 계열

🚨 Checked , Unchecked exception 중요!!!
대처코드 유무에 따른 컴파일 진행 여부

🔔 예외도 결국에는 객체이다!
예외 발생 -> new XXException -> throw (받아랏) -> 처리할 코드

Throwable의 주요 메서드
public String getMessage()
public Throwable getCause()
public void printStackTrace()

Checked Exception 처리
ex) Class.forName
처리하지 않으면 컴파일 불가

다중 exception handling
try
catch(XXException e)
catch(YYException e)
catch(Exception e)

유의사항
상위 타입의 예외가 먼저 나오면 데드코드 발생 - 컴파일러가 잡아줌

Object
Throwable
Exception
IOException
FileNotFoundException


try~catch~finally

finally 는 예외 상관없이 무조건 실행!

🚨 중간에 return을 만나는 경우에도 finally 블록을 먼저 수행 후 리턴을 실행함!! 중요!!
try문에서 return이 나오면 어떤 코드만 수행될까 생각!

주요 목적 : try 블록에서 사용한 리소스 반납
생성한 시스템 자원을 반납하지 않으면 장래 resource leak 발생 가능 -> close 처리

try-with-resources
try 선언문에 선언된 객체들에 대해 자동 close 호출(finally 역할)
단 해당 객체들이 AutoCloseable interface를 구현할 것

try(리소스 타입1 res1 = 초기화;

주의점!
1. try~with~resources 문장에 하나 이상의 catch 또는 finally가 필요
2. Close 시점 주의! - 자동 생성되는 코드들은 마법이 아니므로 실제로 어떻게 동작되고 있는지 알아야 함


throws 활용

throws 키워드를 통한 처리 위임

method에서 처리해야 할 하나 이상의 예외를 호출한 곳으로 전달
예외가 없어지는 것이 아니라 전달해주는 것!

나를 호출한 곳으로 예외 처리해라고 던짐 ㅎㅎ

main까지 던져버리면 JVM한테까지 던짐

Unchecked exception은 throws가 없어도 던져지고 넘어간다
하지만 누군가는 잡고 catch 해줘야 코드가 돌아간다

Checked exception은 throws로 던진다고 표시 해줘야 함!

🔔 printStackTrace 에서 꼭 확인해야할 정보
1. 어떤 예외인가?
2. 예외 객체의 메시지는 무엇인가?
3. 어디서 발생했는가?

throws는 API가 제공하는 메서드들은 사전에 예외가 발생할 수 있음을 선언부에 명시하고 프로그래머가 그 예외에 대처 하도록 강요

🚨 메서드 재정의 시 조상 클래스 메서드가 던지는 예외보다 부모예외를 던질 수 없다!
자식은 더 큰 사고를 칠 수 없다!

예외 변환
하위 계층에서 발생한 예외는 상위 계층에 맞는 예외로 바꿔서 던져야 한다.


시험 대비 학습

🔔 원래 able은 인터페이스인데 Throwable은 클래스! 그래서 성격이 다름
🔔 예외처리는 Throwable에 다 만들어 져있음 그래서 고자질만 함!
🔔 Throwable의 자식들 Error, Exception
🔔 Exception의 구성
🔔 1. Runtime - unchecked 🚨 외울 것 index, Arithmatic, Format unchecked 3가지
🔔 2. 나머지 - CompileTime 🚨 외울 것 java . io,sql,net . IOEx,SQLEx,RemoteEx checked 3가지
🔔 예외처리 2가지
🔔 1)try catch finally
🚨 조심할 것 3가지 외우기
🔔 1. finally는 자원을 회수할 때 사용 + 무조건 실행됨 try catch에 return이 있어도
🔔 2. catch가 여러개 있을 수 있는데 높은 예외가 위에 있으면 안됨 자식 예외처리 부터
🔔 3. 오버라이딩 접근제한자와 예외처리 상속관계에서 생각하고 해줘야 함
🔔 2)회피 throws - 나를 호출하면 예외 처리 해줘
🔔 + 발생시키기 throw
🚨 switch default문의 위치나 사용 결과문제 많이 나옴!

🚨 set.add(동그라미) 로 똑같은 값을 널으면 두번째것이 적용 안됨
🚨 map.put("a",삼각형) 로 똑같은 key에 넣으면 두번째 것이 적용됨(덮어씀)

🚨 HashSet의 두가지
🚨 TreeSet은 원래는 순서가 없는 데 순서가 있음

🚨 String 을 리터럴 방식으로 생성 VS new로 생성하기
🚨 String a = "Hello"; String b = new String("Hello");
a == b ? a.equal(b) ?? 이것들 다 해보기
Object o1 = new Object("o1");
Object o2 = new String(
String o3 = new String(
o1 instanceof String ?
o1 instanceof Object ?
3번째
String t = "hallo";
void say(String t){
t= "allow"
}
void tello(String t){
t = new String("tallow");
}
sysout(t);

🚨🚨
Vehicle 자식 A,B,C 클래스
V a1 = new A();
B b = (B)a1;
b.내부 메서드
어디서 오류날까?

🚨 abstract 클래스라고 abstract 메서드가 없어도 됨 왜 그럴까
🚨 new 추상 클래스 안됨!

🚨 this와 super는 같이 쓸 수 없다
🚨 생성자에서도 공부!

🚨 클래스는 implements 인터페이스 여러개 가능
🚨 인터페이스는 extends 인터페이스 여러개 가능 다중 상속 인터페이스만

해설

Vehicle a1 = new AVehicle("A");
Stack 영역:

선언 타입인 Vehicle a1이 저장됨
참조 변수만 저장 (메모리 주소를 가리키는 포인터)
지역 변수들이 이곳에 저장됨
메서드가 호출될 때마다 새로운 스택 프레임이 생성됨

Heap 영역:

실제 객체인 new AVehicle("sdf")이 저장됨
객체의 실제 데이터와 인스턴스 변수들이 저장
가비지 컬렉션이 일어나는 영역
동적으로 생성된 객체들이 저장됨

Method 영역 (또는 Class 영역):

Vehicle과 AVehicle 클래스의 정보가 저장됨
클래스의 메서드와 static 변수들이 저장
클래스 로더가 클래스를 로딩할 때 이 영역에 정보를 저장


숙제

월말평가 준비만!
마지막 시험 대비 학습 코드로 쳐보면서 학습하기 중요!!!!!!!!
헷갈리는 개념있으면 claude 활용해서 개념 확실히 잡으면서 공부 ㄱㄱ

profile
2025년 1년동안 기록

0개의 댓글

관련 채용 정보