ArrayList vs LinkedList
ArrayList란? ArrayList는 크기가 가변적으로 변하는 리스트이다. 일반적인 배열로 데이터를 다룰 때에는 처음 설정한 사이즈 그대로 다뤄야 한다는 불편함이 있지만, ArrayList는 데이터 크기에 따른 배열의 사이즈를 내부에서 자동으로 관리해준다. 내부 구현 생성자 private static final Object[] EMPT...
ArrayList란? ArrayList는 크기가 가변적으로 변하는 리스트이다. 일반적인 배열로 데이터를 다룰 때에는 처음 설정한 사이즈 그대로 다뤄야 한다는 불편함이 있지만, ArrayList는 데이터 크기에 따른 배열의 사이즈를 내부에서 자동으로 관리해준다. 내부 구현 생성자 private static final Object[] EMPT...
리플렉션이란? 사전적 의미로는 ‘반사’라는 뜻을 가지고 있으며, 자바에서는 런타임 단계에서 클래스, 메서드 등의 정보를 얻어오는 기술을 뜻한다. 연못에 형상이 반사되어 비치듯이, 투영된 클래스의 정보를 얻어온다는 의미로 이러한 이름이 붙은게 아닌가 싶다. 리플렉션을 활용하는 대표적인 사례로는 Jackson과 같이 객체를 매핑해주는 라이브러리가 있...
static 이란? static은 정적으로 할당되는 변수, 함수, 클래스 등에 사용되는 키워드이다. 전역으로 공유되는 고정된 변수나 메서드를 정의할 때 사용되며, 프로그램의 생성과 동시에 static 영역에 할당되고 프로그램이 종료될 때 까지 유지된다. 사용 예시 static 키워드 사용 시 개발자가 별도의 객채 생성 과정을 거치지 않고 변수...
try with resources 란? try with resources는 자원 반납 코드를 자동으로 실행되도록 지원해주는 문법이다. 파이썬에서는 with, C#에서는 using과 같은 유사한 문법이 존재한다. 기존 방식 (try-catch-finally) 문제점 public static void main(String args[]) { ...
해시 함수란? private void hash(int x){ return x % 5; } hash(7); // 2 hash(8); // 3 hash(9); // 4 해시 함수는 입력값을 고정된 길이의 특정 값으로 출력하는 함수이다. 출력 데이터인 해시값은 동일한 입력에는 항상 동일한 값을 리턴한다. 모듈러 연산(나머지 계산...
서론 병렬 처리란 CPU의 멀티 코어를 활용, 작업의 요소를 분할해서 각각의 코어가 처리하는 것을 말한다. Java 8부터 Stream API가 도입되었고, 해당 기능을 이용해 손쉽게 병렬 처리를 구현 가능하다. 병렬 처리가 더 많은 코어를 활용하기 때문에 항상 빠르다고 생각할 수도 있으나 그렇지는 않다. 병럴성 데이터 병렬성 데이터를 분할해서...
데이터 타입 원시 타입 byte 8비트의 정수 자료형, 기본값은 0이며 -128 ~ 127의 범위를 가진다. short 16비트의 정수, 기본값은 0이며 -32768 ~ 32767의 범위를 가진다. int 32비트의 정수, 기본값은 0이며 -2147483648 ~ 2147483647의 범위를 가진다. long 64비트의 정수, 기본값은 0...
개론 어딘가에 갔을 때 그곳의 문화, 풍습에 맞게 행동하라는 말을 비유적으로 할 때 ‘로마에 가면 로마법을 따르라’ 라는 글귀를 언급하곤 한다. 그렇다면 우리는 객체지향의 세계에 입문했다면, 무조건 객체지향의 원칙들을 지켜야 하는 것일까? 물론 반드시 지킬 필요는 없다. 범법행위도 아니라서 잡혀갈 일도 없다. 그런데 왜 우리는 객체지향의 원칙들을...
개론 자바의 가비지 컬렉션 알고리즘은 기본적으로 Stop The World 이벤트를 전제하에 구성된다. Stop The World 이벤트 발생 시 모든 스레드가 일시 정지되고, 성능에 치명적이기 때문에 이를 개선하기 위해 다양한 방식의 GC가 개발되고 있다. 자바에는 어떤 GC가 존재하는지, 종류별 특징은 무엇인지 알아보자 GC의 종류 Ser...
개론 대부분의 고수준 프로그래밍 언어들은 개발자가 메모리를 직접 해제하지 않는다. 별도의 프로그램이 동적으로 할당된 메모리의 여유분을 관리하는데 이를 가비지 컬렉터라고 한다. 그에 반해 c, c++과 같이 기계에 조금 더 가까운 언어들은 메모리 관리에 대한 책임이 전적으로 개발자에게 있다. 그렇다면 가비지 컬렉터는 어떤 방식으로 작동하는지 자바의...