HOME > java

Java - FixedThreadPool(ThreadPoolExecutor) 사용 방법

newFixedThreadPool()로 고정된 쓰레드 개수의 쓰레드풀을 생성할 수 있습니다. ThreadPoolExecutor로 리턴되며, 이 Threadpool에 Task를 추가하여 병렬처리할 수 있습니다. shutdown(), shutdownNow(), awaitTermination() 등의 함수를 제공하여 작업이 완료되는 것을 기다릴 수 있습니다.

09 Nov 2019

Java - Runnable과 Callable의 차이점

Thread는 Runnable과 Callable의 구현된 함수를 수행한다는 공통점이 있습니다. 하지만 Runnable은 어떤 객체도 리턴하지 않지만 Callable은 특정 타입의 객체를 리턴한다는 차이점이 있습니다. Thread 외에 ExecutorService도 이 둘을 구현 메소드를 수행할 수 있습니다.

03 Nov 2019

Java - ScheduledThreadPoolExecutor 사용 방법

ScheduledThreadPoolExecutor는 작업을 일정 시간 뒤에 수행하거나, 일정 dealy 간격으로 주기적으로 실행할 수 있습니다. schedule, scheduleAtFixedRate, scheduleWithFixedDelay 등의 메소드를 제공합니다. Callable이나 Runnable을 인자로 받으며 람다식(Lambda)으로 전달할 수 있습니다.

02 Nov 2019

Java - AtomicIntegerArray 사용 방법

AtomicIntegerArray는 int[] 자료형을 갖고 있는 wrapping 클래스입니다. 멀티쓰레드 환경에서 동시성을 보장합니다. volatile과 다르게 여러 쓰레드에서 값을 write해도 동시성이 보장됩니다. get, set, getAndSet, compareAndSet 등의 함수를 제공해 줍니다.

01 Nov 2019

Java - AtomicInteger 사용 방법

AtomicInteger는 int 자료형을 갖고 있는 wrapping 클래스입니다. 멀티쓰레드 환경에서 동시성을 보장합니다. volatile과 다르게 여러 쓰레드에서 값을 write해도 동시성이 보장됩니다. get, set, getAndSet, compareAndSet 등의 함수를 제공해 줍니다.

01 Nov 2019

Java - 시간(Time), 날짜(Date) 비교하는 방법

자바에서 시간(Time), 날짜(Date) 비교하는 방법을 소개합니다. Java8에서 LocalDateTime, LocalDate, LocalTime, ZonedDateTime가 제공됩니다. 이 API에서 날짜/시간을 비교할 수 있습니다. Java8 이전에 사용했던 Date, Calendar로 날짜/시간을 비교할 수 있습니다.

01 Nov 2019

Java - JSON을 파싱하는 방법

org.json 라이브러리를 사용하여 JSON을 파싱하는 방법을 소개합니다. JSON은 Object, Array, Key-Value 타입으로 이루어져 있으며 Value는 String, Int, Long, Boolean 등의 타입을 지원합니다.

01 Nov 2019

Java - LocalDateTime을 TimeStamp로 변경하는 방법

java.time.LocalDateTime을 java.sql.Timestamp으로 변경할 수 있습니다. LocalDateTime, LocalDate은 JAVA8에서 추가된 Time API입니다.

31 Oct 2019

Java - ZonedDateTime을 TimeStamp로 변경하는 방법

java.time.ZonedDateTime을 java.sql.Timestamp으로 변경할 수 있습니다. ZonedDateTime은 JAVA8에서 추가된 Time API입니다.

31 Oct 2019

Java - Char 배열을 String으로 변환하는 방법

Char 배열을 String으로 변환하는 방법입니다. String의 생성자, String.valueOf(), StringBuilder, Stream 등을 이용하여 String으로 변환할 수 있습니다.

31 Oct 2019

Java - String을 Char 배열로 변환하는 방법

String을 Char 배열로 변환하는 방법입니다. String.toCharArray(), Stream 등을 이용하여 Char 배열로 변환할 수 있습니다.

31 Oct 2019

Java - Comparable로 정렬(Sorting)하는 방법

Comparable은 인터페이스로 이 인터페이스를 클래스가 구현하면 리스트 등을 정렬하는데 사용할 수 있습니다. compareTo() 메소드의 리턴 값은 음수, 양수, 0이 될 수 있습니다. 음수가 리턴되면 인자의 순서가 아래로 내려갑니다.

31 Oct 2019

Java - Comparator로 정렬(Sorting)하는 방법

Comparator 객체를 생성하여 Collections나 배열 등을 정렬할 수 있습니다. Comparator는 익명 클래스 또는 람다식으로 만들 수 있습니다. compare()의 리턴 값은 음수, 양수, 0이 될 수 있습니다. 음수가 리턴되면 오른쪽 인자가 아래로 내려갑니다.

31 Oct 2019

Java - HashSet.add() 사용 방법 및 예제

HashSet의 add() 메소드는 인자로 전달된 아이템을 HashSet에 저장합니다. 그리고 HashSet에 존재하지 않는 아이템이라면 true, 존재하는 아이템이라면 false를 리턴합니다. 저장되는 아이템은 null이 허용되지만, 중복된 값은 허용되지 않습니다. 또한, 저장되는 순서는 보장되지 않습니다.

28 Oct 2019

Java - HashSet.remove() 사용 방법 및 예제

HashSet의 remove()는 인자로 전달된 아이템을 삭제합니다. removeAll()은 Collection의 아이템들을 모두 삭제하며, removeIf()는 람다식을 충족하는 아이템들을 모두 삭제합니다. 이 메소드들은 아이템을 삭제하면 true를 리턴하며 그렇지 않으면 false를 리턴합니다.

28 Oct 2019

Java - AtomicBoolean 사용 방법

AtomicBoolean는 boolean 자료형을 내부에 갖고 있는 wrapping class입니다. 멀티쓰레드 환경에서 동시성을 보장합니다. volatile과 다르게 여러 쓰레드에서 값을 write해도 동시성이 보장됩니다. get, set, getAndSet, compareAndSet 등의 함수를 제공해 줍니다.

27 Oct 2019

Java - HashMap.forEach() 사용 방법 및 예제

HashMap을 순회할 때 forEach()를 사용할 수 있습니다. forEach()는 인자로 함수형 인터페이스를 받습니다. EntrySet.forEach()와 KeySet.forEach(), Values.forEach() 등도 forEach 메소드를 갖고 있습니다. 이것도 인자로 함수형 인터페이스를 받습니다.

17 Oct 2019

Java - HashMap 사용 방법 및 예제

HashMap은 Map의 일종으로 key와 value의 쌍으로 이루어진 데이터를 보관합니다. HashMap은 데이터의 저장순서를 보장하지 않으며 null을 허용합니다. 또한 put, putAll, get, remove, keySet, values 등의 API들을 제공합니다. 예제를 통해 어떻게 해시맵을 사용하는지 알아보겠습니다.

17 Oct 2019

Java - HashSet 사용 방법 및 예제

Set는 List와 다르게 순서가 보장되지 않는 자료구조입니다. HashSet은 중복된 값을 허용하지 않고, 순서를 보장하지 않고, null 값을 저장할 수 있습니다. 내부적으로 HashMap을 이용하여 데이터를 저장합니다. add(), remove(), removeIf(), removeAll() 등 각각의 메소드를 사용한 예제를 만들어보겠습니다.

16 Oct 2019

Java - Reflection 쉽고 빠르게 이해하기

자바의 리플렉션(Reflection)은 클래스, 인터페이스, 메소드들을 찾을 수 있고, 객체를 생성하거나 변수를 변경할 수 있고 메소드를 호출할 수도 있습니다. Reflection은 Class, Constructor, Method, Field와 같은 정보를 가져올 수 있습니다. 정보를 찾는 방법과 메소드 호출 및 변수를 변경하는 방법에 대해서 알아보겠습니다.

14 Oct 2019

Java8 - 메소드 레퍼런스(Method Reference)

메소드 레퍼런스(Method Reference)는 Lambda 표현식을 더 간단하게 표현하는 방법입니다. 메소드 레퍼런스는 사용하는 패턴에 따라 다음과 같이 분류할 수 있습니다. Static 메소드 레퍼런스, Instance 메소드 레퍼런스, Constructor 메소드 레퍼런스가 있습니다.

04 Oct 2019

Java8 - Interface의 Default Methods

Java8에서 인터페이스에 디폴트 메소드(Default methods)라는 것이 생겼습니다. 디폴트 메소드를 사용하여 인터페이스의 메소드를 선언뿐만 아니라 구현도 할 수 있습니다. 디폴트 메소드를 정의하는 방법과 implements, extends될 때 고려해야할 부분에 대해서 알아보겠습니다. 추상클래스(abstract class)와의 차이점도 알아보겠습니다.

04 Oct 2019

Java8 - 함수형 인터페이스(Functional Interface) 정리

함수형 인터페이스는 1개의 추상 메소드를 갖고 있는 인터페이스를 말합니다. Single Abstract Method(SAM)라고 불리기도 합니다. 함수형 인터페이스를 사용하는 이유는 자바의 람다식은 함수형 인터페이스로만 접근이 되기 때문입니다. 자바는 Runnable, Supplier, Consumer, Function, Predicate 등의 기본 Functional Interface를 제공합니다.

04 Oct 2019

Java8 - SummaryStatistics 예제

SummaryStatistics는 count, min, max, sum average 등의 statistics 정보를 계산해주는 클래스입니다. 그리고 스트림과 함께 사용할 수 있도록 디자인하였습니다. IntSummaryStatistics, LongSummaryStatistics, DoubleSummaryStatistics 클래스로 여러 자료형을 지원합니다.

03 Oct 2019

Java - Try-with-resources로 자원 쉽게 해제하기

try-with-resources는 try(...)에서 선언된 객체들에 대해서 try가 종료될 때 자동으로 자원을 해제해주는 기능입니다. 객체가 AutoCloseable을 구현하였다면 Java는 try구문이 종료될 때 close()를 호출해 줍니다. 코드를 간결하게 만들어 읽기 쉽고 유지보수가 좋은 코드를 작성할 수 있게 도와줍니다.

01 Oct 2019

Java - String의 indexOf, lastIndexOf 사용 방법

자바 String의 indexOf()와 lastIndexOf()의 사용 방법에 대해서 정리하였습니다. indexOf와 lastIndexOf는 String에서 특정 문자열의 인덱스를 찾는데 사용하는 메소드입니다.

18 Jul 2019

Java - String의 startsWith, endsWith 사용 방법

자바 String의 startsWith(), endsWith() 메소드의 사용 방법에 대해서 정리하였습니다. startsWith()는 어떤 String이 특정 문자열로 시작하는지를 boolean 타입으로 리턴해줍니다. 반대로 endsWith()는 특정 문자열로 끝나는지 boolean 타입으로 리턴해줍니다.

18 Jul 2019

Java - ArrayList.clone() 사용 방법 및 예제

ArrayList의 clone() 메소드는 ArrayList의 복사본을 리턴합니다. 내부의 아이템들은 얕은복사로 생성됩니다. 내부 코드를 보면 새로운 ArrayList를 생성하고, 리스트의 아이템들을 깊은 복사를 하지 않고 얕은 복사(shallow copy)로 새로운 ArrayList에 set합니다. 예제를 통해 알아보겠습니다.

29 Mar 2019

Java - ArrayList.clear() 사용 방법 및 예제

ArrayList의 clear()는 리스트의 객체를 모두 삭제하는데 사용되는 메소드입니다. 코드를 보면 내부의 배열을 모두 null로 초기화하고 size를 0으로 설정합니다. 예제를 통해 어떻게 사용하고 결과가 어떻게 되는지 알아보겠습니다.

28 Mar 2019

Java - ArrayList.contains() 사용 방법 및 예제

ArrayList의 contains()는 리스트 안에 어떤 객체가 있는지 확인하는데 사용하는 메소드입니다. 객체를 인자로 전달받고, 리스트에 그 객체가 존재하면 true를 리턴합니다. 그렇지 않으면 false를 리턴합니다. 객체 존재 유무로 boolean을 리턴하기 때문에, if와 함께 사용할 수 있습니다.

28 Mar 2019

Java - ArrayList.get() 사용 방법 및 예제

ArrayList의 get()는 리스트에서 어떤 객체를 가져오는데 사용되는 메소드입니다. 만약 리스트 크기보다 큰 인덱스를 인자로 전달하면 IndexOutOfBoundsException를 발생시킵니다. 예제를 통해 어떻게 사용하고 어떨 때 예외가 발생할 수 있는지 알아보겠습니다.

28 Mar 2019

Java - ArrayList.forEach() 사용 방법 및 예제

ArrayList의 forEach()는 리스트를 순회(iterate)하는데 사용되는 메소드입니다. Consumer 객체를 인자로 받으며 리스트의 모든 아이템에 대해서 Consumer.accept()가 수행되도록 합니다. 또한, 인자는 람다로 표현할 수 있어 코드를 더욱 간단하게 만듭니다. 예제로 알아보겠습니다.

28 Mar 2019

Java - ArrayList.indexOf() 사용 방법 및 예제

ArrayList의 indexOf()는 인자로 전달된 객체가 리스트에 존재한다면, 아이템의 인덱스를 리턴합니다. 앞쪽부터 인자와 동일한 객체가 있는지 찾으며, 존재한다면 그 인덱스를 리턴합니다. 없다면 `-1`을 리턴합니다. 동일한 객체가 2개 이상 존재할 때, 가장 앞에 위치한 객체의 인덱스를 리턴합니다.

28 Mar 2019

Java - ArrayList.lastIndexOf() 사용 방법 및 예제

ArrayList의 lastIndexOf()는 인자로 전달된 객체가 리스트에 존재한다면, 아이템의 인덱스를 리턴합니다. 리스트의 뒤쪽부터 인자와 동일한 객체가 있는지 찾으며, 존재한다면 그 인덱스를 리턴합니다. 없다면 -1을 리턴합니다. 리스트에 동일한 객체가 2개 이상 존재할 때, 가장 뒤쪽에 위치한 객체의 인덱스를 리턴합니다.

28 Mar 2019

Java - ArrayList.addAll() 사용 방법 및 예제

ArrayList의 addAll() 메소드는 인자로 전달되는 Collection 객체의 모든 아이템을 리스트에 추가합니다. ArrayList.addAll(Collection c)는 콜렉션의 모든 것을 리스트 마지막에 추가합니다. ArrayList.addAll(int index, Collection c)는 특정 인덱스부터 추가합니다.

27 Mar 2019

Java - ArrayList.removeAll() 사용 방법 및 예제

ArrayList의 removeAll() 메소드는 인자로 전달된 Collection의 아이템들과 일치하는 객체를 리스트에서 삭제합니다. 인자로 콜렉션을 받으며 리스트에 콜렉션의 아이템과 동일한 객체가 있다면 모두 삭제해 줍니다. 예제를 통해 어떻게 사용하는지 알아보겠습니다.

27 Mar 2019

Java - ArrayList.remove() 사용 방법 및 예제

ArrayList의 remove()는 리스트의 객체를 삭제하는데 사용되는 메소드입니다. ArrayList.remove(int index)는 인자로 전달된 인덱스의 아이템을 리스트에서 삭제합니다. ArrayList.remove(Object o)는 인자와 동일한 객체를 리스트에서 삭제합니다. 예제를 통해 자세히 알아보겠습니다.

27 Mar 2019

Java - ArrayList.removeIf() 사용 방법 및 예제

ArrayList의 removeIf() 메소드는 인자로 전달된 조건으로 리스트의 아이템들을 삭제합니다. ArrayList.removeIf(Predicate<? super E> filter)`는 인자로 Predicate를 받습니다. Predicate는 람다 표현식으로 전달할 수 있으며, 리스트에서 아이템을 필터링하는 조건을 표현하고 있습니다.

27 Mar 2019

Java - ArrayList.add() 사용 방법 및 예제

ArrayList의 add() 메소드는 인자로 전달된 객체를 리스트에 추가합니다. 인자가 다른 두개의 메소드가 있습니다. ArrayList.add(E e)는 리스트에 인자로 전달된 객체를 추가합니다. ArrayList.add(int index, E e) 인자의 인덱스에 해당하는 위치에 객체를 추가합니다.

25 Mar 2019

Java - 현재 작업 디렉토리(Working directory) 구하는 방법

프로그램 실행 중에 현재 작업 디렉토리를 가져올 수 있습니다. 첫번째는 System.getProperty("user.dir")로 작업 디렉토리에 대한 경로를 가져오는 방법이고, 두번째는 현재의 상대경로를 절대경로로 변환하는 방법이 있습니다. 두가지 방법에 대해서 알아보겠습니다.

23 Mar 2019

Java - 현재 날짜 및 시간 가져오는 방법

현재 날짜 및 시간을 가져오고 다양한 형식으로 출력하는 것을 알아보겠습니다. 이 글의 예제는 LocalDateTime와 DateTimeFormatter을 사용하여 날짜 및 시간을 출력하였습니다. 또한 DateTimeFormatter를 사용하여 다양한 형태로 날짜를 출력하고, 또는 자신이 원하는 형태로 날짜를 출력하도록 하였습니다.

23 Mar 2019

Java - Date에 년,월,일을 더하고 빼는 방법

Date에 날짜를 더하는 다양한 방법에 대해서 알아보겠습니다. Date 객체에 월, 일을 추가하는 방법을 알아보겠습니다. 그리고 두개의 Date 객체를 더하는 방법을 알아보겠습니다. Date는 1970년을 기반으로 측정된 시간이기 때문에 `Calendar`를 이용하여 날짜 연산을 하였습니다.

23 Mar 2019

Java - String을 파싱하여 LocalDate로 변환하는 방법

LocalDate와 DateTimeFormatter 라이브러리를 이용하면 문자로 된 날짜를 Date 객체로 변환할 수 있습니다. 스트링을 Date객체로 변환하면 날짜 계산 등 데이터를 처리하는데 편리합니다. 예제를 통해 어떻게 문자열을 LocalDate 객체로 변환할 수 있는지 알아보겠습니다.

23 Mar 2019

Java에서 Map과 List를 순회하는 방법

자바에서 List와 Map을 순회하는 방법은 여러가지입니다. Map은 Map.Entry를 가져오는 방법, key를 가져오는 방법 그리고 forEach와 람다표현식으로 간단히 루프 코드를 구현할 수 있습니다. List도 for로 순회를 하거나, forEach와 람다 표현식으로 구현할 수도 있습니다.

22 Oct 2018

Java8의 Stream reduction 사용 방법

reduce는 Stream의 데이터를 변환하지 않고, 더하거나 빼는 등의 연산을 수행하여 하나의 값으로 만들 수 있습니다. 예를 들어 수열을 계산하는데 사용할 수 있습니다. 또한 병렬처리를 적용하여 연산 속도를 향상시킬 수 있습니다.

09 Oct 2018

Java8의 Stream Collect 사용 방법

Collect는 Stream의 데이터를 변형 등의 처리를 하고 원하는 자료형으로 변환해 줍니다. List 또는 Set 자료형으로 변환하거나, joining 또는 Sorting하여 1개의 객체를 리턴하기도 합니다. 또는 아이템들의 평균 값을 리턴해주기도 합니다. Collectors는 collect를 보다 편하게 사용하게 도와주는 라이브러리입니다.

09 Oct 2018

Java8의 Stream find, match 사용 방법

find는 스트림에서 찾은 아이템을 리턴해 줍니다. 관련 함수는 findFirst()와 findAny()가 있습니다. match는 스트림에서 찾고자 하는 특정 아이템이 있으면 true를 리턴해줍니다. 관련 함수들로 anyMatch(), allMatch(), noneMatch()이 있습니다.

15 Jul 2018

Java8의 Optional 사용 방법

Optional은 어떤 객체를 wrapping하는 객체입니다. 어떤 객체를 포함할 수 있고 또는 null 객체를 포함할 수 있습니다. Optional.of, Optional.empty, Optional.filter, Optional.ofNullable, Optional.orElseGet 등의 사용방법을 알아보겠습니다.

15 Jul 2018

Java8의 Stream max, min 사용 방법

max는 Comparator로 스트림의 아이템들을 모두 비교하여 가장 큰 값 1개를 리턴합니다. min은 반대로 가장 작은 값을 넘겨줍니다. Comparator는 함수의 인자로 전달하고, 직접 구현할 수 있기 때문에 자신이 원하는 조건을 비교하는데 적용할 수 있습니다.

14 Jul 2018

Java8의 Stream sorted 사용 방법

sorted는 스트림의 아이템들을 정렬하여 새로운 스트림을 생성합니다. 이를 사용하려면 정렬하려는 객체에 대한 Comparable가 구현되어야 합니다. comparing(String::length), sorted(Comparator), sorted() 등의 사용 방법을 알아보겠습니다.

14 Jul 2018

Java8의 Stream concat 사용 방법

Concat은 두개의 Stream을 하나의 스트림으로 합치는데 사용됩니다. 예를 들어, Concat은 두개의 스트림을 하나의 스트림으로 만들 수 있습니다. 사전적인 의미처럼 Stream.concat(A, B)은 A와 B의 스트림을 하나의 스트림으로 생성해줍니다.

13 Jul 2018

Java8의 Stream distinct 사용 방법

distinct는 스트림의 중복 아이템을 제거하는데 사용됩니다. stream1.distinct()은 스트림에서 중복을 제거한 새로운 스트림을 반환합니다. 중복 객체인지 판단하는 기준은 Object.equals(Object)의 결과 값입니다. 기본객체 뿐만 아니라 Custom 객체도 적용할 수 있습니다.

13 Jul 2018

Java8의 Stream limit과 skip 사용 방법

limit은 어떤 스트림에서 일정 개수만큼만 가져와서 새로운 스트림을 리턴해줍니다. Stream.limit(숫자)은 숫자만큼 아이템을 가져와 새로운 스트림을 생성하여 리턴해줍니다. skip은 limit과 반대입니다. Stream.skip(숫자)은 숫자만큼 아이템을 건너띄고 그 이후의 아이템들로 새로운 스트림을 생성합니다.

13 Jul 2018

Java8의 Stream filter와 Map 사용 방법

filter는 말 그대로 특정조건으로 스트림의 컨텐츠를 필터링하고 새로운 스트림을 생성합니다. map은 각각의 item을 변경하여 새로운 컨텐츠를 생성하는 기능입니다. FlatMap은 여러개의 스트림을 한개의 스트림으로 합쳐줍니다. 복잡한 스트림을 간단한 스트림으로 변경되는데 사용할 수 있습니다.

30 Jun 2018

Java8의 Stream 생성 방법

Java8의 Stream 생성방법에 대해서 알아봅니다. Stream.of(), Stream.generate(), Stream.iterate(), Stream.empty() 등을 이용하여 Stream을 다루는 방법에 대해서 알아봅니다.

25 Jun 2018

Java - ExecutorService를 사용하는 방법

Executors와 ExecutorService를 이용하면 간단히 쓰레드풀을 생성하여 병렬처리를 할 수 있습니다. 어떤 작업들을 병렬로 처리하려면 ExecutorService, SingleThreadExecutor, Future, BlockingQueue를 이용해야 합니다. 예제로 구현 방법을 알아보겠습니다.

25 Jun 2018

Gradle로 Java 빌드하는 방법

훌륭한 IDE도 많지만, 터미널에서 gradle 만으로 직접 자바 프로젝트를 빌드하고 싶습니다. 간단한 에디터만으로 자바 프로젝트를 만들고 그래들로 빌드하는 과정을 정리하였습니다. gradle wrapper를 사용하여 우분투 및 윈도우에서 모두 빌드가 가능하도록 만들었습니다.

28 Jan 2018