• 에러와 예외
    • 에러
      • 주로, 스택오버플로우 또는 물리적 부족 같은 시스템 장애
      • java.lang.Error에서 에러사항 정의
      • 일반적으로 에러를 대비한 코드를 작성하지는 않음
    • 예외
      • 주로 애플리케이션의 로직에서 발생할 수 있는 오류
      • 잘못된 사용자 입력, 네트워크 문제, 파일 읽기 오류 등
      • Checked Exception와 Unchecked Exception로 구분
  • 예외처리
    • 예외처리란 발생할 수 있는 오류와 상황을 미리 예측하여 예외 발생시에 적절한 처리를 해주는 작업
    • 예외처리의 목적
      • 자바에서 예외 처리의 주요 목적 중 하나는 프로그램의 강제 종료를 방지하는 것
      • 예외 처리를 사용하여 오류의 원인을 쉽게 파악하고, 오류가 발생했을 때 적절한 조치
        • logging, debugging 목적
      • 실무적으로 예외처리의 가장 중요한 목적으로서, 예외를 미리 예측하여 사용자(USER, 개발자)에게 예외 상황에 따른 적절한 message를 전달해 줄 수 있음
        • USER에게는 적절한 화면을, 개발자간(프론트엔드와 백엔드 또는 서버와 서버간 통신)에 적절한 상태코드와 message를 주고받는 것.
    • 기본 문법 : try / catch / finally 문
      • try
        • 실행되는 코드
      • catch
        • try 블록에서 발생한 예외의 처리를 담당
      • finally
        • try 블록에서 예외가 발생여부와 상관없이 무조건 실행
    • throw, throws
      • throw new
        • throw new 키워드는 개발자가 명시적으로 예외를 발생시키는 데 사용
        • throw는 주로 if 문 내부나 메서드의 실행 과정 중간 등에서 사용되어, 특정 조건을 만족하거나 특정 상황이 발생했을 때 예외를 발생시키는 용도로 사용
        • 사용이유
          • 트랜잭션 롤백을 위해 강제 예외발생
          • 사용자에게 명확한 메시지와 상태코드 전달
          • 코드 실행을 명시적으로 중지하기 위함
        • 예시) if (stockQuantity< 0) { throw new IllegalArgumentException("재고가 부족합니다."); }
        • 예외클래스("문구")의 문구 부분은 logging, debugging, restAPI 등에서 중요하게 사용되므로 적절하게 작성 필요
      • throws
        • throws 키워드는 메서드나 생성자의 선언부에 위치하여, 해당 메서드/생성자에서 발생할 수 있는 예외들을 명시.
        • throws는 예외가 발생되는 메서드 내부에서 처리하지 않고, 호출하는 측에 예외 처리를 위임하는 것을 명시할 때 사용. 즉, 예외처리의 책임을 명확히 하기 위해 사용
        • 하지만 throws로 명시하지 않더라도, 예외가 발생하면 예외는 호출하는 측으로 전파
          • 단, checked exception은 예외처리가 강제되므로, 해당 메서드에서 예외처리를 하든, throws해야 함
        • 예시) public void setUserAge(int age) throws IllegalArgumentException{
    • 주요 예외사항
      • Exception
        • 모든 예외의 조상 클래스
        • java.lang.Exception에서 정의
      • 예외 구분
        • Checked Exception
          • 일반적으로 외부 시스템과의 인터랙션(파일 시스템, 네트워크, DB작업 등)에서 발생할수 있는 예외
          • 예상가능한 예외로서 예외처리(try, catch) 또는 throws강제 됨에 유의
          • spring에서 checked exception은 rollback이 안됨에 유의
            • 따라서, rollback이 되게 하려면 try catch 이후 throw new를 통해 unchecked exception 발생 또는 별도의 설정 필요
          • 주요 예외
            • FileNotFoundException
            • IOException
              • 입출력 관련 작업시 예외
            • SQLException
              • 데이터베이스 작업 중 발생하는 예외
        • Unchecked Exception
          • 예상치 못한 예외로서 주로 프로그램 내부에서 발생할 수 있는 예외들
          • 주요 예외
            • RuntimeException
              • 모든 unchecked exception의 조상 클래스
            • ArithmeticException
              • 산술적예외
              • ex)정수를 0으로 나눌때 발생
            • NullPointerException
              • 객체 참조가 null인 상태에서, 그 객체의 메소드를 호출하거나, 객체의 필드에 접근하려고 할 때 발생
            • IndexOutOfBoundsException
              • ex)index를 가리킬때 발생
            • IllegalArgumentException
              • 메소드에 부적합한 인자가 전달될 때 발생
            • NoSuchElementException
              • 요소를 찾을 수 없을 때 사용. spring에서 EntityNotFoundException 빈번히 사용
            • NumberFormatException
              • 문자열을 숫자로 변환하려고 할 때 해당 문자열이 유효한 숫자 형식이 아닐 경우 발생
  • 파일 입출력 - Stream
    • 스트림(stream)이란 실제의 입력이나 출력이 표현된 데이터의 이상화된 흐름을 의미

    • 스트림은 운영체제에 의해 생성되는 가상의 연결 고리를 의미하며, 시스템간 데이터 전송에 있어 중간 매개자 역할

      Untitled

    • java 스트림의 종류

      • byte기반 스트림
        • 자바에서 스트림은 기본적으로 바이트 단위로 데이터를 전송
        • 바이너리 파일, 이미지, 오디오 파일 등의 바이트 데이터를 처리할 때 사용
      • character기반 스트림
        • 텍스트 파일과 같은 문자열 데이터를 처리할 때 사용
        • 자바에서 가장 작은 타입인 char 형이 2바이트이므로, 1바이트씩 전송되는 바이트 기반 스트림으로는 원활한 처리가 힘듬
        • InputStream, OutputStream을 통해 byte기반 스트림을 문자기반으로 변환
        • 파일에서 문자를 읽는 스트림을 별도로 제공
      • 스트림 기능을 보조해주는 버퍼클래스(임시기억 장치) 제공
      • NIO 패키지와 IO패키지 비교
  • JSON