오늘의 학습 키워드

  • 오류 및 예외
  • 예외 발생과 try-catch, finally문
  • 예외 클래스 구조
  • Chained Exception
  • Generic
  • Collection

오류 및 예외

  • 오류
    일반적으로 회복이 불가능한 문제
    시스템 레벨, 환경적인 이유로 발생한다.
    회복이 불가능하다

  • 예외 -> handling
    일반적으로 회복이 가능한 문제
    대응할수 있다.

  • 예외의 종류
    -컴파일에러
    .java파일을 .class파일로 컴파일할때 발생하는 에러
    문법을 틀려서 발생하기 때문에 문법을 다시 작성하는것

    -런타임에러 Run+time
    프로그램이 실행 중 마주하게 되는 예외

  • 예외처리 관점에서의 예외의 종류
    -확인된 예외(Checked Exception)
    컴파일 시점에서 확인
    반드시 예외 처리 해줘야 하는 예외
    우리가 이미 특정한 문제를 인지한 상태
    예외처리하지 않으면 컴파일 에러가 발생한다.

    -미확인 예외(Unchecked Exception)
    런타임 시점에 확인되는 예외
    예외 처리가 반드시 필요하지 않은 예외

예외발생과 try-catch, finally문

  • 예외를 정의, 알리고 어떻게 핸들링하는지 중요
    try ~ catch ~ finally 구문을 활용한다.
    try 시도하다
    catch 잡다(붙잡다)
    finally 마침내

    일단 try해 ~~~ 그리고, 예외가 발생하면 그걸 잡아!!(catch)
    그리고, 정상적으로 수행되든, 예외가 발생하든 결국, 마침내 수행돼야 하는 로직을 'finally'

try {
//일단 실행!
}
catch(우리가 설정하 flag 라고 인스턴스화 하기 //ex. OurBadException e ){
}
finally{
//무조건 여기를 거쳐!
}
  • throws
    메서드 이름 뒤에 붙어 던질수 있는지 알려주는 예약어
    여러 종류의 예외사항을 적을 수 있다.
    extends Exception ()

  • throw
    메서드 안에서 실제로 예외 객체를 던질 때 사용하는 예약어
    실제로 던지는 예외 객체 하나와 같이 써야 한다.
    throw new <예외객체>
    throw문을 만나면 메서드가 종료된다.(흐름종료)

예외 클래스 구조

  • 자바의 Throwable Class
    -최상단 object 클래스 시작으로 상속해서 구현함
    -두가지 자식 클래스 Error와 Exception 클래스가 있다
    -Error와 Exception 클래스 각각 IOError클래스, RuntimeException같이 구분하여 처리

    Exception
    -IOException(입출력예외) - CheckedException
    -RuntimeException(실행중예외) - UncheckedException

    • NullPointException *
    • NumberFormatEception
    • ArrayIndexOutBoundsException *

Chained Exception

  • Chained Exception, 실제 예외 처리 하는 방법
    -연결된 예외 (Chained Exception)
    -예외는 다른 예외를 유발
    -원인 예외를 새로운 예외에 등록한 후 다시 새로운 예외를 발생시키는데, 이를 예외 연결이라고 합니다.
    -하나의 큰 분류의 예외로 묶어서 다루기 위함
    -쓰는 이유
  1. checked exception을 unchecked exception으로 포장(wrapping)하는데 유용하게 사용
    (checked exception을 감싸서 unchecked exception 안에 넣는다)
  2. tracking에 용이하다
  • 원인 예외를 다루기 위한 메소드
    -initCause()
    예외를 연결하는 부분

    -getCause()
    연결한 예외를 반환하여 보는 부분

  • 실제로 예외를 처리하는 메커니즘

    1. 예외를 복구
      -try-catch로 예외 처리하고 프로그램을 정상 상태로 복구
      최소한 대응만 가능하고 자주 사용되지 않는다.

    2. 예외 처리 회피
      -에러를 회피해서 그대로 흘러 보내는 경우

    3. 예외 전환
      -RuntimeException처럼 일괄적으로 처리하기 편한 예외로 바꿔서 던지고 싶은 경우 사용

Generic (제네릭)

  • 타입이 없는 언어인 약타입 언어(Javascript, Python) 쓰지 않고 사용할수 있게 하는 것
    -제네릭은 클래스 또는 메서드에 사용 가능!
    < >안에 들어가야 할 타입을 명시

  • Generic문법 자세히 보기

Generic<T>

-제네릭을 사용한 클래스를 제네릭 클래스
-<>사이에 들어가는 변수명 T는 타입 변수
-원시 타입

  • 제네릭 제한
    -객체의 static멤버에 사용 할수 없음
    -타입변수는 인스턴스변수로 간주되어서
    -제네릭 배열을 생성 할수 없다.

  • 문법
    -다수의 타입변수를 사용 할수 있다.
    -Generic<T, U, E> -> 하나는 출력, 두개는 입력 타입으로 가능
    -> Generic<Long, Integer, String> instance = new Generic();

  • 다형성-> 상속과 타입의 관계는 그대로 적용
    -와일드 카드를 통해 제네릭의 제한할 수 있다. - 다형성 때문에

    1. : T와 그 자손들만 사용 가능
    2. : T와 그 조상들만 가능
    3. : 제한 없음
  • 메서드를 스코프로 제네릭을 별도로 선언 할수 있다.
    -> 메서드 기준으로도 제네릭 타입이 적용이 가능하다.

  • 같은 이름의 변수를 사용했다고 해도 제네릭 메소드의 타입변수는 제네릭 클래스의 타입변수는 다르다.
    표현만 같을 뿐 다르게 사용 됨.

Collection 자료구조

  • List 배열 예시
    -추상적 자료구조, 순서를 가지며 일렬로 나열한 원소들의 모임
    -순서가 있고 중복을 허용 <> 집합(Set)과 구별됨
    -검색에는 유리하고, 수정/삭제는 불리한 자료구조
    -> 보안 할 수 있는 구조가 스택이나 큐

  • 개념인 리스트를 잘 추상화하고 정리해서 interface 코드 내부에 명세를 정리한다.
    -List 인터페이스의 구현체들이 List의 속성을 가지게 된다.

    • List - ArrayList, LinkedList
    • Queue - PriorityQueue
    • Set - HashSet, LinkedHashSet
  • Wrapper 객체
    -기본값을 객체화하는 것을 Boxing이라고 하며, 객체를 다시 기본값으로 만드는 것을 UnBoxing
    Integer num = new Integer(17); // Boxing
    int n = num.intValue(); // UnBoxing

    -문법적으로 자연스럽게 보여주기 위해서 AutoBoxing, AutoUnBoxing 존재
    Character ch = 'X'; // AutoBoxing
    char c = ch; // AutoUnBoxing

📝오늘의 회고

4주차 이해하기 보다 우선 전반적인 흐름을 알려고 하였고, 보충강의 시 튜터님께서 한 번에 보고 이해하기 보다 우선 그림을 그린다 생각하고 밑그림을 그린다고 생각하라고 하셨다.
아직 이해가 안가는 부분들이 있지만 2회독 3회독을 하면서 이해 할 수 있을꺼라 생각한다.
오늘도! 쳐지지 말고 포기하지말고 힘내서 가보자고~~~

profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글