1. Nested Class(중첩 클래스)에 대한 자바 스펙 문서 정리 [ Nested Class(중첩 클래스)에 대하여 ] 자바에서는 한 클래스 내에서 다른 클래스를 정의할 수 있는데, 이를 nested 클래스라고 한다. nested 클래스는 다시 static 클래스와 non-static 클래스로 나눌 수 있다. static: static nested class라고 부름 non-static: inner class라고 부름 class OuterClass { // inner class 라고 부름 class InnerClass { ... } // static nested class 라고 부름 static class StaticNestedClass { ... } } nested 클래스는 해당 클래스를 둘러싸는..
아래의 내용은 DZone의 포스팅을 바탕으로 참고하여 정리한 내용입니다. 1. 중복 문자열 제거를 통한 메모리 절약을 위한 -XX:+UseStringDeduplication GC 옵션 [ 중복 문자열의 개념과 예시 ] 중복 문자열이란? JDK 개발팀의 조사에 따르면 다음과 같은 자바 애플리케이션의 특징이 있다고 한다. 프로세스의 25%는 문자열임 그 중 13.5%는 중복 문자열임 평균 문자열의 길이는 45자임 중복된 문자열이라 함은 다음과 같이 동일한 내용을 갖지만 별도로 저장된 객체를 의미한다. 둘을 equals로 비교하면 true가 나오지만, ==으로 비교하면 false가 나온다. 이러한 문자열을 우리는 중복 문자열이라고 한다. String string1 = new String("MangKyu"); ..
1. 기존 동시성 프로그래밍의 한계와 새롭게 도입될 구조적 동시성 (Structured Concurrency) [ 비구조적 동시성의 한계 ] ExecutorService를 이용한 동시성 적용 개발을 하다 보면 하나의 작업이 여러 개의 하위 작업(Task)들로 나누어지는 경우가 있다. 일반적인 단일 스레드 애플리케이션에서는 하위 작업들이 순차적으로 실행될 것이다. 하지만 만약 각각의 작업이 서로 독립적이고 하드웨어 리소스가 충분하다면, 이를 동시에 실행하여 전체 작업을 더 빠르게 그리고 더 적은 지연 시간으로 처리할 수 있을 것이다. 예를 들어 User와 Order API를 호출하여 얻어온 결과를 사용하는 코드가 있다고 하자. 이때 각각의 I/O 작업이 자체 스레드에서 동시에 실행된다면 더 빠를 것이므로,..
1. 자바는 Call By Value(Pass By Value) 방식으로만 동작한다 [ 자바 개발자 제임스 고슬링의 얘기 ] 아래의 내용은 자바 언어의 창시자인 제임스 고슬링(James Gosling)이 집필한 “The Java Programming Language”의 일부 내용이다. 어떤 사람들은 객체가 참조로 전달(by reference)된다고 잘못 말한다. 프로그래밍 언어 설계에서 참조 전달(pass by reference)은 인수가 함수에 전달될 때 그 값의 복사본이 아니라 원래 값의 참조를 전달받음을 의미한다. 만약 함수가 전달받은 매개변수를 변경하면 함수를 호출한 코드도 동일한 메모리 슬롯을 사용하므로 값이 변경되어야 한다. 자바는 객체를 참조로 전달하지 않는다(not pass objects ..
1. 언제 추상 클래스(Abstract Class) 또는 인터페이스(Interface)를 사용해야 하는가? [ 인터페이스와 추상 클래스의 특징 ] 인터페이스 인터페이스(Interface)는 상호 작용 방식을 명세해둔 것이다. 인터페이스의 호출자는 인터페이스의 구현에 대한 지식 없이도 원하는 기능을 수행할 수 있어야 한다. 예를 들어 우리는 자동차가 어떻게 움직이는지 세부 구현을 모르지만, 엑셀을 밟으면 앞으로 가고 브레이크를 밟으면 멈춘다는 약속을 통해 자동차를 운전할 수 있다. 따라서 인터페이스는 일종의 계약(contract)이라고도 불린다. 추상 클래스 추상 클래스(Abstract Class)는 인터페이스와 유사하다. 인터페이스와 마찬가지로 인스턴스화 할 수 없으며, 구현을 포함하거나 포함하지 않은 ..