Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Flutter
- 자바
- 내일배움캠프
- 개인공부
- 부트캠프
- 국비
- 컴퓨터개론
- 개발자블로그
- 프로그래머스
- 99일지
- 개발자스터디
- 중심사회
- 코딩테스트
- Python
- 운영체제
- wil
- MySQL
- AWS
- 99클럽
- java
- 소프트웨어
- Spring
- 스파르타내일배움캠프TIL
- 항해
- 백준
- 컴퓨터구조론 5판
- til
- 스파르타내일배움캠프WIL
- 스파르타내일배움캠프
- 스파르타코딩클럽
Archives
- Today
- Total
컴공생의 발자취
예외처리 본문
728x90
반응형
2024.04.25.(목)
💡 오늘의 학습 키워드
- 4주차 -
오류 & 예외
throws & throw
try ~ catch ~ fianlly
Chained Exception
initCause & getCause
실제 예외 처리
generic
오류 & 예외
- 오류(Error) : 회복이 불가능한 문제
- 예외(Exception) : 회복이 가능한 문제
- 컴파일 에러(확인된 예외) : 문법 오류
- 런타임 에러(미확인된 예외) : 컴파일O -> 프로그램 실행 도중 맞닥뜨리는 예외
throws & throw
- throws
- 메서드 이름 뒤에 붙어 어떤 예외사항을 던질 수 있는지 알려주는 예약어
- 여러 종류의 예외사항 적을 수 있음
- throw
- 메서드 안에서, 실제로 예외 객체를 던질 대 사용하는 예약어
- 실제로 던지는 예외 객체 하나와 같이 사용
- 일반 메서드의 return 키워드와 비슷하게 throw 아래의 구문들은 실행되지 않고 종료
public void thisMethodIsDangerous() throws OurBadException {
// custom logic~!
if (just) {
throw new OurBadException();
}
}
public class OurBadException extends Exception {
public OurBadException() {
super("위험한 행동을 하면 예외처리를 꼭 해야함!");
}
}
try ~ catch ~ finally
: 일단 try해. 그리고 예외가 발생하면 그걸 잡아(catch). 그리고 정상적으로 수행되든, 예외가 발생하든 finally를 수행해.
try {
// 시도할 내용
ourClass.thisMethodIsDangerous();
} catch(OurBadException e) {
System.out.println(e.getMessage());
} finally {
// 무조건 여기는 거쳐요!!!
System.out.println("finally");
}
Chained Exception
- 예외는 다른 예외를 유발할 수 있음
- 예외 연결 : 원인 예외를 새로운 예외에 등록한 후 다시 새로운 예외를 발생시킴
- 여러 예외를 하나의 큰 분류로 묶어 다루기 위해
- checked excepton -> unchecked exception : 코드를 줄이기 위해(포장)
initCause & getCause
- 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: 진짜 예외이유
실제 예외 처리
- 예외 복구 : 최소한 대응 / 자주 사용X
- 예외 처리 회피
- 예외 전환 : 적절한 방법
public void someMethod() throws IOException { ... }
public void someResponsibleMethod() throws MoreSpecificException {
try {
this.someMethod();
} catch (IOException e) {
throw new MoreSpecificException(e.getMessage());
}
}
generic
: generalized(일반화) + genetic(유전적인)
public class Generic<T(= 타입 변수)> { ... }
Generic<타입> stringGeneric = new 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);
}
}
- 중복되거나 필요없는 코드 줄여줌
- 타입 안정성을 해치지X
- 클래스 or 메서드에 사용 가능
- Generic 클래스 : 원시 타입
- 객체의 static 멤버 사용X
# 타입 변수는 인스턴스 변수로 간주, static은 인스턴스화 필요없이 사용가능한 특성으로 사용 불가능 - 배열 생성X
- 다수 타입 변수 사용 가능
- 와일드 카드
- <? extends T> : T와 그 자손들만 사용가능
public class ParkingLot<T extends Car> { ... }
- <? super T> : T와 그 조상들만 가능
- <?> : 제한 없음
오늘의 궁금증
- Q : 오버로딩 vs 오버라이딩?
- A : 오버로딩 - 자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메소드를 정의
- A : 오버라이딩 - 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의
- 아직 찾아보지 못 한 궁금증(더보기 ..Click!)
더보기
- Q : 참조는 reference인데 자바는 call by value로만 동작하는 것 아닌가?
- Q : wrapper클래스.. 그래서 무슨 기능들을 가지고 있는데?
- Q : Object.equals와 str.equals의 차이? // 요건 공식 문서를 찾아봐야겠어..
- + Q : 원시 타입이 뭐지?
- + Q : generic에는 wrapper 클래스만 들어가나?
- + Q : arrayList vs linkedList?
숙제
- step4 힌트에서도 이해되지 않은 부분
- 생성자 혹은 Setter를 사용하여 연산을 수행할 연산 클래스의 객체를 AbstractOperation 클래스 타입의 필드에 주입합니다.(다형성)
- calculate 메서드에서는 더 이상 연산자 타입을 받아 구분할 필요 없이 주입 받은 연산 클래스의 operate 메서드를 통해 바로 연산을 수행합니다.
- 내가 만들지 못한 부분
- Calculator : Calculator, setOperation
- Main
- 만들지 못한 이유에 대한 고촬
그래서 Calculator의 생성자와 set함수에 대해 알지 못함. 이로인해 Main의 내용을 어떻게 작성할지 감을 못잡음.
하지만, 힌트를 봤음에도 해당 개념을 정확하게 이해하고 활용하지 못함.
-> 생성자와 set함수의 활용법에 대한 이해부족
알고리즘 특강
효율적 알고리즘
- 적은 메모리
- 적은 연산 횟수
코드 카타
* 프로그래머스로 진행
- 알고리즘
- 두 수의 차
- 두 수의 곱
- 몫 구하기
- 나이 출력
- SQL
- 이름이 있는 동물의 아이디
- 역순 정렬하기
- 중복 제거하기
- 동물의 아이디와 이름
오늘의 회고
- 12시간 중 얼마나 몰입했는가?
어제와 비슷하게 몰입한 것 같다.
아니다! 어제보단 더욱 집중할 수 있었던 것 같다.
- 오늘의 생각
아무래도 학습한 것에 있어서 활용을 제대로 하지 못하는 것 같다.
오늘도 4주차를 완강하고나서 숙제를 진행할 때 막히는 부분이 있었다.
3주차에서는 생성자와 getter & setter에 대해 활용이 미숙했고 4주차는 예외처리 활용에 대해 미숙한 것 같다.
아무래도 어떤 식으로 활용하는지 코드를 많이 접해보는 방식으로 접근하는게 좋을 것 같다.
- 내일 학습할 것은 무엇인지
4주차 숙제를 마무리한 후 5주차 강의를 모두 다 들을 예정이다.
또한, 오전 중에 코드 카타와 알고리즘 특강을 들을 것이다.
그러고 시간이 된다면 개인과제를 시작해보려구 한다.
728x90
반응형
'☕ Java' 카테고리의 다른 글
[JAVA] 형변환 정리 (1) | 2024.05.03 |
---|---|
쓰레드 (1) | 2024.04.26 |
접근 제어자부터 다형성까지 (1) | 2024.04.24 |
배열부터 생성자 this까지 (0) | 2024.04.23 |
Java 문법 기초부터 반복문까지 (0) | 2024.04.22 |