Skip to content

Latest commit

 

History

History
235 lines (154 loc) · 6.48 KB

File metadata and controls

235 lines (154 loc) · 6.48 KB

Java 정리 노트

자바 시간 라이브러리

LocalDate / LocalTime / LocalDateTime

  • LocalDate: 날짜만 표현할 때 사용

    • 예: 2013-11-21
  • LocalTime: 시간만 표현할 때 사용

    • 예: 08:20:30.213
  • LocalDateTime: 날짜 + 시간 표현

Local이 붙는 이유: 타임존(세계 시간대)을 고려하지 않아서 타임존 정보가 없다.


ZonedDateTime

  • 타임존을 고려한 날짜와 시간
  • 예: 2013-11-25T08:20:30.213+9:00[Asia/Seoul]
  • Asia/Seoul과 같은 타임존에는 일광 절약 시간제(DST)와 UTC 오프셋 정보가 모두 포함됨

OffsetDateTime

  • UTC 오프셋 정보 포함 (시간대 차이만 표현)
  • 예: 2013-11-21T08:20:30.213+9:00
  • 타임존 이름 정보는 없음

Instant

  • UTC 기준 시간의 한 지점을 표현
  • 내부에 초(초 + 나노초) 데이터만 저장됨
  • 출력 시 사람이 읽기 쉬운 날짜 형식으로 자동 변환됨

불변 객체

  • 모든 날짜 클래스는 불변이다.
  • 값을 변경하면 새로운 객체를 생성하여 반환하므로, 반환값을 꼭 저장해야 한다.

중첩 클래스 (Nested Class)

중첩 클래스란?

  • 클래스 안에 정의된 클래스
  • for문 중첩처럼 어떤 구조 안에 또 구조가 있는 것

중첩 클래스 종류

종류 static 여부 설명
내부 클래스 바깥 클래스의 인스턴스에 소속됨
지역 클래스 메서드나 생성자 안에서 선언됨
익명 클래스 클래스 이름 없음
정적 중첩 클래스 static 사용, 바깥 클래스 인스턴스와 무관

변수 선언 위치와 비교

변수 종류 선언 위치 생명주기
클래스 변수 클래스 안, static 사용 프로그램 종료 시까지
인스턴스 변수 클래스 안, static 없음 인스턴스가 GC될 때까지
지역 변수 메서드 또는 생성자 내부 블록 종료 시 제거됨

내부 클래스

  • static이 붙지 않음
  • 바깥 클래스의 인스턴스 멤버에 접근 가능
  • 생성 방식: 바깥클래스 인스턴스.new 내부클래스()
  • 내부 인스턴스는 바깥 인스턴스를 참조함

정적 중첩 클래스

  • static이 붙음
  • 바깥 클래스의 인스턴스 멤버에는 접근 불가
  • 생성 방식: new 바깥클래스.중첩클래스()

지역 클래스

  • 지역 변수처럼 코드 블럭 안에 클래스 선언
  • 바깥 클래스의 인스턴스 멤버에 접근 가능
  • 지역 변수와 매개변수도 접근 가능
  • 지역 클래스 인스턴스 생성 시 지역 변수를 캡처(capture) 해서 복사 저장
  • 캡처한 지역 변수는 final 혹은 사실상 final이어야 함

익명 클래스

  • 이름 없는 지역 클래스
  • 선언과 생성을 동시에 수행
Printer printer = new Printer() {
    // body
};

익명 클래스는 인터페이스나 추상 클래스를 구현해야 하며, 생성자 없음, 1회만 사용 가능


중첩 클래스의 활용 목적

  • 논리적 그룹화: 다른 곳에서 쓰일 이유가 없는 클래스는 내부에 정의하여 숨길 수 있음
  • 캡슐화: 바깥 클래스의 private 멤버에 접근 가능하여 불필요한 public 메서드 제거 가능

변수 생명 주기 정리

변수 종류 메모리 영역 생명 주기 설명
클래스 변수 메서드 영역 프로그램 종료 시까지
인스턴스 변수 힙 영역 인스턴스가 GC될 때까지
지역 변수 스택 영역 메서드 종료 시 제거됨 (매개변수 포함)

자바 예외 처리

예외 계층 구조

Object
 └── Throwable
      ├── Error           (복구 불가)
      └── Exception       (복구 가능)
           └── RuntimeException (컴파일러 체크 X)

체크 예외 vs 언체크 예외

구분 체크 예외 언체크 예외 (RuntimeException)
컴파일 체크 아니오
예외 처리 필수 예 (try-catch 또는 throws) 아니오
대표 예시 IOException, SQLException NullPointerException 등

예외 처리 방식

  • 예외는 try-catch잡거나, throws던져야 함
  • 예외를 끝까지 던지면 main() 바깥에서 시스템이 종료됨

throw vs throws

  • throw: 예외를 직접 발생시킴
  • throws: 메서드가 예외를 던진다고 선언

체크 예외의 특징

  • Exception을 상속하면 체크 예외
  • 컴파일 오류를 막기 위해 반드시 try-catch 또는 throws 사용
  • 장점: 예외 누락 방지
  • 단점: 코드가 번거로워짐

언체크 예외의 특징

  • RuntimeException을 상속한 예외
  • throws 선언 생략 가능
  • 자동으로 예외를 던짐

try ~ catch ~ finally

  • try: 정상 흐름
  • catch: 예외 처리
  • finally: 예외 발생 여부와 상관없이 항상 실행

try 또는 catch에서 예외가 발생해도 finally반드시 실행됨


외부 자원 처리

  • 자바는 GC(Garbage Collector) 로 메모리를 자동 관리함
  • 그러나 외부 자원(파일, DB, 소켓 등)자동으로 해제되지 않음
  • 따라서 사용 후 반드시 명시적으로 해제(close) 해야 함

AutoCloseable 핵심 정리

  • java.lang에 포함된 자바 기본 인터페이스
  • close() 메서드만 가지고 있음
  • try-with-resources에서 자원을 자동으로 닫기 위해 사용
  • Closeable보다 범용적 (모든 자원 + 모든 예외 가능)
  • 주요 구현 클래스: BufferedReader, Scanner, Connection, Socket
class MyRes implements AutoCloseable {
    public void close() {
        System.out.println("닫힘");
    }
}
try (MyRes res = new MyRes()) {
    System.out.println("사용 중");
}
// 사용 중
// 닫힘