분류 전체보기 1341

Ch06. 다양한 연관관계 매핑 - 일대다 [1:N]

일대다 단방향 Team을 중심으로 연관관계를 설정한다 Team의 members를 변경해 주었을 때 다른 테이블에 있는 Member의 Team_ID가 변경이 된다(좋지 않다) Member에는 Team을 참조하는 변수가 없고 Team에만 Member를 참조하는 변수가 있다 Test 실행을 하게 되면, 쿼리 3번 실행 insert member insert team update member member와 Team의 Insert 후 연관관계를 Update쿼리를 동작시켜 넣어준다(성능상 더 안 좋다) 내 테이블에 외래키가 없기 때문에 member테이블에 update를 해주어야 하고, 관리하기도 힘들어진다. 일대다 단방향을 사용하지 말고 차라리 다대일 양방향을 사용하자 일대다 단방향은 일대다(1:N)에서 일(1)이 ..

Ch06. 다양한 연관관계 매핑 - 다대일 [N:1]

객체를 테이블에 맞추어 데이터 중심으로 모델링하면, 협력 관계를 만들 수 없다. 테이블은 외래 키로 조인을 사용해서 연관된 테이블을 찾는다. 객체는 참조를 사용해서 연관된 객체를 찾는다. 테이블과 객체 사이에는 이런 큰 간격이 있다. 연관관계 매핑 시 고려사항 3가지 다중성 (잘 모를 경우 반대편을 생각하면 된다, 대칭성이 있기 때문에) 다대일: @ManyToOne 일대다: @OneToMany 일대일: @OneToOne 다대다: @ManyToMany (실무에서는 사용하지 못한다) 방향 (단방향, 양방향) 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 연관관계의 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 객체 양방향 관계는 A->B, B->A처럼..

LEVEL 3 : 이중우선순위큐

https://programmers.co.kr/learn/courses/30/lessons/42628 코딩테스트 연습 - 이중우선순위큐 programmers.co.kr 문제 풀이 우선 순위 큐 2개를 선언해서 풀어주었다 우선 순위 큐 1번 큐. 작은 것부터 높은 우선순위를 가지는 큐 2번 큐. 큰 값부터 높은 우선순위를 가지는 큐 I : 숫자를 우선순위 큐 모두에 넣어준다 D 1 큐 1,2 에서 값 모두 제거한다 2번 큐의 값을 빼준뒤, 1번 큐의 remove함수를 호출해 값을 삭제해준다. D -1 큐 1,2 에서 값 모두 제거한다 1번 큐의 값을 빼준뒤, 2번 큐의 remove함수를 호출해 값을 삭제해준다. 두개의 큐 모두 비어있지 않다면 최댓값 최솟값을 반환한다. public int[] solutio..

LEVEL 3 : 2 x n 타일링

https://programmers.co.kr/learn/courses/30/lessons/12900 코딩테스트 연습 - 2 x n 타일링 가로 길이가 2이고 세로의 길이가 1인 직사각형모양의 타일이 있습니다. 이 직사각형 타일을 이용하여 세로의 길이가 2이고 가로의 길이가 n인 바닥을 가득 채우려고 합니다. 타일을 채울 때는 programmers.co.kr 문제 풀이 n이 최대 60000까지 인 DP문제이다 예전에 백준에서 한번 풀어본 경험이 있어 금방 해결할 수 있었다 n = 1 경우의 수 : 1*2 짜리 한개만 올 수 있다 n = 2 경우의 수 : (1*2 짜리 2개), (2*1 짜리 2개) , 총 2개의 경우의 수 n = 3 경우의 수 : (n =1 경우의 수, 2*1 짜리 2개) , ( n = ..

LEVEL 3 : 금과 은 운반하기

https://programmers.co.kr/learn/courses/30/lessons/86053 코딩테스트 연습 - 금과 은 운반하기 어느 왕국에 하나 이상의 도시들이 있습니다. 왕국의 왕은 새 도시를 짓기로 결정하였습니다. 해당 도시를 짓기 위해서는 도시를 짓는 장소에 금 a kg과 은 b kg이 전달되어야 합니다. 각 도시에는 programmers.co.kr 문제 문제의 제한조건을 주의하여 보자 풀이 제한 조건을 보게 되면 a, b의 길이는 최대 10^9, 도시 개수 최대 10^5이고, 골드와 실버를 왕복해서 줄 수 있으니 최대 올 수 있는 시간은 10 ^ 9 * 10 ^ 5 * 4이다. 따라서 이분 탐색으로 문제를 해결해야한다(파라메트릭 서치) 이분탐색으로 풀어야 한다는 것을 알았지만 못 풀었..

Ch05. 연관관계 매핑 기초 - 실전 예제(연관관계 매핑 시작)

단방향 연관관계를 먼저 잘 정하는 것이 제일 중요하다. 상품 입장에서는 주문이 그렇게 중요하지 않다(따라서 OrderItem과 Item은 단방향) Member Entity 양방향 연관관계가 설정되었다. 사실 비지니스 적으로 member에서 상품을 양방향으로 설정할 일이 없다. 이렇게 설계하면 잘못 설계된 케이스이지만 예제니까 현재 양방향으로 설정한다. Order Entity member 같은 경우 연관관계의 주인임으로 mappedby 옵션을 걸지 않는다. @JoinColumn을 통해 외래키로 설정될 이름을 적어준다( 없으면 mapping 테이블을 생성한다) orderItems 같은경우 연관관계의 주인이 아니므로 mappedby 옵션을 추가한다. OrderItem Entity order 같은경우 연관관계의..

Ch05. 연관관계 매핑 기초 - 양방향 연관관계와 연관관계의 주인(주의점)

양방향 매핑 시 가장 많이 하는 실수 연관관계의 주인에만 값을 넣기만 하면 되지만 결국에는 양쪽에 값을 넣어주는 것이 맞다. WHY? 2가지 문제가 있다. 1차 Cash에서 값을 가지고 왔을 때의 문제 Test 케이스 작성할 때 : JPA 없지 순수 Java 코드로 테스트를 해야 되는데 값이 서로 다르게 나오는 문제가 있다. 양쪽의 값 세팅 시 주의 순수 객체 상태를 고려해서 항상 양쪽에 값을 설정하자 연관관계 편의 메서드를 생성하자 changeTeam의 메서드에서 양쪽 관계의 값을 넣어준다. setTeam 같은 경우 java에서 관례로 사용하는 곳이 많기 때문에 새로운 메서드를 만들어서 하는것을 추천 연관관계 편의 메서드한쪽에만 만들자 양방향 매핑 시에 무한 루프를 조심하자 Ex) toString(),..

Ch05. 연관관계 매핑 기초 - 양방향 연관관계와 연관관계의 주인(기본)

현재는 Member -> Team은 가능하지만 Team->Member는 안된다. 테이블은 외래키 하나로 양방향 매핑이 가능하다(조인만 된다면 방향이 상관없이 다된다) 객체의 연관관계는 다르다(방향이 있다) mappedBy로 어떤 것과 연관되어 있는지를 적어준다. 연관관계의 주인이 아님을 mappedby를 통해 표시 연관관계의 주인과 mappedBy 객체와 테이블이 관계를 맺는 차이 객체 연관관계 = 2개 회원 -> 팀 연관관계 1개(단방향) 팀 -> 회원 연관관계 1개(단방향) 테이블 연관관계 = 1개 회원 팀의 연관관계 1개(양방향) 외래 키값 하나로 모든 연관관계가 끝이 난다. 객체의 양방향 관계 객체의 양방향 관계는 사실 양방향 관계가 아니라 서로 다른 단 방향 관계 2개다. 객체를 양방향으로 참조..

Ch05. 연관관계 매핑 기초 - 단방향 연관관계

객체와 테이블 연관관계의 차이를 이해 객체의 참조와 테이블의 외래 키를 매핑 방향(Direction): 단방향, 양방향 다중성(Multiplicity): 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) 이해 연관관계의 주인(Owner): 객체 양방향 연관관계는 관리 주인 이 필요 객체를 테이블에 맞추어 모델링 참조가 아닌 외래키 값을 그대로 가지고 있다(문제가 많은 코드) 저장, 조회 문제 테이블과 객체의 페러다임 테이블은 외래 키로 조인을 사용해서 연관된 테이블을 찾는다. 객체는 참조를 사용해서 연관된 객체를 찾는다 테이블과 객체 사이에는 이런 큰 간격이 있다 단방향 연관관계 Team을 다시 조회하는 것이 아닌 조회를 할 때, Join 해서 가지고 온다.

LEVEL 3 : 불량 사용자

https://programmers.co.kr/learn/courses/30/lessons/64064 코딩테스트 연습 - 불량 사용자 개발팀 내에서 이벤트 개발을 담당하고 있는 "무지"는 최근 진행된 카카오이모티콘 이벤트에 비정상적인 방법으로 당첨을 시도한 응모자들을 발견하였습니다. 이런 응모자들을 따로 모아 불량 programmers.co.kr 문제 풀이 BackTracking을 활용하여 모든 경우의 수를 구하는 문제이다( 백트래킹이 바로 생각나지 않았다ㅠㅠ) String의 Match함수를 통해 일치하는 문자열을 모든 경우의 수를 구한 뒤, 몇 개의 조합이 생기는지 계산해주면 해결된다. 방문 여부를 저장할 visit 배열과, 중복이 되지 않도록 저장하는 Set을 생성한다. 정규식을 사용해야 하므로 * ..