전체 글
-
람다와 스트림 - 메소드 참조(method reference)백엔드/자바 2021. 9. 14. 22:35
이전에 여러 파트에서 언급했듯이 위와 같이 람다식을 사용하면 메서드를 간단하게 표현이 가능하다. 물론 사용에 제한이 있긴하지만 그럼에도 불구하고 람다식은 그 효율성이 높다. 하지만 그럼에도 불구하고 이 람다식을 더 줄일 수 있는 방법이 있으니 바로 메소드 참조다. 위 코드는 문자열을 매개변수로 받아 정수형으로 반환하는 Function 참조변수를 표현하고 있다. Function 참조 변수는 람다식으로 이뤄져 굉장히 간략하게 식을 표현하고 있다. 하지만 이런 경우 메소드 참조를 이용하면 람다식을 더욱 간략하게 표현이 가능하다. 메서드 참조를 적용하면 첫번째 코드를 위와 같이 변경이 가능하다. 람다식이 단 하나의 메소드만 호출할 경우에 해당 람다식에서 불필요한 매개변수를 없앤다. 그리고 '클래스명::메서드명'..
-
람다와 스트림 - 컬렉션과 함수형 인터페이스백엔드/자바 2021. 9. 1. 19:38
JDK 1.8부터는 함수형 인터페이스가 추가됐고, 그와 더불어 컬렉션 프레임웍을 편하게 사용할 수 있도록 컬렉션의 인터페이스에 디폴트 메서드가 추가됐다. 그 중 일부는 함수형 인터페이스를 사용하는데 이번 파트에서 그러한 메서드들에 대해 설명한다. 인터페이스 메서드 설명 Collection boolean removeIf(Predicate filter) 조건에 맞는 요소 삭제 List void replaceAll(UnaryOperator operator) 모든 요소를 변환하여 대체 Iterable void forEach(Consumer action) 모든 요소에 작업 action을 수행 Map V compute(K key, BiFunction f) 지정된 키의 값에 작업 f를 수행 V computeIfAbs..
-
람다와 스트림 - Predicate의 결합백엔드/자바 2021. 9. 1. 15:05
람다와 스트림 - 함수의 결합 수학에서 두 개의 함수를 결합할 수 있는 것처럼 자바에선 두 람다식을 결합할 수 있도록 하고 있다. 그리고 당연히 미리 준비된 메서드만 가져다 쓰면 된다. andThen() 예를 들어 위와 같은 코드가 sgcomputer.tistory.com 이전 파트에서 설명했듯이 Function 타입의 참조변수끼리는 결합이 가능하다. 그리고 이러한 결합은 Predicate타입의 참조변수끼리도 가능하다. 예를 들어서 위와 같은 메서드가 있다고 가정해보자. if의 조건을 보면 논리 연산자 &&으로 조건이 이어진 것을 볼 수 있을 것이다. 이러한 논리 연산을 Predicate 간에도 할 수 있다. and() - && 예를 들어 위와 같은 코드가 있다고 가정해보자. Predicate의 참조변수..
-
람다와 스트림 - 함수의 결합백엔드/자바 2021. 8. 25. 19:57
수학에서 두 개의 함수를 결합할 수 있는 것처럼 자바에선 두 람다식을 결합할 수 있도록 하고 있다. 그리고 당연히 미리 준비된 메서드만 가져다 쓰면 된다. andThen() 예를 들어 위와 같은 코드가 있다고 가정해보자. 참조변수 ft1은 10진수를 넣으면 2진수로 반환하는 람다식을 저장하고 있다. 반면 참조변수 ft2는 2진수를 넣으면 10진수로 반환하는 람다식을 저장하고 있다. 만약 이 두 개의 함수를 합치고 싶다면 어떻게 해야할까? 그럴땐 andThen을 쓰면 된다. 위 코드와 같이 두 개의 함수를 andThen()메서드로 합쳐주면 두 함수는 하나로 합성된다. 이때 데이터의 흐름은 "ft1 (10진수 -> 2진수) => ft2 (2진수 -> 10진수)"로 된다. 그래서 정수 10을 입력하면 정수 1..
-
람다와 스트림 - java.util.function - part2백엔드/자바 2021. 8. 25. 14:44
람다와 스트림 - java.util.function - part1 이전 람다 파트에선 람다란 무엇인지, 람다를 사용하기 위한 방법, 함수형 인터페이스 등에 대해서 배웠다. 다시 한번 간단하게 복습하면 다음과 같다. - 람다식은 익명 객체를 간략하게 만든 표 sgcomputer.tistory.com 이전 파트에선 함수형 인터페이스를 쉽게 사용할 수 있게 만든 패키지 java.util.function에 대해 알아봤다. 이번 파트에서는 추가적으로 유용하게 쓸 수 있는 함수형 인터페이스에 대해서 알아보자. 매개변수가 두 개인 함수형 인터페이스 함수형 인터페이스 메서드 설명 BiConsumer void accept ( T t, U u ) 두 개의 매개 변수만 있고, 반환값이 없음 BiPredica..
-
람다와 스트림 - java.util.function - part1백엔드/자바 2021. 8. 24. 16:16
이전 람다 파트에선 람다란 무엇인지, 람다의 사용법, 함수형 인터페이스 등에 대해서 배웠다. 다시 한번 간단하게 복습하면 다음과 같다. - 람다식은 익명 객체를 간략하게 만든 표현식이다. - 익명 객체를 사용하려면 함수형 인터페이스가 필요하다. - 함수형 인터페이스를 통해 익명 객체를 사용 할 수 있고, 이때 익명 객체를 람다로 표현이 가능하다. 이제 예제를 보며 함수형 인터페이스와 람다 사용하는 방법을 복습해보자. 만약 두 숫자를 비교하는 기능을 하는 익명 객체를 만들어 사용해보고 싶다면? - 우선 함수형 인터페이스를 작성한다. - 형식에 맞게 람다식을 작성하고 함수형 인터페이스의 참조 변수에 람다식을 저장한다. - 참조 변수이용해서 숫자를 대입한 뒤 실행하여 결과값을 확인한다. 사실 예제가 간단해서 ..
-
람다와 스트림 - 람다식의 활용백엔드/자바 2021. 8. 24. 15:21
람다와 스트림 - 함수형 인터페이스 람다와 익명 객체() 람다와 스트림 - 람다식의 정의 람다식(Lambda Expression)이란? 자바 관련 예제를 보다보면 위와 같은 식을 코드를 볼 수 있다. 메서드들을 체이닝으로 이어준 것인데, 그 중에서 sgcomputer.tistory.com 이전 파트에서 익명 객체를 어떤식으로 만드는지, 그리고 그렇게 만들어진 익명 객체를 어떻게 람다식으로 간략히 표현하는지 알아봤다. 이번 파트에는 람다식을 활용한 다양한 예시를 알아보도록 하자. sort()에서의 람다 사용 위와 같이 String을 요소로 가지는 리스트를 정렬한다고 가정해보자. 이 리스트를 정렬할 때 Collections.sort()를 사용하는데 매개변수로 Comparator를 전달해야 한다. 하지만 위에..
-
람다와 스트림 - 함수형 인터페이스백엔드/자바 2021. 8. 24. 13:25
람다와 익명 객체() 람다와 스트림 - 람다식의 정의 람다식(Lambda Expression)이란? 자바 관련 예제를 보다보면 위와 같은 식을 코드를 볼 수 있다. 메서드들을 체이닝으로 이어준 것인데, 그 중에서도 filter() 메서드 안을 보면 특이한 코드를 볼 수 있 sgcomputer.tistory.com 이전 파트에서 말해듯 람다식의 가장 큰 특징이라하면 이름이 없다는 것을 꼽을 수 있다. 그리고 이름이 없으므로 람다식은 익명 함수라고 한 바 있다. 하지만 엄밀히 말하면 자바에서 람다는 익명 함수가 아닌 익명 객체라 할 수 있다. 왜냐면 자바에서 함수(메서드)는 단독으로 존재할 수 없기 때문이다. 코드로 보면서 설명을 보면 더 이해하기 쉬울 것이다. 왼쪽과 같이 이름이 없는 람다식이 있다고 가정..