LocalDate / LocalTime / LocalDateTime
Local이 붙는 이유 : 타임존(세계 시간대)을 고려하지 않아서 타임존 정보가 없다.
타임존을 고려한 날짜와 시간
예: 2013-11-25T08:20:30.213+9:00[Asia/Seoul]
Asia/Seoul과 같은 타임존에는 일광 절약 시간제(DST)와 UTC 오프셋 정보가 모두 포함됨
UTC 오프셋 정보 포함 (시간대 차이만 표현)
예: 2013-11-21T08:20:30.213+9:00
타임존 이름 정보는 없음
UTC 기준 시간의 한 지점을 표현
내부에 초(초 + 나노초) 데이터만 저장됨
출력 시 사람이 읽기 쉬운 날짜 형식으로 자동 변환됨
모든 날짜 클래스는 불변 이다.
값을 변경하면 새로운 객체를 생성 하여 반환하므로, 반환값을 꼭 저장 해야 한다.
클래스 안에 정의된 클래스
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)
구분
체크 예외
언체크 예외 (RuntimeException)
컴파일 체크
예
아니오
예외 처리 필수
예 (try-catch 또는 throws)
아니오
대표 예시
IOException, SQLException
NullPointerException 등
예외는 try-catch로 잡거나 , throws로 던져야 함
예외를 끝까지 던지면 main() 바깥에서 시스템이 종료됨
throw: 예외를 직접 발생 시킴
throws: 메서드가 예외를 던진다고 선언 함
Exception을 상속하면 체크 예외
컴파일 오류를 막기 위해 반드시 try-catch 또는 throws 사용
장점 : 예외 누락 방지
단점 : 코드가 번거로워짐
RuntimeException을 상속한 예외
throws 선언 생략 가능
자동으로 예외를 던짐
try: 정상 흐름
catch: 예외 처리
finally: 예외 발생 여부와 상관없이 항상 실행
try 또는 catch에서 예외가 발생해도 finally는 반드시 실행됨
자바는 GC(Garbage Collector) 로 메모리를 자동 관리함
그러나 외부 자원(파일, DB, 소켓 등) 은 자동으로 해제되지 않음
따라서 사용 후 반드시 명시적으로 해제(close) 해야 함
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 ("사용 중" );
}
// 사용 중
// 닫힘