개발

    hashCode()

    /** * Returns a hash code value for the object. This method is * supported for the benefit of hash tables such as those provided by * {@link java.util.HashMap}. * * The general contract of {@code hashCode} is: * * Whenever it is invoked on the same object more than once during * an execution of a Java application, the {@code hashCode} method * must consistently return the same integer, provided ..

    부동소수점이란

    고정 소수점 특정 위치에 소수점을 고정하고 정수부와 소수부를 나눠 표현하는 방식 간편하고 계산이 빠르지만, 표현할 수 있는 범위가 굉장히 제한적임. 부동 소수점 IEEE에서 표준으로 제한한 방식 부동(不動) 소수점이 아니라 부동(浮動) 소수점이다. 영어 "floating = 떠 있는" 을 해석한 것 표현할 수 있는 범위가 넓지만 연산속도가 다소 느리다. 부동 소수점의 표현 방식은 "(가수) X(밑수)(지수)" 형태로 표현한다. ex) 12.3 -> 123 x 10-1 IEEE754에 정의된 것들 비트구조 부호비트 sign bit (1비트) : 0이면 양수, 1이면 음수 지수비트 exponent (8비트) : 10000111 127 + 8 = 135, 2 ^ (k - bias) 에서 k값을 나타냄. 가수비..

    상속과 조합

    상속 : 장점 재사용, 중복을 줄 일 수 있음 변화에 대한 유연성 및 확장성이 증가함 개발 시간이 단축됨 단점 : 캡슐화를 깨뜨린다. (상위 클래스와 하위 클래스가 의존하게 된다) 상위 클래스의 변경이 어려움 하위 클래스에 영향을 주기 때문에 최악의 경우 상위 클래스의 변화가 모든 하위 클래스의 영향을 줄 수 있다. 하나의 기능을 추가하기 위해 필요 이상으로 많은 수의 클래스를 추가해야 한다.(이를 클래스 폭발 문제라고 함) 다중상속을 지원하지 않음. protected로 선언할 경우 변수 메소드 까지 노출됨. 이로써 캡슐화가 중단됨 이럴 때 사용하자 확장을 고려하고 설계한 확실한 Is-a 관계일 때 확실한 is-a 관계일 때, 상위 클래스는 거의 변할 일이 없다. 하지만 is-a관계 일지라도 확장이 고려..

    자바 스레드 덤프 Thread Dump 분석

    Synchronized Block 키워드는 다음 네가지 유형의 블록에 쓰인다. 인스턴스 메소드에 Synchorinzed 키워드: 인스턴스를 기준으로 이뤄짐. 스태틱메소드에 Synchronized 키워드 : 클래스를 기준으로 이뤄짐. JVM안애 클래스 객체는 클래스당 하나만 존재 가능하므로, 오직 한 스레드만 동기화된 스태틱 메소드를 실행할 수 있다. 인스턴스 메소드 코드블록 : 특정 블록에 대해서만 동기화. 동기화 블록 안에 전달된 모니터 객체를 기준으로 동기화 됨. 스태틱 메소드 코드블록 : synchronzied 블록의 매개변수에 클래스를 넘겨, 해당 클래스를 기준으로 동기화 된다. 위를 기반으로 아래의 4가지 시나리오 대로 스레드 덤프를 분석해보고자 한다. 일반메서드에서 synchronized 블록..

    Blocking Queue 블락킹 큐

    특정 상황에 스레드를 대시하도록 하는 큐. 멀티 스레드 환경에서 사용되는 자료구조. 큐의 상태에 따라 자원의 생성과 소비를 제어할 수 있는 큐. 가득차있거나, 비어있을 경우 예외를 방지하기 위해 각각의 상황에서 큐를 블록킹함. 큐에서 원소를 빼려고 시도했는데 큐가 비어있거나, 큐에 원소를 넣으려 했는데 큐에 넣을 수 있는 공간이 없을 때, 디큐/인큐 호출 스레드를 대기하도록 한다. 비어있는 큐에서 원소를 빼려고 시도하는 스레드의 대기 상태는다른 스레드가 이 큐에 원소를 넣을 때까지 지속된다. 꽉 찬 큐에 원소를 넣으려고 시도하는 스레드의 대기 상태는 다른 스레드가 큐에서 우너소를 빼거나 큐를 클리어하거나 큐의 공간이 확보될 때 까지 지속된다.

    LockSupport.park()란

    병렬 프로그래밍에서 Thread의 성능 향상을 위해 가능한 블록되거나 컨텍스트 스위칭 되지 않도록 애쓴다. Lock-Free 알고리즘 같은 것들은 이런 노력의 일환이다. 그러나 이런 Lock-Free 알고리즘 같은 것들은 Thread의 활동성을 제한하지 않도록 하다 보니 결합이 발생했을 경우 Spin-Waiting 형태로 구현되는 경향이 있다. 경합이 많거나 구간이 큰 경우는 CPU의 낭비를 가져오는 요인이 된다. 그래서 현실적으로는 일정조건 동안의 Spin-Waiting후에는 스레드를 블록시키는, 즉 잠재우는 형태로 알고리즘을 만든다. 기존의 Java에서는 synchronizd도구 없이는 Thread를 임의로 블록시키고 다시 재기동 시킬만한 도구가 없었다. 따라서 synchronized 없이 Lock-..

    CountDownLatch란

    어떤 쓰레드가 다른 쓰레드에서 작업이 완료될 때 까지 기다릴 수 있도록 해주는 클래스입니다. 쓰레드를 여러개 실행했을 때, 일정 갯수의 스레드가 모두 끝날 때까지 기다려야만 다음으로 진행할 수 있거나, 다른 스레드를 실행시킬 수 있는 경우 사용한다. CountDownLatch는 생성할 대 1 이상의 카운트를 인자값으로 받는다. 특정 메소드 내부에서 await() 메소드로 대기 상태를 만들어 주고, count가 0이 되는 순간 대기 상태를 해제한다.

    서블릿이란

    CGI (Common Gateway Interface) 웹서버와 프로그램 사이의 데이터를 주고받는 규칙 1990년 초반 초기 HTML문서는 웹서버에서 클라이언트로의 일방적인 정보전달만 했다. 정적인 데이터(HTML, XML, 이미지 등)를 전달하는 것만으로 충분. 웹사이트에 필요한 정보를 올려두면 그 정보를 원하는 측에서 받아가거나 참조하는 단방향의 정보전달만 했었기 때문에 정보제공측과 수해측 의사효관이나 정보교환을 이뤄지지 않음 웹서버와 클라이언트간에 필요한 정보교환을 가능하게 해주는 일종의 프로그램 웹이 발달하여 입력을 받아 처리하고 그 결과를 화면에 보여주는 동적인 페이지가 필요하게 됨 사용자의 요청을 받아 정보를 동적으로 생성하고 이를 다시 클라이언트로 보내주기 위해, 서버에서 다른 프로그램을 불..

    MVC 패턴

    JSP로 구성할 수 있는 아키텍쳐는 모델1, 모델2로 나뉜다. 모델1 뷰와 로직을 모두 JSP 페이지 하나에서 처리하는 구조 자바빈(자바 클래스)이나 서비스 클래스를 사용해서 웹브라우저가 요청한 작업을 처리하고 그 결과를 클라이언트에 출력한다. 장점 구조가 단순하여 익히기 쉽다 단점 출력을 위한 뷰 로직과, 비지니스 로직을 위한 자바 코드가 함께 섞이기 때문에 코드가 복잡해짐 모델 2 JSP페이지와 서블릿, 로직을 위한 클래스가 나뉘어 브라우저 요청을 처리함 서블릿은 웹브라우저의 요청에 맞게 그 결과를 보여줄 JSP 페이지로 포워딩한다. 포워딩을 통해 컨텍스트를 받은 JSP 페이지를 결과 화면을 클라이언트에 전송한다. 이 과정에서 서블릿이 로직을 처리한다 특징 모든 요청을 단일 진입점, 하나의 서블릿에서..

    ServletContextListener

    - 웹 어플리케이션이 시작되거나 종료될 때 호출할 메서드를 정의한 인터페이스. - public void contextInitialized(ServletContextEvent sce) : 웹어플리케이션을 초기화할 때 호출 - public void contextDestroyed(ServletContextEvent sce) : 웹 어플리케이션을 종료할 때 호출. 서블릿은 다양한 시점에서 발생하는 이벤트와 이벤트를 처리하기 위해 인터페이스를 정의하고 있다. 이들 이벤트와 인터페이스를 이용하면 데이터의 초기화, 요청처리 등을 추적할 수 있게 된다. 웹 컨테이너는 컨텍스트가 시작되거나 종료되는 시점에 특정 클래스의 메서드를 수행할 수 있는 기능 제공 1. javax.servlet.ServletContextListe..