클라이언트가 클래스의 인스턴스를 얻는 전통적인 수단은 public 생성자다. 한 가지 기법이 더 있는데 클래스는 생성자와 별도로 정적 팩터리 메서드(static factory method)를 제공할 수 있다. 장점 이름을 가질 수 있다. 생성자에 넘기는 매개변수와 생성자 자체만으로는 반환될 객체의 특성을 제대로 설명할 수 없지만 정적 팩터리는 이름을 가질 수 있다. 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다. 불변클래스라면 인스턴스를 미리 만들어 놓거나 캐싱하여 재활용할 수 있다. 반환 타입의 하위 타입 객체를 반환할 수 있는 능력이 있다. 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다. 정적 팩터리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 된다. 단점..
일렬로 나열하지 않고 자료 순서나 관계가 복잡한 구조를 말한다. 일반적으로 트리나 그래프를 말한다. 그래프 정점과 간선으로 이루어진 자료 구조를 말한다. 정점과 간선 어떠한 곳에서 어떠한 곳으로 무언가를 통해 간다고 했을 때 '어떠한 곳'은 정점이고 '무언가'는 간선이 된다. 간선은 단방향, 양방향이 있다. 정점으로 나가는 간선을 해당 정점의 outdegree라고 하며 들어오는 간선을 정점의 indegree라고 한다. 이렇게 정점과 간선으로 이루어진 집합을 그래프라고 한다. 가중치 간선과 정점 사이에 드는 비용을 말한다. 예를 들어 1번 노드에서 2번 노드까지 가는 비용이 한 칸이라면 1번 노드에서 2번 노드까지의 가중치는 한 칸이다. 트리 그래프 중 하나로 그래프의 특징처럼 정점과 간선으로 이루어져 있..
요소가 일렬로 나열되어 있는 자료 구조를 말한다. 연결 리스트 데이터를 감싼 노드를 포인터로 연결해서 공간적인 효율성을 극대화시킨 자료구조이다. 삽입과 삭제가 O(1)이 걸리며 탐색에는 O(n)이 걸린다. prev 포인터와 next 포인터로 앞과 뒤의 노드를 연결시킨 것으로 연결 리스트에는 싱글 연결 리스트, 이중 연결 리스트, 원형 이중 연결 리스트가 있다. 맨 앞에 있는 노드는 헤드(head)라고 한다. 싱글 연결 리스트 : next 포인터만 가진다. 이중 연결 리스트 : next 포인터와 prev 포인터를 가진다. 원형 이중 연결 리스트 : 이중 연결 리스트와 같지만 마지막 노드의 next 포인터가 헤드 노드를 가리킨다. 앞에서부터 요소를 넣는 push_front(), 뒤에서부터 요소를 넣는 pus..
복잡도 시간 복잡도와 공간 복잡도로 나뉜다. 빅오 표기법 시간 복잡도란 '문제를 해결하는 데 걸리는 시간과 입력의 함수 관계'를 가리킨다. 알고리즘의 로직이 '얼마나 오랜 시간'이 걸리는지를 나타내는 데 쓰이며, 보통 빅오 표기법으로 나타낸다. 다음 코드는 '입력 크기 n'의 모든 입력에 대한 알고리즘에 필요한 시간이 10n^2 + n이라고 했을 때의 내용이다. for (int i = 0; i < 10; i++) { for (int j = 0; j < n; j++) { for (int k = 0; k < n; k++) { if (true) cout
조인 하나의 테이블이 아닌 두 개 이상의 테이블을 묶어서 하나의 결과물을 만드는 것을 말한다. MySQL에서는 JOIN, MongoDB에서는 lookup이라는 쿼리로 처리한다. MongoDB에서는 조인 연산에 대해 관계형 데이터베이스보다 성능이 떨어지기 때문에 사용을 지양한다. 따라서 여러 테이블을 조인하는 작업이 많은 경우 MongoDB보다는 관계형 데이터베이스를 써야 한다. 내부 조인 (inner join) 왼쪽 테이블과 오른쪽 테이블의 두 행이 모두 일치하는 행이 있는 부분만 표기한다. SELECT * FROM TableA A INNER JOIN TableB B ON A.key = B.key 왼쪽 조인 (left outer join) 왼쪽 테이블의 모든 행이 결과 테이블에 표기된다. 테이블 B의 일..
인덱스의 필요성 인덱스는 데이터를 빠르게 찾을 수 있는 하나의 장치이다. 책의 색인과도 같다. B-트리 인덱스는 보통 B-트리 자료구조로 이루어져 있다. 이는 루트 노드, 리프 노드, 그리고 루프와 리프 사이의 브랜치 노드로 나뉜다. 트리 탐색은 맨 위 루트 노드부터 탐색이 일어나며 브랜치 노드를 거쳐 리프 노드까지 도달해서 해당 데이터가 가리키는 데이터 포인터를 통해 결괏값을 반환하게 된다. 인덱스가 효율적인 이유와 대수확장성 인덱스가 효율적인 이유는 효율적인 단계를 거쳐 모든 요소에 접근할 수 있는 균형 잡힌 트리 구조와 트리 깊이의 대수확장성 때문이다. 대수확장성이란 트리 깊이가 리프 노드 수에 비해 매우 느리게 성장하는 것을 의미한다. 기본적으로 인덱스가 한 깊이씩 증가할 때 마다 최대 인덱스 항..
트랜잭션 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위. 데이터베이스에서 접근하는 방법은 쿼리이므로 여러 개의 쿼리를 하나로 묶는 단위를 말한다. 특징으로 원자성, 일관성, 독립성 지속성이 있으며 묶어서 ACID 특징이라고 한다. 원자성 (atomicity) 트랜잭션과 관련된 일이 모두 수행되었거나 되지 않았거나를 보장하는 특징 예를 들어 트랜잭션을 커밋했는데 문제가 발생하여 롤백하는 경우 그 이후에 모두 수행되지 않음을 보장하는 것을 말한다. 커밋(commit)과 롤백(rollback) 커밋은 여러 쿼리가 성공적으로 처리되었다고 확정하는 명령어이다. 트랜잭션 단위로 수행되며 변경된 내용이 모두 영구적으로 저장되는 것을 말한다. 롤백은 트랜잭션으로 처리한 하나의 묶음 과정을 일어나기 전..
ERD (Entity Relationship Diagram) 데이터베이스를 구축할 때 가장 기초적인 뼈대 역할을 하며 릴레이션 간의 관계들을 정의한 것이다. 시스템의 요구 사항을 기반으로 작성되며 이 ERD를 기반으로 데이터베이스를 구축한다. 구축 이후에도 디버깅 또는 비즈니스 프로세스 재설계가 필요한 경우에 설계도 역할을 하기도 한다. 하지만 관계형 구조의 데이터 구성은 유용하지만 비정형 데이터를 충분히 표현할 수 없다는 단점이 있다. 비정형 데이터 비구조화 데이터를 말하며, 미리 정의된 데이터 모델이 없거나 미리 정의된 방식으로 정리되지 않은 정보를 말한다. 정규화 과정 릴레이션 간의 잘못된 종속 관계로 인해 데이터베이스 이상 현상이 일어나서 이를 해결하거나, 저장 공간을 효율적으로 사용하기 위해 릴..
데이터베이스 (DB, DataBase) 일정한 규칙, 혹은 규약을 통해 구조화되어 저장되는 데이터의 모음이다. 해당 데이터베이스를 제어, 관리하는 통합 시스템을 DBMS(DataBase Management System)라고 하며, 데이터베이스 안에 있는 데이터들은 특정 DBMS마다 정의된 쿼리 언어(query language)를 통해 삽입, 삭제, 수정, 조회 등을 수행할 수 있다. 또한 데이터베이스는 실시간 접근과 동시 공유가 가능하다. 엔터티 (Entity) 사람, 장소, 물건, 사건, 개념 등 여러 개의 속성을 지닌 명사를 의미한다. 예를 들어 '회원'이라는 엔터티에 이름, 아이디, 주소 등의 속성을 갖는다. 약한 엔터티와 강한 엔터티 예를 들어 A가 혼자서는 존재하지 못하고 B의 존재 여부에 따라..
스레드와 멀티 스레딩 스레드 스레드는 프로세스의 실행 가능한 가장 작은 단위이다. 프로세스는 여러 스레드를 가질 수 있다. 스레드는 코드, 데이터, 힙을 스레드끼리 서로 공유한다. 멀티 스레딩 프로세스 내 작업을 멀티 스레드로 처리하는 기법이며 스레드끼리 서로 자원을 공유하기 때문에 효율성이 높다. 예를 들어 새 프로세스를 생성하는 대신 스레드를 사용하는 웹 서버의 경우 훨씬 적은 리소스를 소비하며, 한 스레드가 중단되어도 다른 스레드는 실행 상태일 수 있기 때문에 중단되지 않은 빠른 처리가 가능하다. 또한 동시성에도 큰 장점이 있다. 하지만 한 스레드에 문제가 생겨 다른 스레드에도 영향을 끼치면 프로세스에 영향을 줄 수 있다. 동시성 서로 독립적인 작업들을 작은 단위로 나누고 동시에 실행되는 것 처럼 ..
- Total
- Today
- Yesterday
- 프로그래밍
- 자바
- 보이스코드정규형
- 네트워크 기초
- 직접연관매핑
- 중첩루프조인
- 프로그래밍 패러다임
- java
- 스프링 WebFlux
- 선언형 프로그래밍
- 캐시매핑
- 메모리 계층
- 네트워크
- 세컨더리인덱스
- 함수형 프로그래밍
- 프로세스 컴파일
- 프로세스와 스레드
- 직접매핑
- 인덱스최적화
- 코틀린
- 정렬병합조인
- 연관매핑
- 클러스터형인덱스
- 스레드
- 스프링 R2DBC
- 디자인 패턴
- 프로세스
- 대수확장성
- Design Pattern
- 불연속할당
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |