728x90

java 129

[JPA] 프록시와 연관관계 관리

김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 정리 1. 프록시 - Member에 프로퍼티로 Team을 가지고 있을 때 em.find로 member을 조회하면 쿼리로 member와 team을 같이 조회한다. - team은 사용하지 않을 것이고 member의 username만 사용한다면 굳이 team을 조회할 필요가 없다. - 필요할 때 조회하기 위해 프록시를 사용한다. 2. 프록시 기초 - em.find(): 데이터베이스를 통해서 실제 엔티티 객체 조회 - em.getReference(): 데이터 조회를 미루는 가짜(프록시) 엔티티 객체 조회(DB로 쿼리를 날리지 않고 파라미터로 넣어준 클래스를 상속받은 가짜(프록시) 엔티티를 만들어서 프록시 객체가 영속성 컨텍스트에 들어간다.) 3. 프록시 ..

[JPA] 고급 매핑

김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 정리 1. 상속관계 매핑 - 관계형 데이터베이스는 상속 관계 X - 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사 - 상속관계 매핑: 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 - 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 (1) 각각 테이블로 변환 -> 조인 전략 (2) 통합 테이블로 변환 -> 단일 테이블 전략 (3) 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 2. 조인 전략 - 장점 (1) 테이블 정규화 (2) 외래 키 참조 무결성 제약조건 활용가능 (3) 저장공간 효율화 - 단점 (1) 조회 시 조인을 많이 사용, 성능 저하 (2) 조회 쿼리가 복잡함 (3) 데이터 저장 시 IN..

[Java] 트리

Do it! 자료구조와 함께 배우는 알고리즘 입문 읽고 정리 10-1 트리 - 트리란? 데이터 사이의 계층 관계를 나타내는 자료구조 - 트리 관련 용어 트리는 노드와 가지로 구성 (1) 루트: 트리의 가장 윗부분에 위치하는 노드 (2) 리프: 트리의 가장 아랫부분에 위치하는 노드 (3) 안쪽 노드: 루트를 포함하여 리프를 제외한 노드 (4) 자식: 어떤 노드로부터 가지로 연결된 아래쪽 노드 (5) 부모: 어떤 노드에서 가지로 연결된 위쪽 노드 (6) 형제: 같은 부모를 가지는 노드 (7) 조상: 어떤 노드에서 가지로 연결된 위쪽 노드들 (8) 자손: 어떤 노드에서 가지로 연결된 아래쪽 노드들 (9) 레벨: 루트로부터 얼마나 떨어져 있는지에 대한 값 (10) 차수: 노드가 갖는 자식의 수 (11) 높이: ..

[JPA] 다양한 연관관계 매핑

김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 정리 1. 연관관계 매핑시 고려사항 3가지 - 다중성 - 단방향, 양방향 - 연관관계의 주인 2. 다중성 - 다대일: @ManyToOne - 일대다: @OneToMany - 일대일: @OneToOne - 다대다: @ManyToMany -> 실무에서 사용 X 3. 단방향, 양방향 - 테이블 (1) 외래키 하나로 양쪽 조인 가능 (2) 사실 방향이라는 개념이 없음 - 객체 (1) 참조용 필드가 있는 쪽으로만 참조 가능 (2) 한쪽만 참조하면 단방향 (3) 양쪽이 서로 참조하면 양방향 - 연관관계의 주인 (1) 테이블은 외래키 하나로 두 테이블이 연관관계를 맺음 (2) 객체 양방향 관계는 A->B, B->A 처럼 참조가 2군데 (3) 객체 양방향 관계는..

[Java] 정렬 (2)

Do it! 자료구조와 함께 배우는 알고리즘 입문 읽고 정리 https://devhooney.tistory.com/35 [Java] 정렬 (1) Do it! 자료구조와 함께 배우는 알고리즘 입문 읽고 정리 6-1 정렬 - 내부정렬과 외부정렬 1. 내부 정렬: 정렬할 모든 데이터를 하나의 배열에 저장할 수 있는 경우에 사용하는 알고리즘 2. 외부 정 devhooney.tistory.com 이 글에 이어서... 6-5 셸 정렬 셸 정렬 - 셸 정렬은 단순 삽입 정렬의 장점을 살리고, 단점을 보완한 정렬 알고리즘 class ShellSort { // 셸 정렬 static void sheelSort(int[] a, int n) { for (int h = n/2; h > 0; h/=2) { for (int i =..

[JPA] 연관관계 매핑 기초

김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 정리 1. 단방향 연관관계 - 객체를 테이블에 맞춰 모델링(연관관계가 없는 객체) - 객체를 테이블에 맞춰 데이터 중심으로 모델링하면, 협력 관계를 만들 수 없음 (1)테이블은 외래키로 조인하여 연관된 테이블을 찾는다. (2) 객체는 참조를 사용해서 연관된 객체를 갖는다. - 객체 지향 모델링(객체 연관 관계 사용) - 객체와 테이블의 차이는 이렇게 해결 가능 // Member와 Team 클래스가 Entity 애노테이션을 붙였다고 가정 @Entity public class Member { // 다른 필드 생략 /* @Column(name="TEAM_ID") private Long teamId; 위는 객체를 테이블에 맞추어 모델링 한 것인데 협력 관..

[Java] 정렬 (1)

Do it! 자료구조와 함께 배우는 알고리즘 입문 읽고 정리 6-1 정렬 - 내부정렬과 외부정렬 1. 내부 정렬: 정렬할 모든 데이터를 하나의 배열에 저장할 수 있는 경우에 사용하는 알고리즘 2. 외부 정렬: 정렬할 데이터가 너무 많아서 하나의 배열에 저장할 수 없는 경우에 사용하는 알고리즘 - 정렬 알고리즘의 핵심 요소 정렬 알고리즘의 핵심 요소는 교환, 선택, 삽입 6-2 버블 정렬 - 버블 정렬 버블 정렬은 이웃한 두 요소의 대소 관계를 비교하여 교환을 반복하는 알고리즘 - 버블 정렬 과정 (n-1) + (n-2) + ... + 1 = n(n-1) /2 class BubbleSort { static void swap(int[] a, int idx1, int idx2) { int t = a[idx1]..

[JPA] 기본 엔티티 매핑

김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 정리 1. 객체와 테이블 매핑 - 객체와 테이블 매핑 : @Entity, @Table - 필드와 컬럼 매핑 : @Column - 기본 키 매핑 : @Id - 연관관계 매핑 : @ManyToOne, @JoinColumn 2. @Entity - @Entity가 붙은 클래스는 JPA가 관리 - JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 - JPA 스펙상 파라미터가 없는 public 또는 protected 기본 생성자 필수 - 기본 생성자 필수 - final 클래스, enum, interface, inner 클래스에는 사용 불가능 - DB에 저장하고 싶은 필드는 final 사용 불가 3. @Table @Entity @Table(name..

[JPA] 기본 영속성 관리 - 내부 동작 방식

김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 정리 1. JPA에서 가장 중요한 2가지 - 객체와 관계형 데이터메이스 매핑하기 - 영속성 컨텍스트 2. 엔티티 매니저 팩토리와 엔티티 매니저 - EntityManager는 DB에 붙기 위해 커넥션 풀을 사용 3. 영속성 컨텍스트 - JPA를 이해하는데 가장 중요한 용어 - 엔티티를 영구 저장하는 환경이라는 뜻 - EntityManager.persis(entity); -> 저장(영속석 컨텍스트를 통해서 엔티티를 영속화 한다.) 4. 엔티티의 생명주기 - 비영속(new/transient) 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 - 영속(managed) 영속성 컨텍스트에 관리되는 상태 - 준영속(detached) 영속성 컨텍스트에 저장되었다가..

[Java] 재귀 알고리즘

Do it! 자료구조와 함께 배우는 알고리즘 입문 읽고 정리 5-1 재귀의 기본 재귀란? - 어떤 사건이 자기 자신을 포함하고 다시 자기 자신을 사용하여 정의될 때 재귀적이라고 한다. 팩토리얼 구하기 - 재귀의 사용 예: 팩토리얼 class Factorial { // 양의 정수 n의 팩토리얼을 반환 static int factorial(int n) { if (n > 0) return n * factorial(n-1); else return 1; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int x = sc.nextInt(); System.out.println(x+ "의 Factorial은 " + facto..

728x90