자바8

    [Java] Optional의 개념과 사용

    [Java] Optional의 개념과 사용

    Optional의 등장 프로그래밍을 하다보면 NullPointException을 종종 보게 된다. null을 리턴하면 안되는데 null을 리턴하는 경우 생기는 예외인데, 이를 처리하는 방법은 크게 2가지가 있다. 예외를 던지는 방법 public Something getSomething() { if(this.something == null) throw new IllegalStateException(); return something; } 예외를 던질 때 자바는 stack trace에 대한 정보를 생성하고 보여주는데, 이는 리소스를 사용하기 때문에 로직 처리에 예외 처리를 하지 않는 것이 좋다. 따라서 클라이언트 코드가 null을 체크하는 방법을 주로 사용한다. 클라이언트 코드가 null을 체크하는 방법 P..

    [Java] Supplier 함수 인터페이스와 Lazy Evaluation

    [Java] Supplier 함수 인터페이스와 Lazy Evaluation

    Supplier T타입의 값을 제공하는 함수 인터페이스이다. T타입의 값을 제공 받고 리턴도 하지 않아 이 인터페이스가 왜 필요한지 의문이 들 수 있는데 주로 Lazy Evaluation에 사용이 된다. Lazy Evaluation 불필요한 연산을 피하기 위해 연산을 지연시켜놓았다가 필요할 때 연산하는 방법. 예시를 통해 Lazy Evaluation에 대해 알아보자. 1. printState에서는 valid가 true이면 value + word, false이면 wrong world를 출력한다. public void printState(boolean valid, String value) { if(valid) { System.out.println(value + " world"); } else { System..

    [Java] 자바에서 제공하는 함수형 인터페이스

    Function T타입을 받아서 R타입을 리턴하는 함수형 인터페이스 함수 조합용 메소드 : andThen, compose [예제] compose는 (...)안의 람다식을 먼저 계산한다. andThen은 plus를 먼저 계산하고 (...)안의 람다식을 계산한다. Function plus = (num) -> num + 5; Function multiply = (num) -> num * 2; Function world = (s) -> s + " world"; System.out.println(plus.apply(5)); // 10 System.out.println(multiply.apply(5)); // 10 System.out.println(world.apply("hello")); // hello world..

    [Java] 함수형 인터페이스와 람다 표현식

    등장 배경 함수형 인터페이스와 람다식이 등장한 이유를 알기 위해 다음 Person 인터페이스와 이를 구현한 Student 클래스를 보자. interface Person { void study(String subject){} } class Student implement Person { @Override public void study(String subject) { System.out.println(subject + " 공부"); } } 인터페이스를 구현하는데 상당히 많은 줄을 차지한다. 이것을 해결하기 위해 자바8에서부터 람다식을 지원한다. 람다식은 코드를 간결하게 만들기 위해 등장한 만큼 추측할 수 있는 모든 정보를 제거하여 간결하게 표현한다. 위의 코드를 람다식으로 표현하면 다음과 같다. Perso..