본문 바로가기
728x90

☕️자바 𝗝𝗔𝗩𝗔33

[JPA] JPA 연관관계 매핑 (다대일, 일대다, 일대일, 다대다) JPA 연관관계 매핑 연관관계 매핑 시 다음 3가지를 고려하여 매핑해야한다. 1) 다중성 다대일 (N : 1) ManyToOne 일대다 (1 : N) OneToMany 일대일 (1 : 1) OneToOne 다대다 (N : N) ManyToMany 2) 방향 양방향, 단방향 DB 테이블은 외래 키(Fk)하나로 조인을 사용해서 양방향으로 쿼리가 가능하다. 따라서 DB에는 방향의 개념이 없다. 그러나 객체의 경우, 참조용 필드를 가지고 있는 객체만 연관된 객체를 조회할 수 있으므로 방향의 개념이 존재한다. 객체 관계에서 한 쪽만 반대쪽을 참조하는 관계를 단방향, 양 쪽 모두 서로를 참조하는 관계를 양방향이라고 한다. 3) 연관관계의 주인 객체를 양방향 연관관계로 만들면 연관관계의 주인을 정해야 한다. 데이터베.. 2022. 9. 21.
[JPA] Entity 연관관계 매핑 (연관관계의 주인) 패러다임의 불일치 '객체지향 프로그래밍' 은 추상화, 캡슐화, 정보은닉, 상속, 다형성 등 시스템의 복잡성을 제어할 수 있는 다양한 정치들을 제공한다. 이에 반해 '관계형 데이터베이스'는 추상화, 상속 다형성 같은 개념이 없다. 데이터 중심으로 구조화되어 있고 집합적인 사고가 필요하다. 이러한 객체와 관계형 데이터베이스의 패러다임 불일치 문제를 해결하는데 많은 시간과 코드가 소비된다. 연관관계 객체는 참조를 사용해서 다른 객체와 연관관계를 가지고 (참조로 연관된 객체를 조회) 테이블은 외래 키를 사용해서 다른 테이블과 연관관계를 가진다. (join으로 연관된 테이블 조회) 객체를 테이블에 맞춰 모델링? 그럼 객체를, 테이블과 똑같이 모델링하면 어떻게 될까? 예시를 하나 들어본다. 데이터베이스에는 아래 그.. 2022. 9. 21.
[JPA] Entity 매핑 (필드와 칼럼 매핑, 기본키 매핑) 1. 객체와 테이블 매핑 @Entity가 붙은 클래스를 JPA가 entity로 관리한다. 여기에는 꼭 파라미터가 없는 생성자가 필수로 있어야 한다. 클래스를 이름이 다른 테이블과 매핑하고 싶다면 @Table안에 name 속성에 적어주면 되고, UNIQUE 조건은 uniqueConstrains에 적어주면 된다. 칼럼 수준에서도 unique 조건을 달아줄 수 있지만 생성되는 이름이 더 복잡해지고 여러 칼럼에 unique 조건을 걸어줄 수 없기 때문에 @Table로 하는 방식을 권장한다. 이 기능은 DDL자동생성시에만 적용된다. @Entity // JPA가 인식 @Table(name = "table_member", uniqueConstraints={ @UniqueConstraint(columnNames={"c.. 2022. 9. 21.
[JPA] JPA의 구동방식, 영속성 컨텍스트 (영속성 컨텍스트의 장점) 1. JPA의 구동방식 JPA의 구동방식을 살펴보면 아래와 같이 META-INF라는 곳 아래에 persistence.xml을 설정정보로 참고한 뒤 EntityManagerFactory를 생성하고 거기서 EntityManager를 생성해서 요청을 실행한다. EntityManagerFactory와 EntityManager? 어플리케이션은 단 하나의 EntityManagerFactory를 가지는데, 어플리케이션이 실행하면 생성하고 종료하면 소멸한다. 실제 DB 사용을 담당하는 EntityManager는 하나의 Thread(Transaction)가 생성될 때마다 EntityManagerFactory가 생성해 준다. 이를 코드로 구현하면 다음과 같다. public class JpaMain { public stat.. 2022. 9. 20.
[JAVA] @Builder 동작 원리, @Builder.Default, @Singular 1. @Builder 란 @Builder 란 Lombok에서 제공하는 어노테이션으로, 생성자 인자를 메서드 체인을 통해 명시적으로 대입하여 생성자를 호출할 수 있게 빌더 클래스를 생성 해준다. 빌더 클래스와 IDE의 자동 완성 기능을 같이 활용하면 생성자 작성 시 오기입 확률과 인자를 누락할 확률을 낮출 수 있다. API Javadoc의 설명: If a class is annotated, then a private constructor is generated with all fields as arguments (as if @AllArgsConstructor(access = AccessLevel.PRIVATE) is present on the class), and it is as if this constr.. 2022. 9. 16.
[Java] 불변 객체, final을 사용해야 하는 이유 (Immutable Object) 1. 불변 객체란? 불변 객체란 객체 생성 이후 내부의 상태가 변하지 않는 객체이다. 불변 객체는 read-only 메소드만을 제공하며, 객체의 내부 상태를 제공하는 메소드를 제공하지 않거나 방어적 복사(defensive-copy)를 통해 제공한다. Java의 대표적인 불변 객체로는 String이 있다. 아래 코드를 보자. String name = "One"; name.toCharArray()[2] = 'g'; Java의 String은 불변 클래스이기 때문에 위와 같이 String 내부의 char형 배열을 얻어 수정하여도 반영이 되지 않는다. Java에서는 배열이나 객체 등의 참조(Reference)를 전달한다. 그렇기 때문에 참조를 통해 값을 수정하면 내부의 상태가 변하기 때문에 내부를 복사하여 전달하.. 2022. 9. 16.
[Java] Final 의미, 사용법, final 키워드에 대한 이해 Java에서는 불변성을 확보할 수 있도록 final 키워드를 제공하고 있다. 클래스나 변수에 final을 붙이면 처음 정의된 상태가 변하지 않는 것을 보장한다는 의미이다. Java에서 변수들은 기본적으로 가변적인데, 변수에 final 키워드를 붙여 참조값을 변경 못하도록 해 불변성을 확보할 수 있다. 이 Final 키워드가 사용되는 4가지 경우를 정리해보자면 다음과 같다. 1. final 변수 다음과 같이 변수를 선언할 때 클래스 앞에 final 키워드 final String hello = "Hello world"; final 키워드가 붙은 변수는 초기화 후 변경할 수 없다. 다음과 같이 변경하려고 하면 컴파일 에러가 발생한다. final String hello = "Hello world"; hello .. 2022. 9. 16.
JVM 🤔 java HelloWorld 라는 명령을 실행하면? 1. OS는 가상 머신 프로세스(java binary)를 구동한다. 2. 자바 가상 환경이 구성된다. 3. stack 머신이 초기화 된다. 4. HelloWorld 클래스가 실행된다. 여기서 application 의 진입은 HelloWorld.class 의 main() method 이다. 제어권을 이 클래스로 넘기기 위해 가상 머신(이하 VM) 이 실행되기 전에 이 클래스를 load 해야한다. classloading 매커니즘 자바 process 가 초기화되면 사슬처럼 연결된 클래스 로더가 차례차례 작동한다. 1. bootstrap class 실행 다른 클래스로더가 나머지 시스템에 필요한 class 를 로드할 수 있게 최소한의 필수 클래스만 로드한다... 2022. 7. 19.
[IntelliJ] 'invalid source release: 17' 컴파일 에러 발생 이유 및 해결 [IntelliJ] 'invalid source release: 17' 컴파일 에러 발생 이유 및 해결 이유 : gradle과 호환이 되지 않아서.. 해결법: java 버전 11로 변경 혹은 새 프로젝트 생성 시 11로 생성해주기 [ java 버전 11로 변경하는법 ] File -> Project Structure -> Priject에서 Project SDK와 Project language level을 11로 변경해준다. 2022. 7. 11.
728x90