본문 바로가기

Java18

[Java 8] Stream - 3 (Numeric, Stream 생성) - 출처: https://www.oracle.com/technical-resources/articles/java/ma14-java-se-8-streams.html - Numeric Streams 앞에서 정수형의 합계를 계산하기 위해 reduce 메소드를 이용한 예제를 살펴보았다. 그러나 앞에서 살펴본 예제에는 숨겨진 비용이 있다. Integer 객체를 반복적으로 더할때 박싱이 적용되어 비용이 발생한다. 만약 아래코드처럼 sum 이라는 메소드를 호출할 수 있다면 코드가 더 깔끔하고 의도한 바가 분명해질것이다. int statement = transactions.stream() .map(Transaction::getValue) .sum(); // error since Stream has no sum meth.. 2021. 2. 11.
[Java 8] Stream - 2 (기본 연산) - 출처: https://www.oracle.com/technical-resources/articles/java/ma14-java-se-8-streams.html - Stream 연산 java.util.stream.Stream 에 정의되어 있는 Stream 인터페이스는 많은 연산들을 정의하고 있는데, 크게 2 부분으로 나눌 수 있다. filter, sorted, map 와 같이 파이프라인으로 서로 연결될 수 있는 형태 파이프라인을 종결시키고, 결과를 반환하는 collect 연결될 수 있는 Stream 연산자들을 "중간 연산자" 라고 칭한다. 해당 연산자들은 반환형이 Stream 형이기 때문에 서로 연결될 수 있다. Stream 파이프라인을 종결시키는 연산자들은 "종결 연산자" 라고 칭한다. 종결 연산자는.. 2021. 2. 11.
[Java 8] Stream - 1 (Stream 개요) - 출처: https://www.oracle.com/technical-resources/articles/java/ma14-java-se-8-streams.html - Stream 소개 컬렉션이 없다면 무슨일이 벌어질까? 거의 모든 자바 어플리케이션에서는 컬렉션을 만들고 처리한다. 이런 업무들은 프로그래밍의 근간이다. 데이터를 그룹화하며 처리한다. 예를 들어 메뉴를 구성하는 요리 컬렉션이 있는데 각 요리 칼로리의 총합을 구하거나, 칼로리가 적은 요리만을 골라 특별 식단을 구성하는것과 같은 기능을 원한다고 해보자. 이처럼 많은 비즈니스 로직에는 찾거나 그룹화하는 연산이 포함된다. Java 8 이전에는 위와같은 동작들이 필요할때마다 구현하여 사용하였을것이다. 간단한 SQL을 구문을 하나 살펴보자. SELECT.. 2021. 2. 11.
[Java 8] 람다(Lambda) - 3 - 출처: Java 8 in action - 출처: https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html - 메서드 레퍼런스 메서드 레퍼런스는 메서드를 변수에 저장한것처럼 사용할 수 있게 한다. 람다와 메서드 레퍼런스중 꼭 어느것이 더 좋다거나 가독성이 더 좋다고 말할 수는 없다. 상황에 따라서 메서드 레퍼런스가 때로는 람다가 가독성이 더 좋으므로 상황에 맞게 잘 사용하자. 메서드 레퍼런스는 아래처럼 사용한다. public class People { private String name; private Integer age; public People(String name, Integer age) { super(); this.na.. 2021. 2. 11.
[Java 8] 람다(Lambda) - 2 - 출처: Java 8 in action- 출처: https://www.geeksforgeeks.org/checked-vs-unchecked-exceptions-in-java/- 출처: https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Closures - 기본형 특화만약 Generic으로 정의한 Predicate 를 사용할 때, 기본형 특화의 개념을 몰라도 큰 문제는 되지 않는다. Integer 는 int 를 감싼 래퍼클래스이며 int 형을 Integer로, Integer를 int 로 전환할 때 박싱과 언박싱의 과정을 거치게 된다. 문제는 이때 비용이 발생한다는 것이다. 물론 사람이 체감할때는 아주 적은 비용이나 데이터의 크기가 커진다면 영향을 끼칠.. 2021. 2. 10.
[Java 8] 람다(Lambda) - 1 - 출처: Java 8 in action - 람다란 무엇인가?람다 표현식이란 메서드로 전달할 수 있는 익명함수를 단순화 한것이다. 람다 표현식에는 이름이 없으며, 파라미터 리스트, 바디, 반환형식, 발생할 수 있는 예외 리스트를 가지고 있다.메소드와 달리 이름이 없으므로 익명이라 표현한다.어떤 클래스에 종속되는 메소드가 아니라서 함수이다.Java 8 이전에는 메소드를 전달하고 싶으면 익명클래스를 하나 선언하여 전달하였다. 이말이 무슨말인지 모를수도 있지만 아래와 같은 코드를 한번쯤은 사용해본적이 있을거라고 생각한다.1 2 3 4 5 6 7peoples.sort(new Comparator() { @Override public int compare(Person o1, Person o2) { return o1.. 2021. 2. 10.
[Java 8] 객체로서의 함수 - https://flyingbytes.github.io/programming/java8/functional/part1/2017/01/23/Java8-Part1.html - 개요 Java 8 에서 함수는 1급 객체가 되었다. 이 말은 함수를 다른 함수의 인자가 되거나 반환형이 되거나 객체로 저장될 수 있다는것을 의미한다. - 왜 함수를 객체로 저장해야 하는가? - 완전히 private 한 함수 코드의 품질은 중요하다. 기본적으로 어떤 객체에서 근간이 되는 코드를 다른 Client 에게 보여주지는 않는다. 다른 Client 와는 객체의 public 메소드로 상호작용을 한다. 만약 클래스에서 1개의 메소드만 보이고 나머지는 은닉화 되어있는 함수를 만들고 싶다면 어떻게 해야할까? 1급 객체의 함수에서는, 1개.. 2021. 2. 10.
[Java 8] 함수형 프로그래밍 개요 - 출처: https://flyingbytes.github.io/programming/java8/functional/part0/2017/01/16/Java8-Part0.html - 함수형 프로그래밍(Functional programming) Java 8 을 알아보기 이전에 함수형 프로그래밍을 알아보는게 무슨 소용이냐고 생각할 수 있다. Java 8 에서의 가장 큰 변화중 하나는 stream과 람다(익명함수) 및 함수의 변수화등 함수에 관해 중요한 변화가 있기 때문에 함수형 프로그래밍이란 무엇인가를 먼저 알아보고 살펴보는게 좋을 것 같다는 생각에서 좋은 블로그를 번역하였다. 개발자라면 한번쯤 Functional programming(fp) 에 대해 코드 라인수를 줄여주고 가독성을 향상 시켜준다는 말을 들어.. 2021. 2. 10.