TIL_240220

라미·2024년 2월 20일

TIL

목록 보기
19/25
post-thumbnail

오늘 목표


예외처리

오류 및 예외 처리
throw & throws


🐥Error vs Exception

Error : 회복이 불가능 하다
Exception : 회복이 가능하다

try ~ catch ~ finally

try{
    // 예외가 예상되는 구문을 시도해 볼 곳
}catch(Exception e){
    // try 문에서 예외가 발생한다면, 예외에 해당되는 catch 문이 수행
}finally{
    // 예외가 발생해도 안해도 수행 될 문장
}

🐥CheckedException vs UncheckedException

CheckedException : 예외처리를 필수로 해줘야 한다.(컴파일 시 발생)

  • Exception 클래스를 상속받은 클래스들(RuntimeException 클래스를 상속받지 않은 클래스들)
    UncheckedException : 예외처리를 필수로 해주지 않아도 된다.(런타임 과정에서 발생)
  • RuntimeException 클래스를 상속받은 클래스들

🐥예외 클래스의 상속 관계

Throwable class : Object 클래스를 제외한 예외클래스의 최상위 클래스

  • Error class
  • Exception class : CheckException (RuntimeException 상속 x, Exception 만 상속 받는 클래스들)
    • RuntimeException class : UncheckedException (Exception Class도 상속받음)

throw 와 throws

throw : 강제로 예외를 발생시킨다
throws : 메서드에 예외를 선언

Chained Exception

여러 가지 예외를 하나의 큰 분류릐 예외로 묶어서 다루기 위해
checked exception을 unchecked 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: 진짜 예외이유

🐥예외 처리 방법

예외 복구하기

  • try-catch로 예외를 처리하고 프로그램을 정상 상태로 복구하기
  • 자주 사용하지 않는다

예외 처리 회피하기

  • 다 throws 로 예외를 흘려보낸다.

예외 전환하기

public void someMethod() throws IOException { ... }

public void someResponsibleMethod() throws MoreSpecificException {
		try {
			this.someMethod();
		} catch (IOException e) {
			throw new MoreSpecificException(e.getMessage()); // 예외를 다른 예외로 전환해줌
		}
}
  • 예외처리에 더 신경쓰고싶은 경우나, RuntimeException 처럼 일괄적으로 처리하기 편한 예외로 던지고 싶은 경우 사용한다.

Generic(제네릭)

🐥제네릭이란?

클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법, <> 안에 데이터 타입을 지정한다.
ex) ArrayList

🐥제네릭 클래스

public class Generic<T>{...}
Generic,ArrayList<> 와 같이 제네릭을 사용한 클래스, 원시 타입 이라고 한다.
제네릭 사이 변수 T : 타입 변수

🐥제네릭의 제한

객체의 static 멤버에 사용 할 수 없다.

  • 타입 변수는 인스턴스 변수로 간주.
  • 제네릭 배열을 생성 할 수 없다.

🐥제네릭 문법

  1. 다수의 타입변수를 사용 할 수 있다.
public class Generic<T, U, E> {
    public E multiTypeMethod(T t, U u) { ... }
}

Generic<Long, Integer, String> instance = new Generic();
instance.multiTypeMethod(longVal, intVal);
  1. 상속과 타입의 관계는 그대로 적용된다
  2. 와일드 카드로 제네릭의 제한을 구체적을 정할 수 있다.
    1. : T와 그 자손들만 사용 가능
    2. : T와 그 조상들만 가능
    3. : 제한 없음
  3. 메서드 스코프로 제네릭을 별도 선언할 수 있다.
    1. 제너릭 클래스의 타입변수와 제너릭 메서드의 타입변수는 같은 변수명이라도 다른 변수이다.

Wrapper 객체


Spring

위기 봉착, 컨트롤러 어노테이션 왜 안생길까?
바보처럼 라이브러리 추가할때 spring web을 추가 안해줘서 따로 build.gradle에 추가해줬다

postman : 개발된 API를 테스트하여 문서화 또는 공유 할 수 있도록 해주는 플랫폼.
Workspaces - My Workspace - New - HTTP 클릭 - 통신방식 선택,input 창에 주소줄 넣기

내장 톰캣 기본 PORT : 8080

HTTP

데이터를 주고 받는 양식을 정의한 통신 규약 중 하나
1. Browser 요청(Http request) -> Server -> 응답 Browser(Http response)
2. 웹페이지 - 개발자도구 - 네트워크 탭

3. Headers
3. 1. General / Request Headers : 서버에 요청하는 request 데이터
- Status Code : Http 상태코드 / 세자리의 숫자로 이루어짐
- 1xx : 요청이 수신 됨, 현재 처리 중임을 나타 냄, 주로 서버와 연결상태를 확인하기 위한 용도로 사용
- 2xx : HTTP 요청이 성공적으로 처리되었음을 나타냄
- 3XX : Client 가 추가적인 조치를 필요로 할때, 주로 페이지 이동 (redirection)
- 4xx : client에 오류가 있을때 사용 됨. 잘못된 요청, 인증오류 등에 사용(페이지 없음 ㅡㅡ)
- 5xx : 서버에 오류가 발생했음을 나타냄, 서버 내부의 오류, 서버의 과부하
3. 2. Response Headers : 서버가 웹페이지 데이터와 함께 보낸 추가적인 데이터
4. Response 탭 : 서버에서 브라우저로 반환해준 웹 페이지를 그려주기 위한 데이터
1. Payload (= 데이터,실제데이터)
- GET method를 제외하곤 모두 Payload를 보낼 수 있다 -> HTTP에서의 약속


오늘 목표로 했던 것 중 하나만 했다...아무래도 목표잡고 한게 처음이라 얼마나 할 수 있는지 몰랐던 것 같다 하하하하하하핳....하하하 내일은 오늘보다 줄여서 해야지 일단 내일의 계획도 오늘 짜본다!

240221 공부 할 것

주말 혹은 계획대로 다 들은 후 시간이 된다면 할 것

  1. 서버, 네트워크, 통신에 대하여 정리하기
  2. gradle에 대하여 간략하게 정리하기
  3. spring과 spring boot에 대하여 정리(spring boot가 왜 나오게 됐는지)

0개의 댓글