본문 바로가기

CS 과목(CS科目)

DB 설계 시, 多 관계에 있는 Table에 FK가 있어야 하는 이유 사전 지식 : FK는 단 1개의 TABLE만을 가리킬 수가 있다.( 위 그림은 여러 Member들(Member Table)이 하나의 Team(1개의 Team Table)에 소속되어 있음을 뜻함) Member : Team == 多 : 1의 관계이다. 즉, 여러 Member들이 하나의 Team(하나의 Team Table에 소속)에 소속될 수 있다는 것이다. 만약 Member Table에 TEAM_ID가 FK로 있어야 2명 이상의 Member들이 Table에 들어 왔을 때, 그 2명 이상의 Member들이 하나의 Team 소속(하나의 Team Table을 가리키고 있다는 것을)이라는 것을, TEAM_ID(FK)로 나타낼 수가 있다. 반대로 만약, FK가 Team Table의 MEMBER_ID였다면, 해당 팀 .. 더보기
Associational Relation의 주인(Owner)에 대해 확실히 이해하자! Player, Team(多:1)라는 2개의 Table이 있다고 하자. DB는 Foreign Key(FK) 하나로만 Table들의 연관 관계를 만든다.(FK로 JOIN연산을 통해서) 그러나 클라이언트 코드에서는 2개의 객체 사이의 연관 관계를 맺기 위해서는 Player 객체에 Team객체를 가리키는 참조 변수와 Team 객체에 Player 객체를 가리키는 참조 변수(List players), 즉 2개의 참조변수가 선언돼서, 서로가 서로를 가리키도록 해줘야 한다. ========================================================== DB의 Table : Foreign Key(FK) 하나로만 Table들의 연관 관계를 만든다 객체 : 2개의 참조변수가 선언돼서, 서로가 서로.. 더보기
ORM 프레임워크를 사용하는 이유(ex. JPA..) ORM(Object - realtional mapping) -> 객체는 객체대로 설계를 하고, DB는 Relational하게 설계를 하면서, 이 2개의 패러다임의 차이로 생기는 [SQL 중심적인 개발]이라는 문제를 [JPA와 같은 ORM 프레임워크]가 중간에서 매핑함으로써 해결해 준다. Object와 RDB의 차이 [1. 상속 관계의 유무] -> RDB에도 [Super Type], [Sub Type]이 존재하지만, OPP에서의 그것들과는 다른 의미이다. Album 저장 1. 객체 분해 : RDB는 Album이라는 상속 관계에 의한 Table을 만들 수가 없으므로, 아래와 같이 SQL을 크게 2개로 나누어 서 작성을 해 줘야 한다. ( 만약 Album 객체의 부모 클래스가 100개 있다면??? -> 100.. 더보기
트리(Tree)에서 자주 까먹는 용어 및 파생 개념 문서에 따라서의 경로의 길이가 [노드들의 수]가 아니라, [간선들의 수]일 때가 있다. lefth of path 라는 용어가 나오면 어느 맥락에서 사용되는 말인지를 먼저 파악을 해야 한다. 그러나, 관련 문서에 따라서는 [edge의 수]가 아니라, leaf까지의 가장 많은 [노드의 수]인 경우도 있다. 문서마다 서로 다르니, 트리의 height이라는 말을 보면, 어느 의미로 쓰인 지를 파악하는 것이 중요하다. 노드의 레벨도 어떤 문서에서는 레벌 0이 아니라, [레벨 1]부터 카운팅하는 경우도 있다. 트리의 특징 1. 노드는 단 하나의 부모 노드를 가진다. 형태에 따른 이진 트리(binary tree)의 종류 편향 이진 트리 = 왼쪽 편향 이진 트리 or 오른쪽 편향 이진 트리 더보기
[ADT Set] && [Set의 구현체인 HashSet] && [List와 Set의 차이] ADT Set(집합)의 특징 2가지 1. 순서를 보장하지 않음 2. 데이터 중복을 허용하지 않음 Set은 언제 사용하면 좋을까? 1.중복된 데이터를 제거해야 할 때! 중복된 단어들을 Set에 넣게 되면, 서로 다른 단어들만 남게 된다. 2. 데이터의 존재 여부를 확인해야 할 때(교집합) 용인시 사업 지원자의 주민번호와 경기도 사업 지원 수혜자의 주민번호의 교집합(Intersection) 원소들을 구하면 된다. Set(집합)의 구현체(in JAVA) 1. HashSet( 오늘 다룰 것 ) 2.LinkedHashSet 3.TreeSet HashSet -> Hash Table을 사용하여 Set을 구현 일반적으로, Hash Function 덕분에 Hash Table의 크기에 상관없이, key를 통하여 상수 시간.. 더보기
Tree Traversal - Pre-Order, In-Order, Post-Order(feat.이진 탐색 트리(binary search tree) 우선, binary search tree에 대해서 알아 보겠다. 우선 난 여태까지 대단한 착각을 하고 있었다. Binary Search(이진 탐색)과 Binary Search Tree(이진 탐색 트리)의 차이점에 대해서 별로 생각해 보지 않아서, 두 개 모두 같은 것이라고 보고,Binary Search Tree도 Binary Search(이진 탐색)과 같은 방식으로 동작하는 줄 알았다. 이진 탐색(Binary Search) vs 이진 탐색 트리(Binary Search Tree) 이진 탐색(Binary Search) 1. 중복된 값을 허용한다. (왼족 자식 노드는 부모 노드와 같거나 작고, 오른쪽 자식 노드는 부모 노드보다 크다 ) 2. 배열의 mid_index를 기점으로 탐색값과의 대소관계를 이용하여 .. 더보기
동적 배열(Dynamic Array) vs 연관 배열(Associative array) Array의 장점 [연속적인] 메모리 공간에 데이터들을 저장하기 때문에 CPU CACHE를 통해 같은 배열에 있는 데이터들에 접근하는 시간을 단축할 수가 있다. ( ex. cpp - vector, JAVA - ArrayList) (? list 구현체는 모두 동적인가?? ) 더보기
Array List vs Linked List List ADP의 사용 예시 문제1 ~100까지의 정답을 저장해야 한다고 해보자. 1. 정답들을 저장할 때, 문제의 [순서]대로 저장을 해야 하며, 2. 그 정답들 중, [중복]되는 정답들이 있을 것이다. 인기가 있는 프로그래밍 언어일수록 [순서] 상 되도록 앞에 저장을 해야 할 것이다. ( 이 예시에서는 중복이 없다 ) -> Set이나 Map을 사용하는 것이 더 적절한 상황이 아니라면 거의 대부분 List ADT를 사용한다고 보면 된다. (Set,Map은 추후에 다룸) List ADT의 구현체 1 - ArrayList 배열을 기반으로 구현되고, 구체적인 것은 너무 쉬우므로 넘어 간다. List ADT의 구현체 2 - LinkedList 노드를 연결(linked)시키는 형태로 구현 ArrayList와 L.. 더보기