티스토리 뷰
1. 엔티티의 생명주기
엔티티는 다음 네 가지 상태를 가질 수 있다:
- 비영속(New/Transient): 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태이다.
//객체를 생성한 상태(비영속)
Member member = new Member();
member.setId("member1");
member.setUsername("회원1");
- 영속(Managed): 영속성 컨텍스트에 저장된 상태이다. 예를 들어, em.persist(member);를 호출하면 이 상태가 된다.
//객체를 생성한 상태(비영속)
Member member = new Member();
member.setId("member1");
member.setUsername("회원1");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
//객체를 저장한 상태(영속)
em.persist(member);
- 준영속(Detached): 영속성 컨텍스트에 저장되었다가 분리된 상태이다. 이 상태는 em.detach(member);, em.close();, 또는 em.clear();를 호출하면 발생한다.
//회원 엔티티를 영속성 컨텍스트에서 분리, 준영속 상태
em.detach(member);
- 삭제(Removed): 영속성 컨텍스트와 데이터베이스에서 삭제된 상태이다.
//객체를 삭제한 상태(삭제)
em.remove(member);
2. Java의 Checked Exception과 Unchekced Exception
먼저, Java에서 예외처리는 크게 오류(Error)와 예외(Exception) 두 가지 범주로 나눌 수 있다.
오류(Error)
오류는 시스템 레벨에서 비정상적인 상황이 발생했을 때 나타난다. 이는 주로 JVM에서 발생하며, 대부분 복구 불가능한 심각한 수준의 오류이다. 개발자가 미리 예측하고 처리하기 어려운 것들로, 예를 들어 'OutOfMemoryError'나 'StackOverflowError'가 이에 해당한다. 이러한 오류는 개발자가 처리하기보다는, 발생을 최소화하기 위해 예방적 조치를 취하는 것이 일반적이다.
예외(Exception)
예외는 개발자가 구현한 로직에서 발생할 수 있으며, 발생할 상황을 미리 예측하여 처리할 수 있다. 예외는 크게 Checked Exception과 Unchecked Exception으로 나누어진다.
RuntimeException을 상속하지 않은 클래스는 Checked Exception, 상속한 클래스는 Unchecked Exception으로 분류할 수 있다.
1. Checked Exception
- 처리 여부: 반드시 예외를 처리해야 한다.
- 확인 시점: 컴파일 단계에서 확인한다.
- 트랜잭션 처리: 예외 발생 시 트랜잭션을 롤백하지 않는다.
- 대표 예외: 'IOException', 'SQLException' 등
try {
FileInputStream file = new FileInputStream("example.txt");
} catch (FileNotFoundException e) {
System.out.println("파일이 존재하지 않습니다.");
}
예를 들어, 파일이 존재하지 않는 경우 발생하는 'FileNotFoundException'이 이에 해당한다.
2. Unchecked Exception
- 처리 여부: 명시적인 처리를 강제하지 않는다.
- 확인 시점: 실행(런타임) 단계에서 확인한다.
- 트랜잭션 처리: 예외 발생 시 트랜잭션을 롤백한다.
- 대표 예외: NullPointerException, IndexOutOfBoundsException 등
public static void main(String[] args) {
String data = null;
System.out.println(data.length()); // NullPointerException 발생
}
예를 들어, 위 코드는 'NullPointerException'을 예방하지 않고 발생시키는 코드이다.
예외처리 방법
1. try-catch-finally: 예외를 직접 처리
try {
// 예외가 발생할 수 있는 코드
} catch (ExceptionType e) {
// 예외 처리 코드
} finally {
// 항상 실행되는 코드 (자원 정리 등)
}
2. throws: 예외를 메소드의 사용자에게 전파
public void readFile() throws IOException {
FileInputStream file = new FileInputStream("example.txt");
// 파일 처리 코드
}
3. throw: 직접 예외를 발생시키기
public void checkValue(int value) {
if (value < 0) {
throw new IllegalArgumentException("음수는 허용되지 않습니다.");
}
}
'Spring' 카테고리의 다른 글
[SPRING] 로깅에 대해서 알아보자 (0) | 2024.05.25 |
---|---|
스프링 키워드 모음 #4 (1) | 2024.05.07 |
[SPRING]자바 ORM 표준 JPA 프로그래밍 섹션4 (엔티티 매핑) (0) | 2024.04.25 |
[SPRING]자바 ORM 표준 JPA 프로그래밍 섹션3 (영속성 관리 - 내부 동작 방식) (2) | 2024.04.25 |
[SPRING]자바 ORM 표준 JPA 프로그래밍 섹션2 (JPA 시작하기) (1) | 2024.04.19 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 스프링부트
- 비영속
- 웹 MVC
- 자바
- 백준
- SQLD
- JPA
- 백준 파이썬
- 스프링 북마크
- 웹MVC
- SQL
- 회원탈퇴
- 파이썬
- 로그아웃
- 프론트엔드
- 커뮤니티
- DP
- EnumType.ORDINAL
- SQL 레벨업
- 준영속
- 북마크
- elasticsearch
- 스프링 커뮤니티
- 영속
- 지연로딩
- 로깅
- 스프링
- 인텔리제이
- 자바 스프링
- 다이나믹 프로그래밍
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
글 보관함