Garbage Collection 이란 ? Garbage Collection (이하 GC)는 자바의 메모리 관리 기법 중 하나로, Heap 영역에서 제거 대상(Garbage)를 찾아내고 제거해서 힙 메모리를 회수하는 기능을 한다. 일반적으로 C, C++ 와 같은 언어에서는 이와 같은 GC가 없기 때문에 개발자가 직접 메모리 할당과 해제를 직접 관리해야 한다. 그러나 Java는 JVM내에 GC가 내장되어 있어 개발자는 메모리 관리에 신경쓰지 않고 개발에만 집중할 수 있다는 장점이 있다. 하지만 이런 GC에는 몇가지 단점이 존재하는데, GC가 메모리를 언제 해제하는지 개발자는 정확하게 알 수 없어서 제어하기 힘들다는 점이 있다. 또한 GC가 발생하는 동안에는 다른 스레드들이 일을 멈추게 되는 Stop-Th..
Study/Java
NullPointException 자바 애플리케이션에서 흔히 발생하는 오류로 NulPointerException(이하 NPE) 이 있다. NPE 에러가 발생하는 이유는 보통 객체 참조 값이 Null인 상태에서 메서드나 필드에 접근하려고 할 때 발생하게 되는데, 런타임에 발생하는 에러이기 때문에 조심해서 처리해야 한다. String str = null; int length = str.length(); // NullPointerException 에러 발생 !! System.out.println("문자열 길이 : " + length); NPE는 JDK 8 이전에는 Null 값을 메서드 내에서 예외 처리하거나 또는 Null값을 리턴한 다음 클라이언트 코드에서 Null 체크를 하는 식으로 처리해왔는데 이 방법들..
Collection Framework란 ? 컬렉션 프레임워크(Collection Framework) 란 다양한 컬렉션(데이터의 집합)을 다루기 쉽게 클래스/인터페이스로 표준화 한 것을 말한다. 컬렉션을 다루는 다양한 클래스를 정의해놓아서 사용자는 데이터를 다루는 기능을 별도로 구현할 필요가 없고, 다형성이 보장되어 있어서 구현체가 변경되어도 기존 기능을 문제 없이 사용할 수 있다 (ex) ArrayList -> LinkedList) 컬렉션 프레임워크의 대표적인 인터페이스로는 List, Set, Map, Queue가 있고 각각을 구현하는 여려 클래스가 존재한다. List, Set, Queue는 공통 기능을 추출한 Collection 인터페이스를 상속하고 있지만, Map은 구조적 특성으로 인해 독립적으로 정..
JVM이란 ? JVM이란 Java Virtual Machine의 약자로 자바 바이트 코드를 읽어서 기계어로 변환하고 실행시키는 역할을 한다. Java는 윈도우, 리눅스 등 어떠한 OS에서도 독립적으로 실행할 수 있는데, 이것이 가능한 이유는 JVM이 OS와 애플리케이션 중간에서 중재자 역할을 하며 OS에 맞는 기계어로 번역해주기 때문이다. (단, JVM은 OS 별로 존재한다) JVM은 javac 컴파일러로 컴파일된 바이트 코드(.class)를 읽어서 OS에게 할당받은 메모리 영역에 넣어두고, 동적으로 바이트 코드를 읽어서 네이티브 언어로 해석한 뒤 실행시킨다. 이외에도 Garbage Collector를 통한 메모리 관리, 네이티브 메서드 지원, 멀티 스레드를 지원하는 등 많은 역할을 한다. JVM 구조 ..
CGI 란? CGI란 웹 서버와 외부프로그램 간의 통신을 위한 인터페이스로, 클라이언트의 동적 자원 요청을 처리하기 위해 사용됩니다. 여기서 외부 프로그램(CGI 프로그램) 은 Python, C, PHP 등 여러 언어에서 CGI 인터페이스를 기반으로 구현하고, 웹 서버는 동적인 자원에 대해 요청이 발생하면 해당 CGI 프로그램을 호출한 뒤 결과를 클라이언트에게 반환합니다. 이 CGI는 클라이언트의 요청이 발생할 때 마다 매번 프로세스를 생성해서 시스템 자원을 비효율적으로 사용한다는 단점이 있는데, Java에서는 이런 단점을 보완하기 위해 CGI 대신 Servlet 기술을 사용합니다. Servlet 이란? Servlet은 자바 언어에서 CGI의 단점을 보완하며 동적으로 클라이언트의 요청을 처리하기 위해 제..
Entity Entity는 실제 DB 테이블과 매핑되는 클래스로, 테이블의 ID값을 기준으로 객체를 구분하고 비즈니스 로직을 포함한다. 실제 테이블과 매핑되기 때문에 테이블 컬럼이 추가되거나 변경될때마다, Entity 클래스 또한 변경된다. 그렇기 때문에 Entity 클래스에는 가급적 Setter를 열어두지 말고, 생성자 메소드를 따로 생성하는 전략을 사용하는 것이 좋다. (Setter로 객체를 생성하게 하면 필드가 변경될 때 마다 Setter를 사용하는 곳을 수정해야 한다.) 또한, Entity 클래스에는 테이블의 민감한 정보를 다루는 필드도 포함되어 있기 때문에 (ex) password ) API 요청값 / 응답값에 Entity 객체를 사용하지 않는 것이 좋다. 다음은 User Entity의 예시 ..