java8
-
Java8. parallelSortBackEnd/Java 2022. 1. 25. 22:44
Arrays.parallelSort(): Fort/Join 프레임워크를 사용해서 배열을 병렬로 정렬하는 기능을 제공합니다. 병렬 정렬 알고리즘은 배열을 둘로 계속 쪼개고 합치면서 정렬합니다. import java.util.Arrays; import java.util.Random; import java.util.stream.IntStream; public class ParallelSortClass { public static void main(String[] args) { // 정렬하는 배열의 크기에 따라 결과는 달라질 수 있습니다. int size = 1500; int[] numbers = new int[size]; Random random = new Random(); IntStream.range(0, ..
-
Java8. Date-Time APIBackEnd/Java 2022. 1. 22. 15:19
기존 java.util.Date 클래스의 경우 mutable(값을 변경할 수 있다.)하기 때문에 thread safe하지 않았습니다. 또한, 클래스 이름이 명확하지 않고(Date인데 Time까지 다룬다.), 버그가 발생할 여지가 많았습니다(타입 안정성이 없고, 월이 0부터 시작한다.). 이로 인해 날짜 시간 처리가 복잡한 애플리케이션에서는 보통 Joda Time을 사용했습니다. Java8에서 제공하는 Date-Time API는 JSR-310 Spec.의 구현체를 제공합니다. Date-Time Design Principles Clear: API가 명확해야 합니다. Fluent: 코드가 읽기 쉽고, 메서드 호출을 연결할 수 있습니다. Immutable: 기존의 인스턴스는 변경할 수 없고, 새로운 인스턴스를 ..
-
Java8. OptionalBackEnd/Java 2022. 1. 22. 08:13
Optional은 비어있을 수도 있고, 오직 값 한개가 들어있을 수도 있는 컨테이너 인스턴스입니다. 메소드 매개변수 타입, 맵의 키 타입, 인스턴스 필드 타입으로도 사용이 가능하지만 리턴값으로만 사용하도록 권장합니다. 프리미티브 타입용 Optional(OptionalInt, OptionalLong 등)은 따로 존재하며, Collection, Map, Stream, Array, Optional은 자체적으로 비어있는 것을 확인할 수 있기 때문에 Optional로 감싸지 않습니다. Person과 Info 도메인이 존재할 때 아래와 같이 호출을 하게 되면 NullPointerException이 발생합니다. public class Person { private int age; private String name;..
-
Java8. 스트림 (Stream)BackEnd/Java 2022. 1. 22. 06:29
스트림(Stream)이란 순차 또는 병렬 집계 작업을 지원하는 오퍼레이션들의 모음입니다(Sequence of elements supporting sequential and parallel aggregate operations). 스트림의 특징 데이터를 담고 있는 저장소(Collection)가 아닙니다. Functional in nature, 스트림이 처리하는 데이터 소스를 변경하지 않습니다. 스트림으로 처리하는 데이터는 오직 한 번만 처리됩니다. 무제한일 수도 있습니다. (Short Circuit 메소드를 사용해서 제한할 수 있습니다.) 중개 오퍼레이션은 근본적으로 lazy 합니다. (lazy하다는 것은 종료 오퍼레이션이 오기 전까지 실행되지 않는 것을 의미합니다.) 손쉽게 병렬 처리할 수 있습니다. (..
-
Java8. 기본 메소드 (Default Method)와 스태틱 메소드 (Static Method)BackEnd/Java 2022. 1. 22. 04:10
기본 메소드 (Default Method) 기본 메소드란 인터페이스에 메소드 선언이 아니라 구현체를 제공하는 방법으로 해당 인터페이스를 구현한 클래스를 깨트리지 않고 새 기능을 추가할 수 있습니다. 단, Object가 제공하는 기능 (equals, hashCode)는 기본 메소드로 제공할 수 없습니다. 아래 Default 인터페이스와 Default 인터페이스를 구현한 DefaultClass가 있습니다. public class Application { public static void main(String[] args) { Default defaultClass = new DefaultClass(); defaultClass.printJava(); } } public interface Default { voi..
-
Java8. 메소드 레퍼런스 (Method Reference)BackEnd/Java 2022. 1. 20. 23:27
메소드 레퍼런스(Method Reference)란 ::를 사용하여 축약하는 방법입니다. 메소드 참조 방법 Static Method 참조 특정 객체 Instance Method 참조 생성자 참조 임의 객체 Instance Method 참조 메소드 또는 생성자의 매개변수로 람다의 입력 값을 받으며, 리턴 값 또는 생성한 객체는 람다의 리턴 값입니다. public class Hello { private String name; public Hello() {} public Hello(String name) { this.name = name; } public String print(String name) { return "Hello, " + name; } public String printName() { retur..
-
Java8. 람다 표현식 (Lambda Expressions)BackEnd/Java 2022. 1. 20. 22:54
람다 표현식(Lambda Expressions)이란 메소드를 하나의 식으로 표현하는 것으로, (매개변수 목록) -> { Body } 형태를 가집니다. IntelliJ 사용 시 아래 이미지처럼 회색으로 표시된 부분에서 Option + Enter를 누르면 자동으로 변환이 가능합니다. 매개변수 목록 매개변수가 없는 경우: () 매개변수가 한 개인 경우: (i) or i 매개변수가 여러개인 경우: (i, j) 매개변수의 타입은 컴파일러가 추론하기에 생략이 가능하나 명시할 수도 있습니다. (Integer i, Integer j) Body 화살표 오른쪽에 함수 본문을 정의하며, 여러 줄인 경우 {}를 사용해서 묶습니다. 한 줄인 경우에는 생략이 가능합니다. (return도 생략 가능) 람다 표현식에서는 final이..
-
Java8. 함수형 인터페이스 (Functional Interface)BackEnd/Java 2022. 1. 20. 22:04
함수형 인터페이스란 추상 메소드를 딱 하나만 가지고 있는 인터페이스입니다. @FunctionalInterface 애노테이션을 가지고 있는 SAM (Single Abstract Method) 인터페이스입니다. @java.lang.FunctionalInterface public interface FunctionalInterface { // 추상 메서드 (abstract method) void printJava(); // static method는 가질 수 있습니다. static void printStatic() { System.out.println("static method"); } // default method는 가질 수 있습니다. default void printDefault() { System.out..