Curious Y

「Stay curious, keep learning and keep growing.」

Java - 더 빠른 입출력을 구현하기 위한 여정

StringTokenizer와 BufferedReader 콤비네이션

BufferedReader 버퍼를 이용해서 읽고 쓰는 것 Scanner보다 입출력의 효율이 좋아진다. 하드디스크는 원래 속도가 느리고, 외부장치와의 입출력은 생각보다 시간이 걸리는 작업이다. 따라서 데이터를 바로 목적지로 이동시키는 것보다 메모리 버퍼를 두어 데이터를 한번에 묶어서 이동시키는 것이 효율적이고 빠르다. Scanner와의...

배경지식 쌓기 - 디자인 패턴

GoF Design Pattern

디자인 패턴 모듈의 세분화된 역할이나 모듈들 간의 인터페이스 구현 방식을 설계할 때 참조할 수 있는 전형적인 해결방식 디자인 패턴을 통해 설계 문제, 해결 방법, 해결방법의 적용 방식과 결과를 알 수 있다. GoF(Gang of Four) 디자인 패턴 소프트웨어 공학에서 가장 많이 사용되는 디자인 패턴 목적에 따라 분류한 패턴...

배경지식 쌓기 - TDD 테스트 주도 개발

Test Driven Development

TDD 테스트 주도 개발 테스트를 먼저 만드록 테스트를 통과하기 위한 코드를 짜는 것이다. 만드는 과정에서 우선 테스트를 작성하고, 그에 해당하는 코드를 짜는 것을 반복하면서 제대로 동작하는지 피드백을 적극적으로 받는 것이다. 추상적으로 TDD의 핵심 개념을 말하자면 결정과 피드백 사이의 갭에 대한 인식, 갭을 조절하기 위한 테크닉이라...

알고리즘 - 완전탐색

Exhaustive Search / Brute Force

완전탐색 문제를 해결하기 위해 확인해야 하는 모든 경우의 수를 전부 탐색하는 방법 무식하게 한다는 뜻으로 Brute-Force라고도 한다 직관적이어서 이해하기 쉽고 문제의 정확한 결과값을 얻어낼 수 있는 가장 확실한 방법이다 종류 순열 Permutation : 선택 순서가 결과에 영향을 미치는 경우 백트래킹 BFS ...

알고리즘 - 삽입정렬

insertion sort

삽입정렬이란 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입하여 정렬을 완성하는 알고리즘 방법 처음 key값은 두번째 자료부터 시작하여, key값 앞의 자료들 중에 맞는 위치에 삽입한다. 삽입정렬의 특징 장점 안정된 정렬 방법 레코드 수가 적을 경우 알고리즘 자체가 매...

알고리즘 - 힙정렬

heap sort

Heap 최댓값이나 최솟값을 빠르기 구하기 위해 고안된 완전이진트리를 기반으로 한 자료구조 루트의 값만 바로 가져오면 되기 때문에 O(1)의 시간 복잡도 만으로 바로 최대값이나 최소값을 찾을 수 있다. complete binary tree이면서 heap property를 만족해야한다. 시간복잡도 : O(logn) 최대힙 최댓...

알고리즘 - 퀵소트

quick sort

Quicksort 과정 정렬할 배열이 주어진다 마지막 수를 기준 pivot으로 삼는다 기준보다 작은 수는 기준의 왼쪽에, 나머지는 기준의 오른쪽에 오도록 재배치(분할)한다 기준의 왼쪽과 오른쪽을 각각 순환적으로 정렬한다 최악의 경우 O(n2) 최선의 경우 O(nlogn) pivot의 선택 첫번째 값이나 마지막 값을 피봇...

DB - ANSI-SQL & T-SQL

SQL의 종류

SQL 관계형 데이터베이스 관리 시스템의 표준 언어 ANSI-SQL 표준이 되는 SQL T-SQL Microsoft에서 만든 SQL ANSI-SQL의 확장형 차이점 ANSI-SQL 테이블 JOIN이 FROM절에 들어감. WHERE절에는 검색 옵션 정보만 기술 T-SQL보다 가독성이 좋다 ...

데이터 모델링 기초 - 엔티티, 속성, 관계

Entity, Attribute, Relationship

데이터 모델링 사용자의 요구사항을 분석해서 IT시스템을 구축하기 위하여 ‘데이터’ 요건을 형상화하는 작업 (테이블을 만들어놓고 데이터를 잘 모델링한 후, 그 데이터에 사용자가 쉽게 접근하게 하기 위해 프로그래밍을 하는 순서다) 프로그램에 데이터 모델링이 필요한 이유 소프트웨어의 본질은 동작과 데이터다 ...

Spring - 객체지향 SOLID 5원칙

인프런 <스프링 핵심 원리 - 기본편>을 들으면서 정리

보다 유지보수하기 쉽고, 유연하고, 확장이 쉬운 소프트웨어를 만들기 위해서는 객체지향 디자인 원리를 알아야한다. SOLID 클린코드로 유명한 로버트 마틴은 좋은 객체 지향 설계의 5가지 원칙을 정리했다. 1. SRP 단일 책임 원칙 single reponsibility principle 한 클래스는 하나의 책임만 가져야 한다. ...