목록프로그래밍/JAVA (7)
JaeniWorld
동작 파라미터화 여러 가지 다른 동작을 매개 변수로 받아 내부적으로 사용해 작업을 수행하는 메소드의 기능으로 행위의 매개변수화 라고도 함 쉽게 말해 변화하는 요구사항에 대응하기 위해 동작을 변수로 받는 것 아무래도 개발을 하다보면 기능이 추가되거나 코드를 고쳐야할 일이 많다. 다양한 요구사항들을 유연하게 대응하기 위해 주로 동작 파라미터화를 사용하며 아래 예제를 통해 정리하려고 한다. 1. 녹색 사과 필터링 사과농장에서 사용할 어플리케이션에 추가될 기능으로 녹색사과 필터링을 만든다. //Color 정의 enum Color {RED,GREEN} //녹색사과 필터링 Public static List filterGreenApples(List inven){ List result = new ArrayList();..
디폴트메소드(Default methods) Java 8 이전 인터페이스는 메소드만 정의할 수 있고 내용은 구현할 수 없었다. 하지만 Java 8부터는 디폴트메소드(Default methods) 기능이 추가되면서 default를 추가하면 구현 내용을 추가할 수 있도록 변화하였다. 또한 다중상속 동작이라는 유연성을 제공해 하나의 클래스에 여러 디폴트 메소드를 상속받을 수 있게 되었다. 디폴트메소드가 쓰이는 시점 디폴트메소드는 주로 기존 공개된 API의 변경이 필요할 때이다. 이전에는 디폴트메소드가 없었기 때문에 인터페이스에 새기능을 추가하면 이를 implement받은 클래스가 모두 새로운 기능을 구현해야했는다. 하지만, 이렇게 되면 호환성 문제가 생기기 때문에 인터페이스 자체에서 기본으로 기능을 구현하여 제..

Optional 클래스 java.util.Optional라는 새로운 클레스를 제공하여 변수에 null을 할당하지 않고, Optional.empty메서드로 Optional를 반환받아 할당한다. 따라서 Optional을 사용하면 값이 없는 상황이 소유한 데이터에 문제가 있는지 아닌지알 수 없기 때문에 모든 null참조를 Optional로 대체하는 것은 옳지않다. Map과 FlatMap Optional에서의 map도 Stream의 map과 비슷한 역할로 Optional이 값을 포함하면 map의 인수로 제공된 함수가 값을 바꾼다. Flatmap역시 Stream의 것과 비슷한 역할을 지니는데 map()을 통해 변환을 하다보면 Optional와 같은 이차원 Optional을 반환한다. 이때 Flatmap을 통해 이..
Collection factory Java 9에 새롭게 추가된 기능으로써, 비어있거나 비어 있지 않은 불변 콜렉션을 쉽게 초기화 할 수 있음.[1] 1. ListFactory A. List.of 불변리스트 생성 2. Set Factory A. Set.of 불변리스트 생성 3. Map Factory A. Map.of 불변리스트 생성 List와 Set 처리 removeIf: predicate를 만족하는 요소 제거 replaceAll: list에서 이용할 수 있는 기능 UnaryOperator함수를 이용해 요소를 변경sort: list에서 사용가능한 기능으로 리스트 정렬 Map 처리 forEach: Map.Entry의 반복자를 이용해 맵의 항목집합을 반복할 수 있음 ageOfFriends.forEach((fr..
Collectors Stream의 데이터를 변형 등의 처리를 하고 원하는 자료형으로 변환해줌 - 리듀싱과 요약: 최대 최소 검색, 요약연산, 문자열 연결 - 그룹화 다수준 그룹화: Collectors.groupingBy를 이용해서 항목을 다수준으로 그룹화할 수 있음. 두개의 collector사용시 두번째 컬렉터를 외부 컬렉터로 전달해 다수준 그룹화 연산을 구현할 수도 있고, 컬렉터의 인수로 컬렉터를 전다하여 계산할 수도 있다. - 분할: 분할함수(partitioning function)을 사용하는 특수한 그룹화 기능 분할함수: 비교식에 맞춰 Boolean값을 반환하며, 참과 거짓 두 요소의 스트림 리스트를 모두 유지한다. Reduce 와 collector의 차이 Reduce는 fold operation으..

Stream 연산 스트림 인터페이스는 크게 중간연산과 최종연산으로 나뉜다. 중간연산 그림의 초록색 부분에 해당하며 filter(), map(), limit(), sorted(), distinct()등이 이에 포함된다. Stream을 반환하는 것이 특징이며, 단말 연산을 스트림 파이프라인에 실행하기 전까지는 아무 연산도 수행하지 않는다. (Laziness) 최종 연산 그림의 노색 부분에 해당하며 forEach(), count(), collect()등이 이에 포함된다. void, long, collection을 반환하는 것이 특징이며, 최종 연산값을 반환한다. 분류 종류 예시 필터링 프레디케이트 .filter(Dish::isVege) 고유요소 필터링 .filter(i->i%2==0) .distinct() L..
Stream Process 한 번에 한 개씩 만들어지는 연속적인 데이터 항목들의 모임으로 예로 들자면 공장 라인을 들 수 있다 한 작업장에서 작업물을 받아 다음 작업을 처리할 수 있도록 넘겨주는 것이다. 이때 각각의 작업장은 다른 업무를 처리하지만 전체적으로 보았을 때, 동시간에 작업을 처리하고 한 개의 작업물 만을 작업한다. ** 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소 Stream예시) 입력 스트림은 데이터를 한 개씩 읽음 / 출력 스트림은 데이터를 한 개씩 기록 Stream API 스트림은 자바 8 API에 새로 추가된 기능으로 이를 이용하면 선언형으로 컬렉션 데이터를 처리할 수 있다. 기존 자바7에서 저칼로리의 요리명을 반환하고, 칼로리를 기준으로 요리를 정렬하는 코드이다. 이 ..