개발
-
[JPA] 양방향 연관관계개발/Java 2023. 4. 18. 00:58
연관 관계 객체가 아닌 DB 테이블의 경우 FK를 통해서 그 관계를 바로 파악할 수 있다. 하지만 이를 객체 관점에서 본다면 FK가 선언된 자식 엔티티 객체와 부모 엔티티 간의 관계를 함께 표현해야 한다. 이런 관점에서 양방향 연관관계를 아래와 같이 선언할 수 있다. 늘 양방향으로 선언된 관계가 정답일 수는 없지만 양방향으로 선언된 구조가 어떤 형태이고 어떤 문제가 발생할 수 있는지 알아보자. 양방향 연관 관계와 그 주인 // Member.java @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; // Team.java @OneToMany(mappedBy = "team") private List members = new ArrayList(); 우리..
-
[오브젝트] 객체지향 프로그래밍개발/프로그래밍 2023. 2. 20. 23:19
객체 지향 객체 지향은 말 그대로 객체를 지향하는 것이다. 우리가 OOP를 통해서 개발할 때 클래스를 우선적으로 고려하지만 OOP의 본질은 "객체"가 주된 요소가 되는 것이다. 이 프로그래밍 패러다임을 위해서는 객체와 객체 사이의 관계를 파악해야 한다. 이를 기반으로 객체를 추상화하여 클래스를 만들고 그 사이 관계를 정의하는 것이 시작이다. 도메인 우리는 SW를 개발할 때 기능 등을 통해서 비즈니스 로직을 분류한다. 이때 로직이 특정 역할을 기준으로 나뉘게 되는데 이 로직을 위해 데이터가 어떠한 역할을 수행하고 그 범위는 어떻게 되는지를 결정하는 것이 도메인이다. 객체지향 프로그래밍 패러다임에서 도메인 또한 마찬가지로 객체, 클래스와 그 관계로 표현된다. 객체지향이 가지는 장점은 SW를 설계할 때 객체의..
-
[오브젝트] 객체, 설계개발/프로그래밍 2023. 2. 12. 21:46
모듈이 가져야 하는 기능 모듈은 제대로 동작해야 하고, 변경 용이성을 가지며 이해하기 쉬워야 한다. 일반적으로 코드로 구현되는 모듈이 기능적으로 문제가 있다면 코드의 로직을 바꾸면 된다. 하지만 다른 두 가지 이유에 충족하지 않는다면 어떻게 해야할까? public class Theater { private TicketSeller ticketSeller; public Theater(TicketSeller ticketSeller) { this.ticketSeller = ticketSeller; } public void enter(Audience audience) { if (audience.getBag().hasInvitation()) { Ticket ticket = ticketSeller.getTicketO..
-
[JPA] PK Mapping개발/Java 2023. 2. 12. 15:39
PK 매핑 @Id 를 통해서 기본키를 매핑한다. 별도의 추가 어노테이션이 없다면 값을 직접 할당해야한다. @GeneratedValue 를 통해서 값을 자동으로 할당해줄 수 있다. 이 어노테이션에서 속성 값으로 strategy 를 설정해줄 수 있다. IDENTITY 전략 GenerationType.IDENTITY 의 경우 DB에 생성을 위임한다. DB INSERT 시점에서 값을 설정한다. 즉, DB에 트랜잭션이 반영된 후에 ID 값을 알 수 있다. 하지만 영속성 컨텍스트에서 이를 관리하기 위해서는 PK 값이 존재해야 한다. 따라서, commit 시점이 아닌 persist 시점에 쿼리를 전달한다. JDBC 내부적으로 INSERT 시점에 반환 값을 확인할 수 있어 SELECT 쿼리가 발생하지는 않는다. CRE..
-
[JPA] Persistence Context개발/Java 2023. 1. 14. 00:47
EntityManager 엔티티 매니저 팩토리는 매 요청마다 엔티티 매니저를 생성한다. 엔티티 매니저는 내부적으로 DB 커넥션을 만들어 DB를 이용한다. 영속성 컨텍스트 영속성 컨텍스트는 논리적인 개념이다. 엔티티를 영구적으로 저장하고 객체로 이용할 수 있게 하는 환경. 이를 이용해서 엔티티를 영속성 컨텍스트에 영속적으로 저장한다. J2SE 환경에서 각 엔티티 매니저는 개별적인 영속성 컨텍스트를 가진다. J2EE, 스프링과 같은 컨테이너 환경에서는 여러 엔티티 매니저가 하나의 영속성 컨텍스트를 가진다. 엔티티의 생명주기 비영속 - new , transient 영속성 컨텍스트와 전혀 관계 없는 새로운 상태 최초 객체를 생성한 상태 값을 set() 하였지만 영속성 컨텍스트에 아직 저장하지 않음. 영속 - m..