강사님이 stream을 사용한 코드를 보여주셨는데
Array.stream.filter(d -> int d).mapToInt(e) ···뭐 대충 이런 식이었다. 계속.으로 이어지고 메서드를 계속 호출하는 형식인 것 같았다. 수업 내용으로는 이해가 잘 안되서 자세히 알아보고 정리한다.
자바에서 컬렉션(배열, 맵 등)을 생성하고 접근할 땐 반복문을 사용하고, 각 컬렉션 클래스에는 같은 기능을 하는 메서드들이 중복해서 정의되어 있다. 데이터 타입마다 다 다른 방식으로 다뤄야 한다.
컬렉션(Collection) : 많은 데이터를 그 사용 목적에 적합한 자료구조로 묶어 하나로 그룹화한 객체
이럴 때 stream을 사용한다. 스트림은 데이터를 읽거나 쓰기 위한 데이터의 흐름이다.
스트림을 사용하면 데이터 소스를 구분하지 않고 같은 방식으로 다룰 수 있고, 코드의 재사용성이 높아진다. 반복문을 사용하지 않고도 자료구조에 순차적으로 접근하고, 접근한 요소에 메서드를 실행할 수 있다.
컬렉션 -> 외부 반복 : 사용자가 직접 반복문을 사용해서 요소에 접근한다.
스트림 -> 내부 반복 : 반복을 알아서 처리하고 결과 스트림값을 기억한다.
스트림의 메서드는 중간 연산 메서드와 최종 연산 메서드 2가지로 분류된다.
중간 연산(Intermediate Operation)
최종 연산 메서드(Terminal Operation)
메서드를 간결한 함수식으로 표현한 것이다. 자바에서 메서드를 표현하기 위해서 클래스를 정의하고, 반환 타입, 메서드명, 매개변수 타입 등 코드가 길어지는 문제점을 해결한 방안이다.
메서드 타입, 메서드명, 매개변수 타입, 중괗로, 반환식을 생략한다. 이를 대체하는 ->기호를 사용하여 단축한다. 익명 함수라고도 불린다.
int
람다식이 하나의 메서드만을 호출하는 경우 매개변수를 생략하여 사용할 수 있도록 한 것이다.
클래스명 :: 메서드명 또는 참조변수명 :: 메서드명 형식으로 사용한다.
메서드를 호출하지만 괄호()는 생략한다.
람다식과 메서드 레퍼런스는 사용을 자주해서 어떤 순간에 활용하는 것이 좋은 지 직접 느껴야 할 것 같다. 아직 스트림은 완벽 정복한 게 아니라 첨부 파일이 많다..ㅎㅎ
참고 자료