전체 글
-
해시 테이블Algorithm & Data Structure 2021. 4. 10. 19:03
Direct Access Table 배열의 인덱스 접근의 시간복잡도는 O(1)이었다. 인덱스는 데이터의 순서에 해당하는 색인, 데이터이다. 이 인덱스를 순서가 아닌 Key라 생각하고 데이터를 저장할 수 있는데 이러한 방식으로 데이터를 저장하고 관리하는 테이블을 Direct Access Table 이라 한다. Key (= 인덱스)라고 생각하고 value에 접근하는 방식이다. 특징 효율적으로 Key - value 쌍을 저장하고 가져올 수 있다. (O(1)) 하지만, 아래와 같이 Key에 해당하는 값이 커질 수 록 낭비하는 공간이 많다. (메모리 낭비가 심하다) 이 문제를 보완하기 위해 해시 테이블이 등장하게 된다. 해시 함수 하나의 Key와 그 Key에 해당하는 value를 합쳐서 Key-value 쌍이라 ..
-
SQL 서브쿼리_1Database 2021. 4. 9. 16:17
서브쿼리 명령에 의한 데이터 질의로, 상부가 아닌 하부의 부수적인 질의를 의미한다. 간단하게 부수적인 질의 정도로 이해하자. SQL 명령을 기술할때 서브쿼리를 사용하면 여러번 입력하여 알아 낼수 있는 정보를 한 줄로 명령 할 수 있다. 서브쿼리는 SQL 명령문 안에 하부 SELECT 명령으로 괄호로 묶어 지정한다.SELECT, WHERE, FROM, 등 다양한 문법에서 기술할 수 있다. 특히나, 서브쿼리는 WHERR 구에서 주로 사용되며 WHERE 구는 SELECT, DELETE, UPDATE 구에서 사용할 수 있는데 이들 중 어떤 명령에서든지 서브쿼리를 사용할 수 있다. DELETE의 WHERE 구에서 서브쿼리 사용하기 아래의 예제에서 A열에서 가장 작은 값을 가지고 있는 행을 삭제해보도록 하자. 해당..
-
SQL GROUP BYDatabase 2021. 4. 9. 15:24
그룹화 - GROUP BY GROUP BY 구를 사용해 집계함수로 넘겨줄 집합을 그룹으로 나눌수 있다. SELECT * FROM 테이블명 GROUP BY 열1, 열2.. 아래와 같은 products 테이블을 예로 GROUP BY를 알아보자! GROUP BY select category_id from products group by category_id; select 구에 category_id 열을 지정하여 그룹화된 열의 데이터가 클라이언트로 반환된다. group by의 결과로 앞서 살펴보았던 DISTINCT (중복제거) 를 사용했을때와 같은 결과가 나온다. 이로 인해, group by 구에 열을 지정하여 그룹화하면 지정된 열의 값이 같은 행이 하나의 그룹으로 묶이는 것을 알 수 있다. 즉 그룹화할 경우 ..
-
링크드 리스트Algorithm & Data Structure 2021. 4. 8. 17:03
링크드 리스트란? 노드 라는 단위의 데이터를 저장하고 이처럼 데이터가 저장된 각 노드들을 순서대로 연결시켜 만든 자료구조이다. 노드라는 객체가 순서대로 저장된 것 처럼 보이나, 실제 메모리에서는 여기저기 흩어져 있다는 것을 기억하자. 각 노드에서 레퍼런스의 갯수를 기준으로 싱글리 링크드 리스트와 더블리 링크드 리스트로 나뉜다. 이처럼 링크드 리스트는 데이터를 순서대로 저장해주는 자료구조이며 동적 배열과 같이 요소를 계속 추가할 수 있다 (구현 방식이 동적 배열보다 더 복잡하다) 주어진 상황에 따라 링크드 리스트 / 동적 배열 중 어느 자료구조를 적용하여 효율적으로 문제를 해결 할 수 있는지에 대한 감을 찾는것이 중요하다. 노드 (Node) 싱글리 링크드 리스트 각 노드는 하나의 객체로 표현되며 2가지 속..
-
배열Algorithm & Data Structure 2021. 4. 6. 15:44
배열 (Array) 번호와 번호에 대응하는 데이터들로 이루어진 가장 기본적인 자료구조 중 하나이다. (Python 은 C 언어를 기반으로 만들어졌으며, Python의 List 자료형은 C언어의 배열을 기반으로 만들어졌다. 같지는 않다.) 1. 정적 배열 크기가 고정돼 있다. 같은 타입의 데이터만 담을 수 있다. 메모리에 필요한 공간만큼을 미리 할당(예약)한다. 보통 C의 배열에서는 정수하나가 4 Byte를 차지하기 때문에 아래와 같이 크기가 4인 배열은 총 16Byte의 메모리를 차지하게 된다. 이처럼 데이터가 메모리에 순서대로, 연속적으로 저장된다. 배열 접근 순서대로 연속적으로 저장하기 때문에 시작되는 주소를 참고하여 배열의 인덱스에 빠르게 접근할 수 있다. 어떠한 인덱스든 O(1)으로 접근할 수 있..
-
자료구조Algorithm & Data Structure 2021. 4. 5. 14:51
자료구조 데이터를 저장하고 관리하기 위해 사용하는 구조 자체를 의미하기도 하며, 데이터의 효율적인 접근 및 조작을 가능하게 해주는 저장 및 관리 방식이다. 프로그래밍시 다양한 성격의 데이터를 접하게된다. 결국 프로그래머는 어떤 데이터를 다루고, 저장하고, 저장한 데이터를 가져올 수 있어야한다. 이때, 여러 상황에 적합한 자료구조를 선택하여 적용 할 수 있어야한다. 어떤 자료구조를 이용하는지에 따라 1초가 걸리기도 하고 100초가 걸리기도 한다. 이는 어떠한 서비스로 예를 들어도 매력적인 서비스는 결코 아닐 것이다. 자료구조는 데이터를 효율적으로 사용하기 위함인데, 그렇다면 컴퓨터에 데이터가 어떻게 저장되는지 알아보자. 크게 아래 두 곳에 데이터를 저장한다. 1. 스토리지 데이터가 영구적으로 저장되는 곳으..
-
SQL COUNT 집계함수Database 2021. 3. 29. 13:18
SQL은 데이터베이스라는 "데이터 집합"을 다루는 언어이다. SQL은 이러한 집합을 다루는 다양한 집계함수를 제공한다. COUNT(집합) SUM(집합) AVG(집합) MIN(집합) MAX(집합) 일반적인 함수는 인수로 하나의 값을 지정하지만, 집계함수는 인수로 집합을 지정한다. 집계 함수의 특징은 복수의 값(집합)에서 하나의 값을 계산해내는 것이다. 일반적인 함수는 하나의 행에 대하여 하나의 값을 반환하지만, 집계함수는 집합으로부터 하나의 값을 반환한다. 이처럼 집합으로부터 하나의 값을 계산하는 것을 집계라 부른다. 위와 같은 이유로 집계함수를 SELECT 구에 사용하면 WHERE 구 유/무와 관계없이 결괏값으로 하나의 행을 반환한다. COUNT SELECT COUNT FROM products; (X) ..
-
물리삭제와 논리삭제Database 2021. 3. 29. 12:11
데이터베이스에서 데이터를 삭제하는 방법은 용도에 따라 크게 두가지로 나뉜다. 1. 물리삭제 2. 논리삭제 물리삭제 SQL DELETE 명령을 사용해 직접 데이터를 삭제하는 방식이다. 익히 알고 있는 말 그대로 데이터를 직접 지우는 방식이다. 논리삭제 삭제 플래그라는 별도의 Column을 만들고 테이블의 데이터를 직접 삭제하는 대신 SQL UPDATE 명령으로 삭제 플래그 안의 값을 변강하고 삭제 플래그로 미루어보아 삭제가 설정된 행을 제외하고 SELECT 명령을 실행하는 방식이다. 실제 데이터는 삭제하지 않고 삭제된 것 처럼 보이는 방식이다. (논리삭제에는 삭제 플래그가 아닌 여러가지의 사용 방법이 있다고 한다.) 아래의 논리삭제의 장단점은 곧 물리삭제의 장단점이다. 장점 데이터를 삭제하지 않기 때문에 ..