목록공부 (52)
공hannah부
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/3i3yM/btspE5cQG6k/Jfa14pTBV2IcIW2kk6xvO0/img.jpg)
최대공약수와 최소공배수 최대공약수(gcd) a=b=0 이 아닌 정수 a,b에 대해, g | a, g | b (a가 g에 나누어 떨어지고, b가 g에 나누어 떨어짐) 을 만족하는 가장 큰 자연수 g 최소공배수(lcm) a | l, b | l 을 만족하는 가장 작은 자연수 l 둘 사이의 관계 0이 아닌 정수 a, b의 최대 공약수를 g, 최소 공배수를 l이라 할 때, a x b = g x l 유클리드 호제법 유클리드 호제법이란? 두 자연수 a, b의 최대공약수를 구하는 방법 시간복잡도: O(loga) 구하는 법 두 자연수 a, b (a >= b) 가 있고, a를 b로 나눈 나머지를 r이라고 할 때 gcd(a,b) = gcd(b,r) 이를 r이 0이 될 때까지 반복 r이 0일 때 나누는 수가 나누는 수가 a와..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/byqXlT/btspFLDrl3k/cthG1qWeseKtraaSZW1rW1/img.jpg)
선형 자료 구조 선형 자료구조: 하나의 데이터 뒤에 하나의 데이터만 올 수 있는 데이터 구조 ex) 배열 등 비선형 자료구조: 하나의 데이터 뒤에 여러 데이터가 올 수 있는 데이터 구조 ex) 트리, 그래프 등 배열 자료가 물리적으로 연속되어 저장되는 자료구조 시간복잡도 임의 위치 접근: O(1) 원소 삽입/삭제: O(N) std::vector, std::array 연결 리스트 자료가 논리적으로 연속되어 저장되는 자료구조 (메모리상에서 연속하지 않는다) 시간 복잡도 임의 위치 접근: O(N) 원소 삽입/삭제: O(1) std::list 각 자료를 노드라고 한다. 노드는 데이터와 자신과 인접한 노드의 주소를 저장한다. Singly Linked List: 다음 노드의 주소 또는 이전 노드의 주소만을 저장 D..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ukH3g/btspl81Q0dv/iNrKvQXOU8I67RObX8N6hK/img.jpg)
비교함수 bool compare(T a, T b); a가 b보다 무조건 앞에 나와야 한다면 true, 그렇지 않으면 false를 반환 비교함수는 Strick Weak Ordering을 만족해야 한다 Strick Weak Ordering 이항 관계 R(a, b)에 대해서 a가 b보다 반드시 앞에 나와야 한다면 참, 그렇지 않으면 거짓이라고 하자 비교성: a가 b보다 앞에 나와야 한다면 R(a,b)는 참, R(b,a)는 거짓이다. 이 경우 a와 b를 비교할 수 있다고 한다. 비비교성: a가 b와 동등하다면 R(a,b), R(b,a)는 둘 다 거짓이다. 이 경우 a와 b를 비교할 수 없다고 한다. 아래 조건을 모두 만족해야 한다. 비반사성: 모든 a에 대하여 R(a,a)는 거짓 비대칭성: 모든 a, b에 대하..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bvPbj0/btspl79JZZS/aSWMoYrf2O9QbRXbiI340k/img.jpg)
버블정렬 인접한 두 원소를 순서대로 보면서 정렬해 나가는 알고리즘 오름차순 예시 A[i]와 A[i+1]을 비교할 때 A[i] > A[i+1] 이면 A[i]와 A[i+1]를 교환(swap)한다. 위 과정을 i=1~N-1까지 순서대로 한번 수행 하는 것을 순회라고 한다. (N은 배열의 길이) 버블 정렬은 순회를 N-1번 반복한다. ex) [4, 5, 2, 3, 1] i=1) [4, 5, 2, 3, 1] i=2) [4, 2, 5, 3, 1] i=3) [4, 2, 3, 5, 1] i=4) [4, 2, 3, 1, 5] 첫 번째 과정을 수행하면 가장 큰 수 5가 맨 뒤에 위치 i=1) [2, 4, 3, 1, 5] i=2) [2, 3, 4, 1, 5] i=3) [2, 3, 1, 4, 5] 두 번째 과정을 수행하면 두..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bsG1Mi/btsoYVgsh04/aouikukw6zbBvmt6aekNd1/img.jpg)
Basic C++ 입출력 스타일 C 스타일과 C++ 스타일을 모두 지원한다. C 스타일 int a; scanf("%d", &a); printf("%d", a); C++ 스타일 int a; cin >> a; cout
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/xw6O7/btsnFLz3uuP/aECyMci2WKjfuXsvMNLoUk/img.jpg)
프록시 프록시 기초 프록시 특징 프록시 클래스는 실제 클래스를 상속 받아서 만들어지므로 실제 클래스와 겉 모양이 같다. 프록시 객체는 실제 객체에 대한 참조를 보관한다. 프록시 객체의 메소드를 호출하면 프록시 객체는 실제 객체의 메소드를 호출한다. 프록시 객체의 초기화 실제 사용될 때 데이터베이스를 조회해서 실제 엔티티 객체를 생성하는 것 초기화 과정 분석 프록시 객체에 member.getName()을 호출해 실제 데이터 조회 프록시 객체는 실제 엔티티가 생성되어 있지 않으면 영속성 컨텍스트에 실제 엔티티 생성을 요청(→ 초기화) 영속성 컨텍스트는 데이터베이스를 조회해서 실제 엔티티 객체 생성 프록시 객체는 생성된 실제 엔티티 객체의 참조를 Member target 멤버 변수에 보관 프록시 객체는 실제 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ccwrGB/btsm8YeRH0b/VqhQNB91NpvRISmfXAIgN0/img.jpg)
오늘 다룰 내용 상속 관계 매핑 @MappedSuperclass 복합 키와 식별 관계 매핑 조인 테이블 엔티티 하나에 여러 테이블 매핑하기 상속 관계 매핑 조인전략 조인전략이란? 엔티티 각각을 모두 테이블로 만들고 자식 테이블이 부모 테이블의 기본 키를 받아서 기본키 + 외래키로 사용하는 전략이다. 따라서 조회할 때 조인을 자주 사용한다. 사용시 주의사항 객체는 타입으로 구분할 수 있지만 테이블은 타입의 개념이 없기 때문에 타입을 구분하는 컬럼을 추가해야 한다. 장점 테이블이 정규화된다. 외래 키 참조 무결성 제약조건을 활용할 수 있다. 저장공간을 효율적으로 사용한다. 단점 조회할 때 조인이 많이 사용되므로 성능이 저하될 수 있다. 조회 쿼리가 복잡하다. 데이터를 등록할 INSERT SQL을 두번 실행한..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/kyGIT/btsmiEh2RmT/iwfF2iJtZgaH339BxyOitK/img.jpg)
엔티티의 연관관계를 매핑할 때 고려해야 하는 것 다중성 다대일 일대다 일대일 다대다 단방향, 양방향 연관관계의 주인 다대일 - 외래키는 항상 다쪽에 있다. 다대일 단방향 [N:1] 회원 엔티티 @Entity public class Member{ @Id @GeneratedValue @Column(name="MEMBER_ID") private Long id; private String username; @ManyToOne @JoinColumn(name="TEAM_ID") private Team team; } 팀 엔티티 @Entity public class Team{ @Id @GeneratedValue @Column(name="TEAM_ID") private Long id; private String name..