패키지

  • 관련이 있는 클래스와 인터페이스의 묶음
    • 클래스와 인터페이스는 패키지의 멤버로 존재
  • 전체적으로 계층 구조의 클래스 라이브러리
    • 폴더와 유사 형식으로 계층적으로 분류 됨

  1. 용도
    • 쉽게 찾아 사용할 수 있음
    • 이름 충돌을 피하기 위해
    • 접근 제어를 위해

  2. 시스템 패키지
    • JDK가 제공하는 클래스 라이브러리
    • 클래스 파일들은 기능에 따라 패키지로 묶여 분류됨
    • 일반적으로 jar 파일로 압축되어 있음
    • 가장 상위의 시스템 패키지는 java
      • 대부분의 시스템 패키지는 java. 로 시작함
      • 프로그램에서 상위 패키지와 하위 패키지의 구분을 위해 .을 사용
        • 가장 기본적 클래스는 java.lang 패키지에 존재
        • 프로그램에서 클래스를 사용할때는 java.io.IOExeption과 같이 표현하는 것이 원칙

  3. 정의 문법
    • package 구문은 소스 코드 맨 앞에 위치해야 함
    • 패키지 이름은 관례상 모두 소문자로 작명
    • 도트(.)로 구분하여 계층적으로 정의 함
    • 컴파일하면 패키지가 만들어지고(또는 기존 패키지에) 클래스파일(.class)이 패키지에 저장됨
    • 다른 패키지에 존재하는 public 클래스를 사용하려면 기본적으로 패키지 경로를 포함한 완전한 클래스 이름을 사용해야 함
      • 단 프로그램에서 자주 사용한다면 import 구문을 사용하는 게 좋음
        package 패키지이름;
        // 1 이상의 클래스나 인터페이스 정의가 나옴
        
  4. import문
    • 1개 클래스 또는 패키지에 있는 클래스 전체를 import 할 수 있음
    • import 구문은 소스 코드 맨 앞에 위치함 (패키지문이 있다면 그 다음)
    • 프로그램에서 패키지 경로를 생략하고, 이름만 가지고 클래스나 인터페이스를 사용할 수 있게 함
    • Java 프로그램에서 import java.lang.*; 구문은 자동 포함

예외처리

  1. 예외와 에러
    • 에러(Error)는 심각한 오류로 더 이상의 실행이 불가함
    • 예외(Exception)는 경미한 오류로 복구가 가능함
    • 예외는 정상적 실행 흐름을 방해하는 예외적 사건

  2. 예외 발생과 처리
    • 메소드를 수행할 때 예외가 발생하면 예외 객체를 만들어 던짐
    • 예외처리 코드가 없으면, 오류메시지가 출력되면서 프로그램이 즉시 종료됨
    • 예외처리 코드가 있으면, 예외 객체를 잡아 처리한 뒤, 프로그램은 계속 수행됨
    • 예외 객체는 Exception 클래스(또는 하위 클래스)로 표현되며 예외 발생 정보를 가지고 있음

  3. 예외 처리
    • 예외가 발생했을 때 상황을 바로잡아 계속 수행하도록 하는 것
    • 예외 발생 시, Exception 객체를 생성하고 throw 함
    • throw된 예외 객체를 예외처리 코드가 catch하여 예외를 처리함

  4. 예외의 종류
    • checked Exception이 발생할 수 있는 경우, 반드시 명시적인 예외처리가 필요함 (예외처리 코드가 없으면 컴파일 오류)
    • Runtime Exception의 경우 예외처리를 안해도 됨
      • 프로그램을 정확하게 작성하지 않은 경우 발생

  5. 예외처리 방법
    1) 직접처리
    - 예외가 발생한 곳에서 예외 객체를 잡아서 처리하는 것
    - try-catch 구문 또는 try-catch-finally 구문을 사용하여 예외를 처리
    - 일반 코드와 예외 처리가 분리되어 가독성이 좋아짐
    2) 간접처리
    - 예외 발생 가능성이 있는 메소드의 선언에서 괄호 다음에 throws 예외이름을 사용
    - 그 메소드를 호출한 메소드에게 예외처리를 전달 또는 위임 하는 것

  6. try-catch-finally 구문
    • 예외 객체를 던지는 문장 또는 예외 발생 가능성이 있는 메소드의 호출 부분을 try 블록에 둠
    • finally 블록은 생략 가능
    • 예외가 발생하면 try 블록은 즉시 종료 됨
    • catch 블록이 여럿이면, 가장 적합한 (발생된 예외 자료형과 일치하거나 상위유형) 하나만 실행됨
    • 예외가 발생하지 않으면 catch 블록은 실행되지 않음
    • finally 블록은 예외 발생과 무관하게 try 블록이 종료된 후 항상 실행됨
      • 할당 받아 사용했던 리소스를 원상복구하기 위해 finally 블록을 주로 사용함
      • 예 : try 블록에서 open 했던 파일을 close하는 코드를 finally 블록에 둠

  7. 예외의 간접처리
    • 예외를 발생시킬 수 있는 메소드를 호출하는 쪽에 예외처리를 위임하는 것(예외의 전파)
    • 메소드 선언에서 발생시킬 수 있는 예외유형을 표시함
    • 즉, 메소드 선언에서 괄호 다음에 throws 예외유형을 사용
    • 메소드 선언에서 throws 절이 표시된 메소드를 호출하는 메소드는 예외 처리를 해야 함

Updated: