목록분류 전체보기 (229)
DevKim
관계형 DB는 상속관계가 없지만, 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하기 때문에 이것을 이용하여 객체의 상속과 구조와 관계를 매핑할 수 있다. [ JOINED 전략 ] @Getter @Setter @Entity @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn public abstract class Item { @Id @GeneratedValue @Column(name = "ITEM_ID") private Long id; private String name; private int price; } 조인 전략을 사용하기 위해 Inheritance를 설정해주었고, Movie만 임의로 저장해서 확인하니 알맞게 저장된..
[ 연관관계 매핑시 고려사항 ] 1. 다중성 1-1. DB와 매핑하기 위함이므로, DB의 관점에서 다대일,일대다..등을 보고 매핑해주면된다. @ManyToOne,@OneToMany.. 2. 단방향,양방향 2-1. 테이블 - 테이블은 FK 하나로 양쪽 join 가능해서 사실 방향이라는 개념이 없다. 2-2. 객체 - 객체는 한쪽만 참조하면 단방향, 양쪽 서로 참조하면 양방향이지만, 사실 양방향도 단방향이 2개인 것 이다. 3. 연관관계의 주인 3-1. 주인을 왜,언제 설정해야하는가? - 테이블은 FK 하나로 두 테이블이 연관관계를 맺을 수 있지만, 객체의 양방향은 참조가 2군데이므로 둘중에 FK를 관리할 곳을 지정해야한다. 3-2. 주인 설정 - 결론적으론 '다'의 위치에 있는 객체가 연관관계의 주인이 된..
01. [ 객체 설계를 테이블 설계에 맞춘 방식의 경우 ] 다음과 같이 연관관계 매핑을 하지않고, Member가 외래키 값을 그대로 들고 있는 경우엔 member에서 외래 키 식별자를 직접 다루게 된다. 이렇게 되면, member를 저장할 때 다음과 같이 team에서 id를 받아와서, 그 id를 가지고 teamid를 설정해주어야한다. 이러한 방법은 전혀 객체지향스럽지 않고.. 바로 getTeam( )을 해야 속이 시원할 것 같은 느낌이다. 더불어, 조회시에도 이슈가 있다. Team을 조회하기 위해선, member id로 원하는 member를 find하고, 찾은 member.getTeamId로 team의 id값 찾고..그 id값으로 다시 또 팀을 찾아줘야한다. 이렇게 되면 연관관계가 없으므로 계속 DB에 ..
1. 객체와 테이블 매핑: @Entity,@Table 2. 필드와 컬럼 매핑: @Column 3. 기본 키 매핑: @Id 이 세가지에 대해 정리해보려고한다. 프로젝트 할 때 기계적으로 사용했던 애들인데, 깊게 생각해볼 시간이 없었던 것 같다. [ 객체와 테이블 매핑 ] 1. @Entity - @Entity가 붙은 클래스는 JPA가 관리하는 엔티티이다. * 주의 * - 기본 생성자 필수 - final,enum,interface,inner 클래스 사용 X * 속성 * (1) name => 헷갈리니까 웬만하면 기본값으로 그냥 클래스 이름을 그대로 사용하는게 좋지만, 만약 다른 패키지에 같은 클래스명이 있는데 그게 또 JPA에 매핑된 경우에, name을 지정하여 JPA가 구분할 수 있게 지정할 수 있다. 2. ..
https://www.acmicpc.net/problem/1932 1932번: 정수 삼각형 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. www.acmicpc.net [ 알고리즘 ] DP [ 문제 접근 ] ▶ 완전탐색의 구조인데? 경우의 수가 너무 큰데? 메모이제이션 가능하다 ! 매번 최대를 구해야하는 겹치는 부분문제 = DP 01. 입력 7 ->tri[0][0] 3 8 -> tri[1][0], tri[1][1] 8 1 0 -> tri[2][0] ,tri[2][1],tri[2][2] 2 7 4 4 ... 4 5 2 6 5 ... 02. 상태값 n행의 m열 -> dp[n][m] 03. 조건 1. tri[n][m] 이 해당 줄의 시작일..
01. 문제 풀이 단계 - 문제 이해, 조건씩 꼼꼼하게 체크 (반례 케이스 고려) - 어떤 알고리즘, 자료구조를 사용해야 할지 체크 - 스스로 로직 먼저 만들어보기 - 작성한 로직 코드로 옮기기 - 시간 초과 발생시, 시간복잡도와 N의 범위 체크 [ 참고 ] https://yeon-woo-kim.tistory.com/102?category=1170787 시간 제한과 시간 복잡도 wiki.python.org/moin/TimeComplexity TimeComplexity - Python Wiki This page documents the time-complexity (aka "Big O" or "Big Oh") of various operations in current CPython. Other Pytho...
https://www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net [ 자료구조 ] 스택 [ 접근 방법 ] 나와야하는 target 숫자까지 모두 스택에 push해주고 target 숫자를 pop하여 꺼내준다. 만약 현재 target의 숫자가 이 전의 target 보다 작은 경우, 한번 pop해주었을 때 해당 값이 나오면 계속 진행하고 그렇지 않으면 불가능한 경우이므로 NO를 출력하고 ..
https://www.acmicpc.net/problem/2493 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 www.acmicpc.net [ 자료구조 ] 스택 [ 접근 방법 ] 완전 탐색으로 구현하면 시간초과나는 문제이다. 처음에 완전 탐색으로 접근해서, 뒤에부터 앞에를 하나씩 탐색하니 시간초과가 발생하였다. 해결한 방법은, 스택을 이용하여 맨 앞부터 그 전에 스택이 담긴 원소들과 비교를한다. (1) 스택이 비어있는 경우 = 수신 받을 탑이 없다는것 (자신보다 높은 탑이 없다는 것) (2) 스택이 비어있지 않은 경우 현재의 높이와..