전체 글502 LeetCode 217(Contains Duplicate, java) 0. 문제 https://leetcode.com/problems/contains-duplicate/ Contains Duplicate - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 1. 문제 설명 - 이 문제의 핵심은 배열 요소의 중복 유무를 검사하는 것이다. - 배열 요소의 중복 검사를 위해서는 for문을 이용해 배열의 요소를 HashSet에 삽입한다. - HashSet.add() 메서드는 boolean을 반환하기 때문에, 해당 메서드가 false를 반환하.. 2022. 4. 11. 14. 프록시(Proxy) 0. 개요 - 이번 포스팅에서는 JPA Proxy에 대해서 알아보자. - proxy는 JPA 개념 중에서도 어려운 개념에 속한다. 차근차근 배워보자. 1. Proxy를 사용하는 이유 a) 언제, 왜 사용할까? - 예를 들어, Player와 Team 객체를 모두 조회하는 비즈니스 로직이 있다고 해보자. - 경우에 따라 Player와 Team 객체가 모두가 필요할 때도, 두 객체 중 하나만 필요할 때도 있을 것이다. - 그러나 이미 두 객체를 모두 조회하도록 비즈니스 로직을 선언하였기에, 매번 Player와 Team 객체를 모두 조회한다. - 이처럼 필요하지 않은 객체에 대한 조회는 자원 낭비를 발생시킨다. - JPA는 이러한 상황을 해결하기 위해 지연 로딩을 사용하는데, 이때 Proxy라는 개념이 사용된다.. 2022. 4. 8. 13. @MappedSuperClass 0. 개요 - 이번 포스팅에서는 @MappedSuperClass라는 기능에 대해서 알아보자. 1. @MappedSuperClass - @MappedSuperClass는 공통 매핑 정보를 필요로 할 때 사용하는 기능이다. - 이는 상속 관계 매핑과 DB와는 별도의 기능으로, 객체의 관점만 집중하는 기능이다. a) @MappedSuperClass란? - 모든 Entity에 동일한 필드가 존재하는 경우, 이를 Entity를 정의할 때마다 중복적으로 작성한다. - 이러한 중복 필드를 공통으로 관리하여 중복적인 작성을 방지하는 기능이다. b) 예시 코드 - 다음 예시 코드를 통해서 @MappedSuperClass의 역할을 이해해보자. @Entity public class A { @Id @GeneratedValue.. 2022. 4. 7. 12. 상속 관계 매핑 0. 개요 - 상속 관계는 OOP에 존재하지만, RDB에는 존재하지 않는 개념이다. - 그러므로 JPA는 객체 간의 상속 관계를 RDB에 적용할 수 있도록 변환하는 작업을 수행한다. - 이번 포스팅에서는 JPA를 이용하여 상속 관계를 매핑하는 방법에 대해서 알아보자. 1. 상속 관계 매핑 - DB를 설계할 때 관계를 논리 모델과 물리 모델을 이용하여 표현한다. → 논리 모델: 사물의 관계를 도식화하여, 사물이 서로 어떻게 interact 하는지 표현한다. → 물리 모델: 논리 모델을 기반하여 ERD로 표현한다. a) 논리 모델 구현 - 슈퍼 타입, 서브 타입 - 상속 관계를 RDB로 구현할 때 우선 논리 모델을 구현한다. - 이때 논리 모델의 슈퍼/서브 타입을 사용하여 객체의 상속 관계를 유사하게 표현할.. 2022. 4. 6. 11. 연관 관계의 종류(일대일, 다대다) 0. 개요 - 이전 포스팅에 이어서 연관 관계의 종류에 대해서 알아보자. 1. 일대일(1:1, OneToOne) 관계 a) 일대일 연관 관계란 - 일대일 관계는 그 반대도 일대일 관계다. - 일대일 관계의 경우, 주 테이블 또는 대상 테이블 중 한쪽에서 FK를 관리한다. - 즉, 연관 관계의 주인을 선택하는 과정이 자유롭다. - 다만, DB에서 FK에 유니크(UNIQ) 제약조건이 추가되어야 한다. * 알아두자! - UNIQUE 제약 조건이란, 해당 칼럼에 들어가는 값(value)이 고유 값이어야 한다는 제약이다. - 즉, 중복 값이 존재하지 않는다. b) 일대일 관계의 예시 - 예를 들어, 선수 1명당 1개의 라커를 할당받는다는 규칙을 테이블로 구현하면 다음과 같다. - 이를 객체로 구현하면 다음과 같다.. 2022. 4. 5. 10. 연관 관계의 종류(일대다, 다대일) 0. 개요 - 이번 포스팅에서는 다양한 연관 관계의 종류에 대해서 알아보도록 하자. a) 연관 관계의 종류 - 연관 관계에는 다음과 같은 종류가 있다. → 다대일(N:1, @ManyToOne) → 일대다(1:N, @OneToMany) → 일대일(1:1, @OneToOne) → 다대다(N:N, @ManyToMany) - 위의 4가지 형태의 연관 관계에 대하여 알아보도록 하자. 1. 연관 관계 매핑 시 고려사항 a) 다중성 - 위에서 4가지 종류의 연관 관계가 있다는 것을 알았다. - 이 연관 관계를 매핑할 때에는 다중성을 고려해야 하는데, 다중성이란 다음과 같다. ex) 하나의 주문이 여러 개의 아이템을 가지는 관계 ex) 하나의 팀이 여러 명의 선수를 가지는 관계 - 이처럼 연관 관계의 대상이 다수의 데.. 2022. 4. 4. 9. 양방향 연관 관계 사용 시 주의사항 0. 개요 - 이전 포스팅에서 JPA를 이용한 양방향 연관 관계를 구현하는 방법에 대해 알아보았다. - 이번 포스팅은 양방향 연관 관계를 구현할 때 자주 실수하는 부분에 대해서 알아보자. * 이전 포스팅과 이어지는 내용입니다! 1. 연관 관계의 주인만 FK의 값을 생성할 수 있다. a) 예시 코드 - 양방향 매핑을 구현하면 mappedBy 옵션을 사용하여 연관 관계의 주인을 명시한다. - 이로써 JPA에서도 FK처럼 작동한다고 판단하여 자주 하는 실수 중 하나이다. - 다음 코드 예시를 살펴보자. - 우선 선수 객체(player1)를 만들었다. - 그리고 팀 객체(team)를 만들었다. - team 객체를 이용하여 앞서 만들었던 선수 객체를 저장하였다. - 이 코드는 올바르게 작동할까? - 위의 결과처럼.. 2022. 4. 1. 8. 양방향 연관 관계의 기본 개념 0. 개요 - 이번 포스팅은 양방향 연관 관계에 대해 알아보도록 하자. 1. 양방향 연관 관계 - 단방향 연관 관계에서 사용했던 예시를 확장하여 양방향 연관 관계로 만들어보자. a) 관계 예시 - 구현하려는 양방향 연관 관계는 아래의 테이블과 같다. - 이전 포스팅에서 단방향 연관 관계를 설명할 때의 구조와 동일한 테이블 구조다. - 분명 양방향 연관 관계를 구현한다고 했으나 왜 동일한 테이블을 사용할까? - 그 이유는 RDB는 FK를 이용한 Join으로 양방향 연관 관계를 형성한다. - 즉, RDB는 양방향 연관 관계를 기본으로 한다. - 다만 객체의 관점에서 보았을 때 연관 관계의 방향성이 유의미하다. b) 양방향 연관 관계란? - 위의 테이블 구조를 예시로 생각해보자. - Player 테이블의 FK.. 2022. 3. 31. 7. 단방향 연관 관계 0. 개요 - 이전 포스팅에서 DB의 Table을 하나의 Entity(= 객체)로 표현하는 방법에 대해서 배웠다. - 다양한 어노테이션과 옵션을 사용하여 테이블의 Column과 Entity의 필드를 매핑하였고, primary key를 설정하는 방법까지 알아보았다. - 이처럼 Table을 Entity로 표현하는 방법에 대해 알아보았지만, 아직 완전하다고 할 수 없다. - 왜냐면 객체 지향과 RDB의 근본적인 차이를 해결하지 못했기 때문이다. 1. 근본적인 문제 - 객체 지향과 RDB의 근본적인 문제는 관계를 표현하는 방식에 있다. - 객체 지향은 참조 또는 상속을 통해 관계를 형성한다. - RDB에서는 외래 키(= Foreign key)를 통해 관계를 형성한다. - 이처럼 관계를 표현하는 방식이 다르므로,.. 2022. 3. 30. 6. Primary key(기본 키) Mapping 0. 개요 - 이전 포스팅에서 Field와 Column을 매핑하는 방법을 배웠다. - 이번 포스팅에서는 DB에 존재하는 기본 키(= Primary key, PK)를 매핑하는 방법에 대해서 배워보자. 1. Annotation - PK 매핑에 필요한 Annotation을 알아보자. a) @Id - DB의 PK를 명시하기 위해서, Entity의 field에 @Id를 부착한다. - @Id는 PK의 값을 직접 할당하는 경우에 사용한다. @Entity public class Member { @Id private Long id; @Column(name = "name") private String username; } b) @GeneratedValue - PK의 값을 직접 할당하지 않고 DB에게 값 할당의 권한을 넘기.. 2022. 3. 29. 5. Field(칼럼) Mapping 0. 개요 - 이전 포스팅에서 Entitty와 DB Table을 매핑하는 방법에 대해서 알아보았다. - 이번 포스팅에서는 Field와 DB Column을 매핑하는 방법에 대해서 알아보자. 1. Annotation - Field Mapping에 사용되는 기본적인 Annotation에 대해서 알아보자. a) @Column - DB 테이블의 Column을 Entity 필드로 매핑할 때 사용한다. - Enitity 변수와 Column의 이름이 다르다면, @Column의 name 속성을 이용하여 DB의 Column을 명시한다. @Entity public class User { @Column(name = "fullName") private string userName; } b) @Enumerated - Entity.. 2022. 3. 28. 4. Entity Mapping 0. 개요 - 이번 포스팅에서는 JPA의 가장 기본이 되는 Entity Mapping에 대해서 알아보자. 1. Entity Mapping - DB의 테이블을 Java 클래스로 표현한 것을 Entity라고 한다. - JPA는 이 Entity 객체를 이용하여 DB에게 데이터를 전달하거나, DB로부터 가져온 데이터를 담는다. - 즉, DB 테이블의 내용(column)이 일대일 대응하도록, Java 클래스로 구현한 것이다. 2. Entity Mapping을 위한 Annotation a) @Entity - @Entity가 붙은 클래스는 JPA가 관리하는 Entity이다. - 그러므로 테이블과 매핑할 클래스는 반드시 @Entity를 부착해야 한다. - @Entity 사용에 대해 몇 가지 주의사항이 있다. → 기본 .. 2022. 3. 25. 이전 1 ··· 7 8 9 10 11 12 13 ··· 42 다음