본문 바로가기

반응형

프로그래밍/Java & Spring Framework

(5)
스트림(Stream) 활용 스트림을 활용하면 외부 반복 을 내부 반복 으로 바꿀 수 있어 좀 더 직관적인 코드를 작성할 수 있습니다. 또한 병렬로 수행할지 여부를 결정할 수 있습니다. 본문에서는 스트림 API를 활용하는 방법을 정리합니다. 필터링과 슬라이싱 filter() distinct() limit() skip() // ** 프레디케이트로 필터링 ** // 스트림 인터페이스의 filter 메서드는 Predicate를 인수로 받고, // 일치하는 모든 요소를 반환한다. List vegetarianMenu = menu.stream() .filter(Dish::isVegetarian) .collect(toList()); // ** 고유 요소 필터링 ** // distinct 메서드로 중복을 제거한다. List numbers = Ar..
스트림 (Stream) 스트림이란? 스트림이란 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소 로 정의할 수 있다. 스트림을 사용하면 선언형(즉, 데이터를 처리하는 임시코드 대신 질의로 표현)으로 컬렉션 데이터를 처리할 수 있다. 따라서 데이터 컬렉션 반복을 멋지게 처리할 수 있으며, 별도의 멀티 스레드 코드를 구현하지 않더라도 데이터를 병렬로 처리할 수 있게 된다. 다음은 저칼로리의 요리명을 반환하고, 칼로리를 기준으로 정렬하는 로직을 Java7과 Java8로 비교하는 예시이다. // Java7 List lowCaloricDishes = new ArrayList(); // 컨테이너 역할만 하는 Gabage 변수! for (Dish d : menu) { if(d.getCalories() < 400) { lowCalo..
람다 표현식 (Lambda Expression) 람다란 무엇인가? 람다 표현식 (Lambda Expression) 은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다. 람다를 사용하면 더 쉽게 동작 파라미터 형식의 코드를 구현할 수 있으며, 이에 따라 코드가 더 간결하고 유연해진다. 람다의 특징 익명 : 람다는 익명 메서드 처럼 이름이 없다. 함수 : 람다는 메서드처럼 특정 클래스에 종속되지 않기 때문에 함수라고 부를 수 있다. 하시만 메서드처럼 "파라미터 리스트", "바디", "반환 형식", "가능한 예외 리스트"를 포함한다. 전달 : 람다 표현식을 메서드의 인수로 저장하거나 변수로 지정할 수 있다. 간결성 : 익명 클래스처럼 자질구레한 코드 구현이 필요 없다. 람다의 구성요소 // Before class LengthCompara..
동작 파라미터화 (Behavior Parameterization) 동작 파라미터화 (Behavior Parameterization) 는 "다양한 동작을 수행할 수 있는 코드 블럭을 메서드 파라미터로 전달"함으로써 자주 변경되는 요구사항에 효과적으로 대응할 수 있는 방식을 의미합니다. 여기서는 자주 변경되는 요구사항의 예시를 기반으로 동작 파라미터화를 한 후 Java8에서 추가된 Lambda로 코드를 간소화하는 과정을 보여줍니다. 요구사항 우리는 농장 재고 애플리케이션을 개발합니다. 농부는 녹색 사과 만 필터링 하는 기능을 추가하길 원했습니다. 시도 1 : 녹색 사과 필터링 아래와 같이 녹색 사과만 필터링하는 메서드를 구현했습니다. 그런데 농부가 빨간 사과 를 필터링하는 기능을 추가하길 원했습니다. public static List filterGreenApples(Lis..
Private 메소드 단위 테스트하기 2가지 방식으로 Private 접근자를 가진 메소드를 단위테스트하는 예제입니다. Reflection 활용 Spring Framework의 RelectionTestUtils Reflection을 활용한 private static 메서드 단위 테스트 Relection으로 특정 클래스에서 테스트 할 메서드를 불러온 후 accessible 필드를 true로 설정합니다. 그리고 invoke() 메서드를 사용해 테스트 할 Private 메서드를 실행합니다. @Component public class Validator { private static boolean checkLength(String str) { if (str.length() > 10) { return false; } return true; } } @Ru..

반응형