정리!
예외- 개발자가 처리할 수 있는 영역
에러 - 컴퓨터 하드웨어 오작동 또는 고장으로 인해 실행 오류같은 경우 개발자가 처리할 수 있는 영역x
> 프로그램이 강제되는 것을 막게 하며, 가장 큰 이유는 예외가 발생하지 않도록하는것!

모든 객체의 최상위 부모가 Object! 그러므로 예외도 최상위 부모는 Object!
예외가 발생할 수 있는 구문을 try - catch문에 넣어 예외 처리!
다중 catch문은 순서 중요!!!! 하위 먼저 상위 아래 !!!
finally - 실행문 1.2 중 1이 예외가 처리되면 2 가 처리가 안되고 종료되는데,
무조건 2가 실행되어야한다면?
어떤 예외가 발생하더라도 반드시 실행되야 한다면?
finally 를 이용하여 예외가 발생했던 안했던 무조건 실행!!
요렇게 배웠던 부분들을 한번 더 훑어보는 시간도 가졌어요!! ㅎㅎㅎㅎ
머리속에 정리가 조금 되는거같아요!!!
사용자 정의 예외 클래스 선언
Exception
RuntimeException
두가지의 차이는 컴파일러가 check를 하는가 ? 여부!
throw
throw
차이점도 알아봤지요오
throw뒤에 예외 객체를 써놓을 수 있음 메소드 내에서 예외를 발생시키는되 사용됨
throws 메소드 선언부에서 사용하고 메소드가 처리하지 않은 예외를 던져!!!!! ㅎㅎㅎ
트랜잭션 - 하나의 작업단위
( 작은 작업들이 모인 논리적인 작업단위 )
4가기 작은 작업 중 하나라도 실패하는 과정이 생기면?
데이터의 무결성이 깨지기 때문에 처음으로 되돌아가는 롤백을 실행하게 한다!
자동 리소스 닫기 (try -with -resource )
public static void main(String[] args) {
String filepath = "C:/Users/통마/Java-project/src/test.txt";
try( BufferedReader br = new BufferedReader(new FileReader((filepath)))) {
//close 메소드를 가지고 있는 클래스여야 실행이 됨
System.out.println(br.readLine());
// br.close(); //알아서 실행이 되는것 예외가 이루어져있던 자동으로 처리
//자동리소스 실행
}catch (IOException e){
System.out.println("예외처리 로직");
}
BufferedReader br = null;
// try {
// br = new BufferedReader(new FileReader(filePath));
// System.out.println(br.readLine());
// } catch (IOException e) {
// // 예외처리 로직
// } finally {
// if (br != null) {
// try {
// br.close();
// } catch (IOException e) {
// // 예외처리
// }
// }
// }
}
}
try 문에서 실행되다가 예외가 발생되서 close 문이 실행이 안됐을때, 자동으로 닫아주는 것!
처음엔 finally문에서 close를 실행하였지만
try( BufferedReader br = new BufferedReader(new FileReader((filepath))))
이렇게 작성하면 자동으로 close해준다!
그럼 모든 클래스가 가능할까?
no!!!!!!!!!!
자동리소스닫기를 사용할려면 조건이 있다!
Autocloseable 인터페이스를 구현한 클래스만이 사용가능하다!
제네릭
제네릭이란 데이터의 타입을 일반화한다는것!
-클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법
컴파일 시 미리 타입 검사를 수행하면 장점을 가집니다!!! 그것은!?
1. 미리 타입이 정해지기 때문에 타입 검사나 변환 같은 번거러운 작업 생략 가능
2. 클래스나 메소드 내부에서 사용하는 타입 안정성 높높!!
제네릭을 왜 사용하는가?
제네릭을 사용함으로써 잘못된 타입이 사용되는 문제를 컴파일 과정에서 제거!
List<Youtube> youtubeList = new ArrayList<Youtube>();
youtubeList.add(new Youtube());
youtubeList.add(new DisneyPlus());
이렇게 Arraylist로 선언한 유튭리스트에 유툽객체가 아닌 disneyplus객체를 넣을때
컴파일 에러가 발생한다!
이렇게 제네릭을 사용하면 컴파일과정에서 에러를 발생시키고 제거한다!
제네릭은 클래스와 인터페이스, 메소드를 정의할 때 타입을 파라미터로 사용할 수 있도록 한다.
자바 표준 API문서를 보면 <> 라는 표현이 많기 때문에 이해하지 못하면 문서를 이해하기 어렵다!!
제네릭 타입(class<T>, Interface<T>)
제네릭 타입은 타입을 파라미터로 가지는 클래스와 인터페이스!
클래스와 인터페이스 뒤에 <> 부호가 붙고 타입 파라미터 위치!
< T > 요런거욥!!!!!
그럼 굳이 왜 사용하지?

왜 타입 파라미터를 사용할까?
public class box {
private Object object;
public void set(Object object) {
this.object = object;
}
public Object get() {
return object;
}
}
이렇게 box클래스의 필드타입을 object로 선언했는데 왜?
object는 최상위 부모클래스니깐! 자식객체는 부모타입에 대입 가능하니깐 모든 자바 객체들은 object타입으로
자동 타입 변환되어 저장된다!
| Object object = 자바의 모든 객체; |
일케 ㅎㅎㅎㅎㅎ
위의 코드처럼 set 매개변수 타입을 object를 사용하고 있고
get또한 object 타입으로 리턴하고 있는데
이때, 필드에 저장된 원래 타입의 객체를 얻을려면?
Box box = new Box();
box.set("hello");
String str = (String) box.get();
이렇게 (String) 을 이용하여 강제 타입변환해야 가능하지요!
이렇게 계속 모든 객체를 저장할때 타입 변환되지 발생되지 않도록 하는 방법이!!
제네릭 ㅎㅎ
public class Box<T> {
private T t;
public T get() {
return t;
}
public void set(T t) {
this.t = t;
}
}
타입 파라미터 <T>를사용하여 object타입을 대체하고
T는 box클래스로 객체를 생성할때 구체적인 타입으로 변경된다!
public class Box<String> {
private String t;
public String get() {
return t;
}
public void set(String t) {
this.t = t;
}
}
이렇게 필드 타입이 String으로 변경된다!
set, get역시 String타입의 매개값만 받을 수 있고 리턴할 수있도록 변경!
그렇게 하면? 아까와 같이 강제 타입변환을 하지 않아도 구웃!!!!!
Box<String> box = new Box<String>();
box.set("hello");
String str = box.get();
ㅎㅎㅎㅎㅎㅎ 신기하구멍
이렇게
제네릭이 도입되면서 캐스팅 과정없이 사용가능
하다는 말씀!!!
이렇게 오늘은 예외처리 자동리소스닫기와 전체적으로 예외처리를 정리하면서
복습하는 시간을 가졌는데욥!!
강사님께서 설명을 잘해주셔서 이해는 잘됐지만
역시 코드는
직접적어가면서 연습이 필요할거같아요!
막상 내가 원하는걸 작성하고싶으면
머리가 작동을 안한달까요 ㅎㅎㅋㅋㅋㅋㅋㅋ
설연휴에 이때까지 배운 자바들을 돌아가면서 다시 복습하고
주말 과제까지 해보는걸로!!!!!
오늘도 신기한 제네릭까지 열심히 공부해봤구욥!
내일도 파이팅!!! 내일은 복습 예정 ㅎㅎㅎ
다들 연휴 잘보내세욥!!!

'[4기] 백엔드 개발자 부트캠프 "오르미" ~ing > [4기] 백엔드 개발자 부트캠프 오르미 수업 복습' 카테고리의 다른 글
| 일기) DailyQuiz9 (제네릭) (0) | 2024.02.14 |
|---|---|
| [4기] 44일차 Java ( 제네릭2 ) (2) | 2024.02.14 |
| [4기] 37일차 Java ( 예외처리, 트랜잭션 ) (2) | 2024.02.07 |
| [4기] 36일차 Java ( 예외처리 ) (0) | 2024.02.06 |
| [4기] 32일차 Java ( 메소드 재정의, 추상클래스 ) (0) | 2024.02.02 |