본문 바로가기

분류 전체보기

(156)
이진 탐색 트리 (Binary Search Tree) 이진 탐색 트리탐색을 위한 자료구조로 저장할 데이터의 크기에 따라 위치를 정의한 것이다.트리 자료 구조의 자료 중 하나로, 각 노드가 2개의 자식 노드를 가질 수 있는 트리이다. ※ 효율적인 탐색 작업을 하기 위해 이진 탐색 트리를 다음과 같이 정의한다.모든 원소는 서로 다른 유일한 키를 갖는다.왼쪽 서브 트리에 있는 원소의 키는 그 루트의 키보다 작다.오른쪽 서브 트리에 있는 원소의 키는 그 루트의 키보다 크다.좌우 하위 트리도 각각 이진 탐색 트리 구조이다. 이러한 특징때문에 이진 탐색 트리를 중위 순회로 순회하게 되면, 정렬된 값을 읽을 수 있다. 이진 탐색 트리는 왜 중복노드를 가져서는 안될까?이진 탐색 트리는 매우 직관적이고 단순한 검색 알고리즘을 가지고 있다. 이진 탐색 트리 탐색탐색은 항상 ..
페이지 교체 알고리즘 (Page Replacement Algorithm) 페이지 교체 알고리즘이란?메모리를 관리하는 운영체제에서 페이지 부재가 발생하여 새로운 페이지를 할당하기 위해현재 할당된 페이지 중 어느 것과 교체할지를 결정하는 방법이다. OPT (Optimal)앞으로 가장 오랫동안 사용하지 않을 페이지를 교체하는 방법이다.미리 페이지의 사용 여부를 예측해야하므로 실현 가능성이 희박하다. FIFO (First In First Out)주기억장치에 가장 오래 있었던(가장 먼저 들어온) 페이지를 교체하는 방법이다. LRU (Least Recently Used)가장 오랫동안 사용하지 않은 페이지를 선택하여 교체하는 방법이다.페이지 참조의 시간적 구역성을 고려하여 FIFO 알고리즘의 모순을 개선하기 위해 고안된 방법 LFU (Least Frequently Used)사용된 횟수를 ..
꼬리재귀호출 (Tail Recursion) 재귀 호출이란?하나의 함수에서 자신을 다시 호출하여 작업을 수행하는 방식으로 주어진 문제를 푸는 방법이다.코드가 짧아져 가독성을 높일 수 있다는 장점이 있지만, 스택 오버 플로우를 일으킬 수 있다. 함수를 호출할 때 함수의 입력 값, 리턴 값, 돌아갈 위치 값 등을 스택에 저장한다.재귀 함수를 사용하면 함수가 끝나지 않은 채 계속해서 함수를 호출하므로 스택에 메모리가 쌓이게 되고,오버플로우가 발생하는 것이다. 이러한 재귀 호출의 단점을 보완하기 위한 방법으로 꼬리 재귀라는 방법이 있다. 꼬리재귀호출이란?재귀호출이 끝난 후, 현재 함수에서 추가 연산을 요구하지 않도록 구현하는 재귀의 형태이다.이를 이용하면 함수 호출이 반복되어 스택이 깊어지는 문제를 컴파일러가 선형으로처리하도록 바꿔 스택을 재사용할 수 있..
Polling과 Long Polling 보통 클라이언트와 서버 모델은 클라이언트가 요청을 하고 서버가 응답해주는 형태이다.즉, 서버는 클라이언트에게 요청이 안오면 응답해주지 않는다. 실시간 웹 구현의 한계성위와 같은 HTTP프로토콜 특성때문에 실시간을 위해 필요한 지속되는 연결을 가질 수 없다.클라이언트에서 서버에 접속하면 응답하고 연결이 끊어진다. 이 때문에 현재 웹에서 운용되는실시간 서비스(ex. 네이버 실시간 검색어)들은 대부분 실시간이 아니다. PUSH SERVERPush Server는 클라이언트의 요청이 없어도 서버가 클라이언트에게 응답을 해주는 방식이다.하지만 HTTP 프로토콜 특성 상 실제 Push Server는 구현되지 않는다. 하지만 Push Server의효과와 비슷한 모델들이 등장한다.웹 서버의 Push Server 모델은 ..
OAuth2.0 란? OAuth 2.0 을 한마디로 표현하자면웹, 앱 서비스에서 제한적으로 권한을 요청해 사용할 수 있는 키를 발급해주는 것이다. 쉽게 말하면 사용자가 페이스북이나 트위터 같은 인터넷 서비스의 기능을 다른 애플리케이션에서도사용할 수 있게 한 것이다. 플랫폼의 시대가 열리면서 IT기업에게 Open API는 가장 중요한 자산으로 자리잡았다.어떤 형식으로 API를 구성하고 어떤 포맷으로 데이터를 주고받을 것인가에 대한 싸움도 치열했는데,SOAP & XML과 REST & JSON이 경합을 벌인 끝에 REST & JSON의 승리로 끝났다.이제 새로 생기는 모든 웹서비스, 모바일 서비스들은 REST & JSON 기반으로 API를 제공하고 있으며,인증방식으로는 OAuth2.0을 택하고 있다. OAuth를 만들고 활성화 시..
쿠키(Cookie)와 세션(Session) 쿠키와 세션은 HTTP프로토콜의 약점을 보완하기 위해 존재한다. HTTP프로토콜의 경우 클라이언트가 정보를 요청하고 서버가 응답하는 방식인데이러한 통신이 끝나면 서로 접속을 끊고, 클라이언트와 서버간의 상태 정보는 유지되지 않는다. 이러한 특성때문에 통신을 유지하고 있으면 드는 자원 낭비를 크게 줄일 수 있다는 장점이 있지만,클라이언트와 서버간의 정보가 유지되지 않으므로 계속해서 인증을 해야한다는 단점이 있다. 이러한 단점을 쿠키와 세션으로 해결할 수 있다. 쿠키(Cookie)쿠키는 클라이언트에 저장되는 키와 값이 쌍으로 이루어진 작은 데이터 파일이름, 값, 만료 날짜, 경로 정보가 들어있다.일정 시간동안 데이터를 저장할 수 있어서 로그인 상태를 유지클라이언트 상태 정보를 하드디스크에 저장하였다가 필요 ..
[Java] 최대값과 최소값 구하기 자바 배열 속에서 최대값과 최소값을 구하는 방법으로는 크게 3가지 방법이 있다. 1) Arrays.sort()를 이용하는 방법자바 기본 내장 배열을 사용하였다면 Arrays.sort()를 사용하고 콜렉션을 사용하였다면Collections.sort()를 사용한다. 기본적으로 오름차순으로 정렬이 되므로 가장 첫 번째 요소가 최소값이 되고, 마지막 요소가최대값이 된다. 가장 많이 사용되는 방법이지만, 단점으로는 배열의 순서가 변경된다는 점이다. 2) for 구문으로 찾기단순하게 for구문을 돌려서 찾는 방법이다. 이 방법은 주로 배열의 순서가 유지되어야 하거나, 최대값이나 최소값의 인덱스를 알아야할 때 주로 사용된다. 3) Collections.max() / Collections.min() 사용콜렉션 배열을 ..
[Java] 문자열을 변환하기 전 정수형인지 확인하는 방법 데이터를 문자열로 입력받고 int형으로 변환하기 전에, 데이터가 정수형인지 아닌지를파악하고 싶을 때가 있다. 1) isNumber() 함수로 확인첫 번째 방법으로 isNumber()함수를 사용해서 확인하는 방법이 있다. 정수형으로 변환이 가능하면True를 리턴해준다. 하지만, 이 함수를 못 쓸 때가 있다. 2) isNumberic() 함수 직접 구현하기if(isNumeric(data[i]))public static boolean isNumeric(String s) { try { Double.parseDouble(s); return true; } catch(NumberFormatException e) { return false; } }