
이번에는 자바5 부터 멀티 쓰레드 기반의 동시성 프로그래밍을 위해 추가된 Executor, ExecutorService, ScheduledExecutorService와 Callable, Future를 살펴보도록 하겠습니다. 1. Callable과 Future 인터페이스에 대한 이해 및 사용법[ Thread와 Runnable의 단점 및 한계 ]Thread와 Runnable을 직접 사용하는 방식은 다음과 같은 한계점이 있다. 지나치게 저수준의 API(쓰레드의 생성)에 의존함값의 반환이 불가능매번 쓰레드 생성과 종료하는 오버헤드가 발생쓰레드들의 관리가 어려움 먼저 쓰레드를 어떻게 만드는지는 애플리케이션 개발자의 관심과는 거리가 먼데, Thread와 Runnable를 통한 쓰레드의 생성과 실행은 너무 저수..

이번에는 자바 초기부터 멀티 쓰레드 기반의 동시성 프로그래밍을 위해 만들어졌던 Thread와 Runnable를 살펴보도록 하겠습니다. 1. Thread와 Runnable에 대한 이해 및 사용법 [ 쓰레드와 자바의 멀티 쓰레드 ] 쓰레드란 프로그램 실행의 가장 작은 단위이다. 일반적으로 자바 애플리케이션을 만들어 실행하면 1개의 메인(main) 쓰레드에 의해 프로그램이 실행된다. 하지만 1개의 쓰레드 만으로는 동시에 여러 작업을 할 수 없다. 동시에 여러 작업을 처리하고 싶다면, 별도의 쓰레드를 만들어 실행시켜줘야 하는데, 자바는 멀티 쓰레드 기반으로 동시성 프로그래밍을 지원하기 위한 방법들을 계속해서 발전시켜 왔다. 그 중에서 Thread와 Runnable은 자바 초기부터 멀티 쓰레드를 위해 제공되었던 ..
이번에는 공변과 불공변에 대해서 먼저 알아보고, 이후에 제네릭과 와일드카드에 대해 알아보도록 하겠습니다. 많은 분들이 어려워하는 제네릭인 만큼 쉽게 풀어서 설명하려고 노력했는데, 많은 도움이 되기를 바라겠습니다. 1. 공변과 불공변[ 공변과 불공변 ]제네릭과 와일드카드에 대해 이해하기 위해서 우리는 먼저 공변과 불공변에 대해 알아야 한다. 공변과 불공변은 각각 다음과 같다.공변(covariant) : A가 B의 하위 타입일 때, T 가 T의 하위 타입이면 T는 공변불공변(invariant) : A가 B의 하위 타입일 때, T 가 T의 하위 타입이 아니면 T는 불공변 대표적으로 배열은 공변이며, 제네릭은 불공변인데 이를 코드로 살펴보도록 하자. 예를 들어 배열의 요소들을 출력하는 메소드가 있다고 하..

Spring이 제공하는 유틸성 클래스는 모두 abstract로 선언되어 있음을 볼 수 있습니다. 아마 객체의 생성을 방지하기 위한 의도였을 것 같은데, 익명 객체(Anonymous Object)를 통해 인터페이스와 추상 클래스의 객체를 바로 생성하는 방법을 살펴보도록 하겠습니다. 1. 익명 객체(Anonymous Object)를 통해 인터페이스와 추상 클래스의 객체를 바로 생성하기[ 인터페이스와 추상 클래스의 객체 생성 불가능 ]예를 들어 다음과 같은 Animal 추상 클래스가 있다고 가정을 하자.public abstract class Animal { abstract void bark(); } 우리는 추상클래스에 대해 평소처럼 객체를 생성하려고 하면 에러가 발생하게 된다. 에러 내..

이번에는 private 메소드를 테스트하는 방법에 대해 알아보도록 하겠습니다. 미리 이 글의 결론을 말씀드리면 private 메소드를 테스트하면 안된다는 것입니다. private 메소드를 테스트하는 코드를 작성하는 것은 뭔가 좋지 못한 신호이므로 private 메소드의 테스트 코드를 작성하기 보다는 현재 코드 구조나 상태 등을 확인해볼 필요가 있습니다. 1. Private 메소드를 테스트하는 방법과 이를 지양해야 하는 이유 [ Private 메소드를 테스트하는 방법 ] 문제 코드 소개 예를 들어 이미 정의된 이름 목록이 있을 때, 이를 대문자로 변환하여 해당 입력값과 일치하면 그대로 값을 반환하고 일치하지 않으면 UUID를 생성하여 반환하는 다음과 같은 코드가 있다고 하자. @Service public ..