개발/모던 자바 인 액션

개발/모던 자바 인 액션

10. 람다를 이용한 도메인 전용 언어

10.1 도메인 전용 언어DSL은 특정 도메인 문제를 해결하기 위해 만든 언어이다. 특정 비지니스 도메인을 인터페이스로 만든 API라고 생각할 수 있다.DSL을 이용하면 사용자가 특정 도메인의 복잡성을 더 잘 다룰 수 있다. 저수준의 구현 세부 사항 메서드는 private로 만들어서 저수준 구현 세부 내용은 숨길 수 있다. 이런식으로 사용자 친화적인 DSL을 만들 수 있다. 10.1.1 DSL의 장점과 단점DSL은 만병통치약이 아니다. DSL을 도메인에 이용하면 약이 될 수도 독이 될 수도 있다.장점단점간결함DSL설계의 어려움가독성개발 비용유지보수추가 우회 계층집중새로 배워야 하는 언어관심사분리호스팅 언어의 한계 10.1.2 JVM에서 이용할 수 있는 다른 DSL 해결책내부 DSL내부 DSL은 순수 자바..

개발/모던 자바 인 액션

9. 리팩토링, 테스팅, 디버깅

9.1 가독성과 유연성을 개선하는 리팩토링람다 표현식은 익명 클래스보다 코드를 더 간결하게 만들어준다. ⇒ 3장에서 확인해봤었다. 게다가, 재활용이 가능하므로 더 큰 유언성을 갖츨 수 있다. 9.1.1 코드 가독성 개선익명 클래스를 람다 표현식으로 리팩토링하기람다 표현식을 메서드 참조로 리팩토링하기명령형 데이터 처리를 스트림으로 리팩토링하기 9.1.2 익명 클래스를 람다 표현식으로 리팩토링하기주의할 점이 있는데, 모든 익명 클래스를 람다 표현식으로 바꿀 수 없다.익명 클래스의 this와 super는 람다 표현식에서는 다른 의미를 갖는다. 익명 클래스에서 this는 익명 클래스 자신을 가르키지만 람다 표현식에서 this는 람다 표현식을 포함하는 캘르스를 가르킨다.익명 클래스는 감싸고 있는 클래스의 변수를 ..

개발/모던 자바 인 액션

5. 스트림 활용

5.1 필터링5.1.1 프레디케이트로 필터링List menu = Arrays.asList( new Dish("pork", false, 800, Dish.Type.MEAT), new Dish("beef", false, 700, Dish.Type.MEAT), new Dish("chicken", false, 400, Dish.Type.MEAT), new Dish("french fries", false, 530, Dish.Type.OTHER), new Dish("rice", true, 350, Dish.Type.OTHER), new Dish("season fruit", true, 120, Dish.Type.OTHER), new Dish("pizza", true, 550, Dish.Type.OTHER), new ..

개발/모던 자바 인 액션

4. 스트림 소개

컬렉션(Collection)을 활용하면 데이터를 그룹화하고 처리할 수 있다. ⇒ 너무 익숙하다,,Collection과 Stream의 차이를 정리하여 표로 정리해보았다.CollectionStream동작 형식명령형선언형병렬성가능한데, 복잡간단(선언형)유연성복-붙함수 파라미터화특징- Sequantial, Random Access - 데이터 표현에 집중 - 외부 반복(반복문을 직접 작성)- Sequantial Access - 데이터 처리에 집중 - 내부 반복(반복문 작성 X) - 파이프 라이닝 4.1 스트림이란 무엇인가?스트림을 사용하면 선언형으로 컬렉션 데이터를 처리할 수 있고, 데이터를 투명(transaparent)하게 병렬적으로 처리할 수 있다.선언형으로 코딩을 할 경우의 장점은 새로운 기능을 구현할 때 ..

개발/모던 자바 인 액션

3. 람다 표현식

2장에서 동작 파라미터화를 이용해서 요구사항에 효과적으로 대응하는 코드를 구현해봤다.이번 장에서는 인터페이스와 형식 추론의 기능을 확인해보고, 메서드 참조기능을 공부한다. 3.1 람다란 무엇인가?람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다.익명보통의 머세드와 달리 이름이 없으므로 익명이라 칭한다.함수람다는 특정 클래스에 종속되지 않으므로 메서드가 아닌 함수다. 하지만 메서드처럼 파라미터, 바디, 반환 형식, 예외 리스트를 포함한다.전달람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다.간결성익명 클래스처럼 많은 자질구레한 코드를 구현할 필요가 없다.람다를 통해서 간결한 방식으로 코드를 전달할 수 있다. 람다를 통해서 Java8 이전에 불가능했던 일을 가능하..

개발/모던 자바 인 액션

2. 동작 파라미터화 코드 전달하기

동작 파라미터화란 아직은 어떻게 실행할 것인지 결정하지 않은 코드블럭을 의미한다.동작 파라미터화를 사용하며 자주 바뀌는 요구사항에 효과적으로 대응할 수 있다.2.1 변화하는 요구사항에 대응하기녹색 사과 필터링하기public static List filterGreenApples(List inventory) { List result = new ArrayList(); for (Apple apple: inventory) { if (Color.GREEN.equals(apple.getColor())) { result.add(apple); } } return result; }여기서 빨간색 사과도 필터링하고 싶으면, 전체 코드를 복사-붙혀넣기 해서 수정해야한다. 이렇게 단순 복-붙을 하면 코드 동작을 바꾸고 싶을 때 ..

개발/모던 자바 인 액션

1. 자바 8, 9, 10, 11: 무슨 일이 일어나고 있는가?

1.1 역사의 흐름은 무엇인가?Java8에서 가장 큰 변화가 생김. ⇒ 간결한 코드, 멀티프로세서의 쉬운 활용Java5에서는 스레드풀, 병렬 실행 컬렉션(concurrent collection)을 도입Java7에서는 포크/조인 프레임워크 도입Java8에서는 이전과 다른 새로운 방식(함수형 프로그래밍)으로 병렬실행을 지원함. ⇒ 제대로 사용하려면 여러가지 규칙을 지켜야함.Java9에서는 리액티브 프로그래밍이라는 병렬 실행 기법을 지원하게 됨 1.2 왜 아직도 자바는 변화하는가?수많은 프로그래밍언어사이에서 살아남기 위해 변화한다.이제는 빅데이터에 직면하면서 멀티코어, 컴퓨터 클러스터를 이용해서 효율적으로 처리하는 요구사항이 생겼다. 즉, 병렬 프로세싱의 요구사항이 생겼다.따라서 Java8에는 기존의 객체지향..

피곤한투티
'개발/모던 자바 인 액션' 카테고리의 글 목록