개요GC, 가비지 컬렉션은 메모리 관리 기법 중 하나이다.실제 C 에서 동적할당하기 위해서는 malloc 을 사용하며 개발자는 free 메서드를 통해 명시적으로 메모리를 꼭 해제해주어야한다. 그 이유는 C 언어에 Garbage Collector 가 없기 때문이다. 그럼 Java 에서 메모리를 할당하고 해제한 경험이 있는가? 아마 대부분은 없을 것이다. 이는 Java 에서 GC 가 존재하기에 언어 자체적으로 메모리 누수를 막아주기 때문이다. 그렇다면 Java 에서는 메모리 누수에 대해 걱정할 필요가 없는가??GCGC 알고리즘Reference Counting루트 스페이스에 대해 먼저 설명하자면 이는 스택 변수, 전역 변수 등 heap 영역 참조를 담은 변수이다. 실제 heap 공간에 존재하는 변수들을 참조하..
Programming/JAVA
개요Spring 프레임워크 없이 웹 서버를 구현해보고 실제 Spring Boot 에서 사용하는 방법과 비교해보고자 한다. 웹 서버 Without Spring실제 웹 서버를 Spring 없이 구현해보자. try (ServerSocket listenSocket = new ServerSocket(port)) { logger.info("Web Application Server started {} port.", port); // 클라이언트가 연결될때까지 대기한다. Socket connection; while ((connection = listenSocket.accept()) != null) { T..
Thread in Java쓰레드란 프로그램 실행의 가장 작은 단위이다. 일반적으로는 Main 하나로 동작시키겠지만 웹 서버 등에서는 계속해서 클라이언트의 연결 요청을 받아줘야하기에 매 요청에 대해서 동시성을 지원해줘야한다.Java 버전에 따른 스레드의 발전 과정 등에 대해서 알아보자. Java 버전ThreadJava5 이전Runnable, ThreadJava6Callable, Future 및 Executor, ExecutorService, ExecutorsJava7Fork/Join 및 RecursiveTaskJava8CompletableFutureJava9FlowRunnable@FunctionalInterfacepublic interface Runnable { public abstract void..
Java의 stream의 Mapping 메서드 중에는 boxed 메서드가 있다. Mapping은 stream의 요소를 다른 요소로 대체하는 중간 처리 기능인데 boxed()는 아래와 같은 기능을 가진다. int -> Integer long -> Long double -> Double Mapping의 한 종류이기 때문에 눈으로 보이는 것은 대소문자 차이밖에 없지만 분명히 다른 요소들이다. 그럼 무엇이 다른 것인가?? 먼저 정수형 변수를 선언한는 세 가지 방법에 대해 알아보자. int a = 1; Integer b = 1; Integer c = new Integer(1); 세 번째 줄에서는 The constructor Integer(int) has been deprecated since version 9 a..
람다식은 외부 block 에 있는 변수에 접근할 수 있다. 외부에 있는 변수가 지역 변수 일 경우 final 혹은 effectively final 인 경우에만 접근이 가능하다. Java에서는 위의 두 가지 특성이 존재한다. 람다식에서는 1번 특성으로 외부 변수의 사용 여부에 따라 Capturing lambda와 Non-Capturing lambda로 나눌 수 있다. Capturing Lambda 외부 변수를 이용하는 람다식을 의미한다. 외부 변수로는 클래스 변수, 인스턴스 변수, 지역 변수로 나눌 수 있다. public class LambdaCapturing{ int num1 = 10; static int num2 = 20; public void method(){ final int num3 = 30; i..
이것이 자바다 Chap12 1. Thread.sleep은 어떤 스레드를 정지시키는 것인가? package ex1_yield; public class ex1_yieldex { // yield public static void main(String[] args) { ex1_ThreadA threadA = new ex1_ThreadA(); ex1_ThreadB threadB = new ex1_ThreadB(); threadA.start(); threadB.start(); System.out.println("---------------------------------------------------------------"); try { Thread.sleep(3); } catch (Exception e) { /..
JAVA 환경 설정이 끝난 후 Java FX 에서 두번 째 에러가 떴다. 1. e(fx)clipse 플러그인을 다운받는다. Help -> Eclipse Marketplace 에서 fx를 검색 후 다운받을 수 있다. 2. JavaFX Scene Builder를 다운받는다. 오라클 홈페이지에서 다운받을 수 있으며 나중에 경로를 사용해야하니 파일을 잘 옮겨놓자. 3. 새로운 프로젝트를 생성할 때, New -> Other.. -> JavaFx Project 를 선택하면 아래와 같은 화면이 나오며 에러가 뜬다. 아직 라이브러리를 추가하지 않았기 때문이다. 4. 프로젝트를 우클릭 후 Build Path -> Add Libraries.. -> User Libraries 를 들어가면 아래와 같은 창이 뜬다. User ..
군대에서 격오지에서 상황병 근무를 서면서 컴퓨터를 뒤져보니 우연히 JAVA 가 깔려있던 것을 찾아냈다. 그때 처음으로 JAVA 문법 책을 샀고 메모장을 켜서 코딩하다가 대대에 와서 싸지방에서 제대로 한번 해봤다. 사실 상황병 컴퓨터는 인터넷 연결도 안되있어서 에러 검색도 못하고 뭐 제대로된거 하나 할 수 없었다 ㅋㅋ JAVA를 시작할 때, 환경설정부터 삐걱거렸던 경험이 있기에 개발 환경 구축하기 까지 한번 써보려한다. 1. Oracle 에서 JDK 를 다운받는다. 2. JAVA 환경 변수를 설정한다. 2-1. 제어판 -> 시스템 및 보안 -> 시스템 -> 고급 시스템 설정 -> 환경 변수 2-2 JDK 파일의 위치를 복사한다. 본인의 경우는 C:\Program Files\Java\jdk-11.0.9 이다..