Language | Basic 30

Java의 스레드(Thread) 알아보기

개요 여러 가지 일을 병행하는 멀티태스킹은 프로세스 기반, 스레드 기반으로 구현할 수 있습니다. 프로세스 기반 여러 프로그램이 병행으로 실행되는 것 프로세스가 생성될 때마다 새로운 메모리 영역을 할당받음 프로세스 실행에 필요한 새로운 시스템 자원을 할당받음 스레드 기반 프로그램 내부에서 여러 작업이 병행으로 실행되는 것 프로그램의 프로세스에서 사용하는 자원과 메모리를 공유 스레드를 실행하기 위한 자원만 필요 스레드 == 경량 프로세스 멀티 스레드 환경에서는 모든 스레드가 종료되어야 프로그램이 종료됨 스레드의 목적 멀티 스레드를 구현해야 하는 상황 여러 사용자의 동시 요청 처리 외부 데이터 IO 작업 스레드 활용 스레드 생성 java.lang.Thread 클래스를 상속 Runnable 인터페이스를 구현해서..

서블릿(Servlet)이란

개요 클라이언트의 요청에 응답하는 자바 객체입니다. 동적으로 컨텐츠를 생성합니다. HTTP를 지원합니다. 관련 API를 사용할 수 있습니다. 웹서버에서 서비스되는 페이지입니다. MVC 패턴에서 Controller 역할을 담당합니다. 서버가 실행할 수 있는 자바 프로그램은 오직 서블릿뿐입니다. 환경설정 파일 : web.xml 웹 앱의 서비스 처리에 관한 내용이 정의되어 있는 파일입니다. 웹 서버는 web.xml의 내용대로 웹 앱 실행을 위한 설정을 완료합니다. 서블릿 디렉터리 서블릿이 공식적으로 존재하는 디렉터리입니다. 모든 Web Application Server의 구조가 동일합니다. 서블릿 디렉터리는 WEB-INF/classes입니다. 서블릿 클래스 간 관계 서블릿을 구현하려면 HttpServlet을 ..

Java의 Garbage Collection

개요 자바의 메모리 관리 방법입니다. 자바의 객체는 Runtime Data Areas의 Heap에 할당됩니다. JVM의 Heap Area 자바는 개발자가 메모리를 관리하지 않습니다. Garbage Collector가 객체의 메모리를 해제합니다. GC가 수행될 때, GC를 위한 스레드를 제외하고 모든 스레드의 작업이 중지됩니다(Stop the World). GC 튜닝은 Stop the World의 시간을 줄이는 것입니다. 가설 : Weak Generational Hypothesis 대부분의 객체는 금방 접근 불가능 상태(unreachable)가 됩니다. 오래된 객체에서 젊은 객체로의 참조는 아주 적게 존재합니다. GC 대부분의 객체는 Young 영역에서 GC(Minor GC)됩니다. Young 영역의 GC..

JVM의 Heap Area

개요 JVM의 Runtime Data Areas에서 Heap은 객체를 저장합니다. 객체에 대한 참조 변수는 Stack에 있습니다. Oracle의 Hotspot VM의 Heap 구조 Young Generation Eden 객체가 최초로 할당되는 장소 Eden이 포화상태이면 참조중인 모든 객체를 Survior로 옮깁니다. Survivor로 참조중인 객체가 모두 옮겨지면 Garbage Collection(Minor GC) 수행합니다. Survivor Survivor 1, Survivor 2로 이뤄져 있습니다. 참조중인 객체들은 하나의 Survivor 영역만 사용합니다. Old Generation Survivor 에서 오랫동안 참조되고 있는 객체는 Tenured로 이동합니다. Tenured에 온 객체는 앞으로도..

JVM(Java Virtual Machine)이란

개요 자바 프로그램이 실행되는 가상 환경 자바 개발자는 바이트 코드 파일을 배포하는 과정까지만 합니다. 사용자가 자바 프로그램을 실행하려면 JVM이 필요합니다. JVM은 바이트 코드가 각 OS에서 실행될 수 있도록 기계어로 변환하고 프로그램을 실행합니다. JVM을 통해서 플랫폼 독립적인 개발이 가능해집니다. JVM 구조 자바 프로그램은 각 OS에 최적화된 JVM 위에서 실행됩니다. Class Loader Loading : 클래스를 적재 Linking : 래퍼런스를 연결 Initialization : static 값 초기화 & 변수 할당 Memory Stack 스레드마다 런타임 스택 생성 메소드 호출을 스택 프레임으로 쌓음 스레드가 종료되면 런타임 스택도 사라짐 PC Registers 스레드마다 현재 실행..

Lambda와 함수형 인터페이스

개념 익명 함수를 의미합니다. 람다식으로 구현하는 방식을 함수형 프로그래밍이라고 합니다. 함수형 프로그래밍에서 개발자는 핵심 내용만 구현하고, 나머지는 Java에서 자동으로 처리합니다. 함수형 스타일은 서술형 스타일에 객체의 개념과 명령문을 추가하여 처리하는 스타일입니다. 인터페이스를 람다식으로 구현 람다식으로 구현하려는 인터페이스는 반드시 1개의 메서드만 선언되어야 합니다. 1개의 메서드만 구현된 인터페이스를 함수형 인터페이스라고 합니다. 기본 문법 명령문이 1개일 때 : () -> 명령문; 명령문이 여러 개일 때 : () -> {명령문1; 명령문2; ... 명령문n;} @FunctionalInterface 함수형 인터페이스를 구현할 때, 2개 이상의 추상 메서드 선언되는 오류를 방지하기 위해서 @Fu..

Stream API

개념 스트림 데이터는 처리 과정에서 임시로 존재합니다. 스트림은 필요한 작업을 수행한 후 자동으로 소멸합니다. 데이터 소스 원본을 변경하지 않고도 데이터를 처리할 수 있습니다. 구성 스트림 생성 중개 연산 스트림을 받아서 스트림을 반환합니다. 여러개의 중개 연산을 수행할 수 있습니다. 중개 연산은 일반적으로 지연 연산입니다. 최종 연산 스트림의 결과를 산출합니다. 이때 지연 연산으로 미뤄진 중개 연산을 수행합니다. 최종 연산 이후 스트림은 소멸합니다. 특징 스트림은 각 요소의 처리 방법에 관심을 두고 있습니다. 개발자가 반복문을 구현해서 요소에 접근 --> 외부 반복 스트림은 내부적으로 각 요소마다 접근 --> 내부 반복 파이프-필터 패턴 스트림은 데이터에 대해서 각종 중개 연산(필터) 후 최종 연산으로..

[JavaScript 스터디] 클래스

클래스는 함수임 새로운 객체 생성 방식 클래스 정의 class 키워드 사용 class Car {} // 클래스 선언문 const a = class {}; // 익명 클래스 표현식 const b = class Person {}; // 기명 클래스 표현식 클래스를 표현식으로 정의할 수 있다는 것 --> 일급 객체 클래스 몸체에는 0개 이상의 메서드 정의 가능 메서드 종류 constructor, 프로토타입 메서드, 정적 메서드 클래스 호이스팅 런타임 이전에 평가되어 함수 객체 생성 --> 이때 생성된 생성자 함수 객체 === constructor 클래스 선언문 이전에 일시적 사각지대 발생 클래스는 클래스 정의 이전에 참조 불가능 인스턴스 생성 인스턴스 생성이 유일한 목표 --> new 연산자와 함께 호출 메서..

[JavaScript 스터디] 클로저

함수와 그 함수가 선언된 렉시컬 환경의 조합 자바스크립트 고유의 개념이 아님 렉시컬 스코프 함수를 정의한 위치에 기반한 스코프 상위 스코프에 대한 참조는 함수 정의가 평가되는 시점에서 정의된 위치에 따라 결정됨 [[Environment]] 함수는 내부 슬롯 [[Environment]]에 상위 스코프의 참조(정의된 환경)를 저장함 따라서 자신의 상위 스코프를 [[Environment]]를 통해서 확인함 함수 렉시컬 환경의 외부 렉시컬 환경에 대한 참조에 함수 객체의 [[Environment]]에 저장된 참조값이 할당됨 클로저와 렉시컬 환경 클로저 외부 함수보다 중첩 함수가 오래 유지되는 경우, 중첩 함수는 생명주기가 종료된 외부 함수의 변수를 참조할 수 있음 중첩 함수가 상위 스코프의 식별자를 참조 + 중..

[JavaScript 스터디] 실행 컨텍스트

자바스크립트의 모든 코드를 관리하는 실체 Lexical Environment와 Variable Environment로 이뤄짐 소스코드 타입 전역 코드 : 전역에 존재하는 소스코드. 함수/클래스의 내부 코드는 포함X 전역 스코프 생성 전역 객체와 연결 코드 평가 후 전역 실행 컨텍스트 생성 함수 코드 : 함수 내부에 존재하는 소스코드 지역 스코프 생성 전역 스코프에 스코프 체인 코드 평가 후 함수 실행 컨텍스트 생성 eval 코드 : eval의 인수로 전달되는 소스코드 Strict mode에서 자신만의 독자적인 스코프 생성 코드 평가 후 eval 실행 컨텍스트 생성 모듈 코드 : 모듈 내부에 존재하는 소스코드 모듈별 모듈 스코프 생성 코드 평가 후 모듈 실행 컨텍스트 생성 소스코드의 평가와 실행 자바스크립..