이진 탐색 트리(binary search tree, BST)트리로 구현된 맵의 성능을 시험. MyTreeMap 클래스를 구현하고, 문제점을 알아본 후 자바의 TreeMap 클래스가 어떻게 문제를 해결했는지 알아보자. 내부 class인 Node 클래스를 구현1234567891011protected class Node{ public K key; public V value; public Node left = null; public Node right = null; public Node(K key, V value){ this.key = key; this.value = value; }}cs 노드를 찾는 findNode 메서드 구현1234567891011121314151617181920212223private No..
분류 전체보기
이진 탐색 트리(binary search tree, BST)요소가 정렬된 Map 인터페이스를 구현할 때 유용하게 쓰임 해싱의 문제점HashMap 클래스의 연산이 상수 시간이더라도 해싱이 느릴 수 있음(상수가 꽤 커질 수 있음)해시 함수를 설계하는 것이 쉬운일이 아니며, 키가 특정하위 맵에 집중되면 성능이 나빠질 수 있음키는 어떤 순서대로 저장되지 않음(테이블이 커지고 키가 재해시될 때 변하기도 함). 어떤 응용 프로그램에서는 키를 순서대로 유지하는 것이 필요하거나 유용할 때가 존재 Java에서는 TreeMap클래스를 제공TreeMap은 해시 함수를 사용하지 않음. 해싱 비용과 해시 함수를 고르는 어려움을 피할 수 있음키는 이진탐색트리에 저장되는데, 선형시간으로 키를 순서대로 순회할 수 있음핵심 메서드는 ..
객체 생성을 막을 때는 private 생성자를 사용하라때로 정적 메서드나 필드만 모은 클래스를 만들고 싶을 때가 있다.자바의 기본 자료형 값(primitive value) 또는 배열에 적용되는 메서드를 한군데 모아둘 때 유용하다. (java.lang.Math 나 java.lang.Array)특정 인터페이스를 구현하는 객체를 만드는 팩터리 메서드 등의 정적 메서드를 모아놓을 때도 사용할 수 있다. (java.util.Collections) 이런 유틸리티 클래스(utility class)들은 객체를 만들 목적의 클래스가 아니기 때문에 private 생성자를 클래스에 넣어 객체 생성을 방지해야 한다.(생성자를 생략하면 컴파일러는 자동으로 인자 없는 기본 생성자를 생성한다.)
JAVA 설치톰캣을 설치하기 위해 JDK가 설치되어 있는지 확인해야 한다.java -version미설치시, java8 설치apt-get install openjdk-8-jre0headless Tomcat 설치apt-get updateapt-get install tomcat8http://서버ip:8080 으로 접속하여 톰캣이 실행되있는지 확인AWS에서 Inbound(8080)을 열어줘야 확인이 가능하다.tomcat의 기본 경로는/var/lib/tomcat8/webapps/ROOT 이며/etc/tomcat8/server.xml 에서 경로 설정을 할 수 있다.
Apache2 폴더구조우분투는 일반적인 리눅스 배포판들과 apache의 설정이 조금 상이하다.우분투 -> apache2CentOS, RedHat -> httpd 조심하자.. 설정 디렉토리 구조/etc/apache2설정파일 루트 위치 /etc/apache2/apache2.conf기본 설정 파일로, 다른 배포판에서는 httpd.conf를 사용하지만 우분투에서는 apache2.conf를 사용한다. /etc/apache2/envvarsapache2ctl 환경설정 파일 /etc/apache2/magic파일의 시작값(magic number) 데이터베이스. 이 값에 기반해 전송하는 파일의 MIME Type을 결정한다. (가급적 수정 금지) /etc/apache2/mods-available사용가능한 Apache 모듈을..
아파치(Apache) 설치하기 apt-get(Advanced Packaging Tool) 은 우분투(Ubuntu)를 포함한 데미안계열의 리눅스에서 쓰이는 패키지 관리 명령어 도구이다. appstore와 같은 개념으로 보면 될것 같다. ssh에 접속하여 아래와 같은 명령어를 실행한다. sudo apt-get install apache2 만약에 에러가 뜬다면 appstore를 최신으로 만들어야 한다. sudo apt-get update update를 받은 후 다시 install을 실행 apache2가 정상적으로 설치되었는지 확인하려면, 아래와 같은 명령어를 사용한다. apache2 -v 정상적으로 설치가 됬으면 apache2의 버전정보가 출력될 것이다. apache2 구동 명령어는 아래와 같다. 1 2 3 ..
apply()와 call() 메서드를 사용하여 호출하기 apply(), call() 메서드는 명시적으로 함수 컨텍스트를 지정할 수 있는 메서드이다. apply() 메서드 두 개의 매개변수를 전달한다. 하나는 함수 컨텍스트로 사용할 객체, 다른 하나는 인자 값을 담은 배열이다. call() 메서드apply()메서드와 비슷하지만, 인자를 배열로 전달하지 않고 인자 목록으로 직접 전달한다. 사용방법을 살펴보자12345678910111213141516function juggle(){ var result = 0; for(var n=0; n 함수 호출시 임의의 객체를 함수 컨텍스트로 지정할 수 있다. 콜백의 함수 컨텍스트를 강제로 지정하기함수 컨텍스트로 강제 지정하는 구체적인 예제를 살펴보자일반적인 명령형 프로그래..
생성자로 호출“생성자로” 함수를 호출하려면 함수 호출 앞에 new키워드를 붙인다. 생성자의 강력함생성자로 함수를 호출하는 것은 자바스크립트만의 강력한 기능이다. 특별한 행동이 일어나기 때문이다비어있는 객체가 새로 생성된다.새로 생성된 객체는 this 매개변수로 생성자 함수에 전달되고, 따라서 생성자의 함수 컨텍스트가 된다.어떤 명시적인 반환 값이 없다면, 새로 생성된 객체가 생성자의 값으로 반환된다. 생성자의 목적은 새로 생성한 객체의 내용을 설정하고, 새 객체를 생성자의 값으로 반환하는 것이다. 12345678function Ninja(){ this.skulk = function() { return this; };} var ninja1 = new Ninja();var ninja2 = new Ninja(..
메서드로 호출 함수를 객체의 프로퍼티로 할당하고, 그 프로퍼티를 사용하여 “참조에 의한 호출”이 일어나면, 함수는 그 객체의 메서드로 호출된다.123var o = {};o.whatever = function(){};o.whatever(); // 참조에 의한 호출cs우리가 어떤 객체의 메서드로 함수를 호출하면, 그 객체는 함수 컨텍스트가 되고 함수 내에서 this 매개변수로 참조할 수 있다. 앞에서 “함수로 호출”에서 함수는 window에 “속하고”, window는 함수 컨텍스트로 설정된다. 하지만 위의 예제에서는 객체 o가 함수 컨텍스트가 된다. 다음은 함수 호출과 메서드 호출의 차이점을 나타내는 코드이다.123456789101112131415function creep{ return this; }cree..
함수의 호출_1 (함수로의 호출) 함수가 호출되는 방식은 코드 작동 방식에 큰 영향을 미치는데, 특히 this 매개변수가 어떻게 설정되는지를 결정한다. (Javascript를 파고들면 정말 중요해진다.) 함수를 호출하는 데에는 실제로 네 가지 다른 방법이 있다. 함수로 호출. 복잡할 것 없이 익숙한 방식으로 함수를 호출한다. 메서드로 호출. 함수 호출과 객체는 서로 묶여있는데, 이는 객체 지향 프로그래밍을 가능케 한다. 생성자로 호출. 이는 새로운 객체를 생성한다.함수의 apply()나 call()메서드를 통해 호출한다. 함수로 호출 일반적인 호출 방법으로 다른 호출 메커니즘(메서드, 생성자, apply/call)과 구분하기 위한 것이다. 메서드, 생성자, apply/call를 통해 함수를 호출하지 않는..