Skip to content

3차 세미나 | 키워드 과제 정리

Minjae Lee edited this page May 1, 2024 · 18 revisions

1. Entity의 생명주기

Entity의 생명주기(LifeCycle)는 엔티티가 생성되고, 사용되고, 소멸되기까지의 전 과정을 의미합니다.
Entity가 존재할 수 있는 모든 경우의 수라고 볼 수 있어요!

일단 생명주기 4단계부터 바로 알아봅시다!

엔티티 상태 설명
비영속 (New/Transient) 엔티티가 생성은 되었지만, 영속성 컨텍스트와는 전혀 상관이 없는 상태
영속 (Managed/Persistent) 엔티티가 영속성 컨텍스트에 저장된 상태 (트랜잭션이 커밋되는 시점에 데이터베이스에 반영된다는 의미!)
준영속 (Detached) 엔티티가 영속성 컨텍스트로부터 분리된 상태 (이전에는 영속상태였지만, 현재는 연결되지 않았다는 의미!)
삭제 (Removed) 엔티티가 영속성 컨텍스트에서 삭제된 상태 (트랜잭션이 커밋되는 시점에 데이터베이스에서 삭제된다는 의미!)

비영속 (New/Transient)

코드로 살펴보면, Member라는 클래스가 있을 때 그저 해당 클래스를 이용해서 엔티티 객체(인스턴스)만 생성해준 상태입니다.
인스턴스의 필드값을 지정하는 것도 그저 객체 생성의 일부 과정이라고 볼 수 있겠네요!

Member member = new Member();
member.setName("민재");
member.setAge(25);

영속 (Managed/Persistent)

엔티티 매니저를 통해 엔티티가 영속성 컨텍스트에 저장된 상태입니다.

영속성 컨텍스트의 특성에 따라 영속 상태가 되었다고 데이터베이스에 저장이 되는 것은 아니고, (= DB에 쿼리가 날아가는 것은 x)
트랜잭션이 커밋될 때 데이터베이스에 반영됩니다.

EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
entityManager.persist(member);
entityManager.getTransaction().commit();

준영속 (Detached)

영속성 컨텍스트로부터 이제 분리된 상태입니다.

분리되었다는 것이 의미하는 바는 "더 이상 엔티티에 대한 변경사항이 자동으로 데이터베이스에 반영되지 않는다"는 것이라고 생각하면 될 것 같아요!
다시 말해, 영속성 컨텍스트가 제공해주는 Dirty Checking 기능을 사용하지 못한다는 것을 의미합니다.

entityManager.detach(member);

삭제 (Removed)

영속성 컨텍스트로, 즉 데이터베이스로부터 엔티티가 삭제된 상태입니다.
영속과 마찬가지로 트랜잭션이 커밋되는 시점에 데이터베이스에서 삭제됩니다.

entityManager.getTransaction().begin();
em.remove(member);
entityManager.getTransaction().commit();

2. Java의 Checked Exception과 Unchecked Exception

Java는 프로그램 실행(runtime) 중 발생할 수 있는 예기치 않은 상황을 Checked Exception과 Unchecked Exception으로 구분합니다.

구분 Checked Exception Unchecked Exception
처리의무 반드시 예외처리(try-catch throw)를 명시해야 함 명시적인 예외처리(try-catch throw)를 강제하지 않음
상속 RuntimeException을 상속받지 않음 RuntimeException을 상속받음
체크시점 컴파일(Compile) 시점에서 확인 런타임(Runtime) 시점에서 확인
목적 안정성과 예외 예측 가능성을 높이기 위해 사용 개발자의 실수에 의해 발생하는 에러를 위해 사용
트랜잭션 롤백(Rollback) 하지 않음 롤백(Rollback) 함