본문 바로가기
반응형

분류 전체보기126

[모던 자바 인 액션] 15장. CompletableFuture와 리액티브 프로그래밍 컨셉의 기초 소프트웨어 개발 방법을 획기 적으로 뒤집는 2가지 추세 멀티코어 프로세서의 발전으로 애플리케이션의 속도는 이를 얼마나 잘 활용할 수 있도록 개발하느냐가 중요해짐 인터넷 서비스에서 사용하는 애플리케이션이 증가하는 현상 서비스가 작아진 대신 네트워크 통신이 증가함. 다양한 소스의 콘텐츠를 가져와서 사용자의 삶이 풍요롭게 만들도록 합치는 메시업mashup 형태가 될 가능성이 큼 다른 서비스의 응답을 기다리는 동안 연산이 블록되거나 귀중한 CPU 클록 사이클 자원을 낭비하고 싶지는 않으 것이다. 반면에 동시성을 필요로 하는 상황 즉 조금씩 연관된 작업을 같은 CPU에서 동작하는 것 또는 애플리케이션을 생상선을 극대화할 수 있도록 코어를 바쁘게 유지하는 것이 목표라면, 원격 서비스나 데이터베이스 결과를 기다리는 .. 2021. 9. 29.
[모던 자바 인 액션] 10장. 람다를 이용한 DSL 프로그래밍 언어도 결국 언어이며 언어는 메시지를 명확하고 안정적인 방식으로 전달하는 것에 있다. 저명한 컴퓨터 과학자 하롤드 아벨슨이 프로그램은 사람들이 이해할 수 있ㄷ조록 작성되어야 하는 것이 중요하며 기기가 실행하는 부분은 부차적일 뿐이라 말한 것 처럼 의도가 명확하게 전달되어야 한다. 도메인 전용 언어로 애플리케이션의 비즈니스 로직을 표현함으로써 제대로 구현되었는지를 도메인 전문가가 좀더 쉽게 이해할 수 있다. 메이븐, 앤트, 그래들은 빌드 과정을 표현하는 DSL로 간주할 수 있고, HTML은 웹페이지의 구조를 정의하도록 특화된 언어이다. DSL의 장점 간결함 : API는 비즈니스 로직을 간편하게 캡슐화하므로 반복을 피할 수 있고 코드를 간결하게 만들 수 있다. 가독성 : 도메인 영역의 용어를 사용.. 2021. 9. 29.
[모던 자바 인 액션] 9장. 리팩터링, 테스트, 디버깅 기존에 람다, 스트림 API를 사용하지 않던 레거시 코드를 리팩터링할 방법을 알아보자. 람다 표현식으로 전략, 템플릿 메소드, 옵저버, 의무 체인, 팩토리 등의 객체지향 디자인 패턴을 어떻게 간소화할 수 있는지도 살펴보자. 코드 가독성 개선 코드 가독성은 다른 사람이 보더라도 쉽게 이해할 수 있음을 의미한다. 다음 리팩터링 예제를 통해 배워보자 익명 클래스를 람다 표현식으로 리팩터링하기 람다 표현식을 메서드 참조로 리팩터링 하기 명령형 데이터 처리를 스트림으로 리팩터링하기 익명 클래스를 람다 표현식으로 리팩터링하기 익명 클래스는 람다 표현식으로 리팩터링을 할 수 있는데 익명 클래스는 그 장황함과 쉽게 에러를 발생시킨다는 점에서 단점이 있기 때문이다. 하지만 변환이 불가한 케이스도 있는데 아래와 같다. 익.. 2021. 9. 29.
[모던 자바 인 액션] 8장. 컬렉션 API 개선 우리의 개발 라이프에 생기를 더해주는 것 중 하나가 컬렉션이다. 바퀴를 재 발명하지 않고 리스트, 집합, 맵 등의 완성도 있는 자료구조를 객체 선언해서 사용함으로써 개발 속도를 높이면서도 신뢰성 있는 코드를 작성할 수 있다. 컬렉션 API는 JDK 8 전, 후로도 많은 사용성이 개선되었는데, 이번 장에서는 이에 대한 내용을 주로 다룬다. 컬렉션 팩토리 정수를 담는 리스트를 선언하는 방법. 근데 아래 방법으로 선언을 하는 경우에는 엘리먼트의 변경이 불가하다! // 팩토리 메소드 미사용 List list = new ArrayList(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); // 팩토리 메소드 사용 List list = Array.. 2021. 9. 28.
[모던 자바 인 액션] 6장. 스트림으로 데이터 수집 이전 장에서 공부했듯이 스트림은 엘리먼트를 소비하는 중간 연산과 최종 결과를 도출하는 최종연산으로 구분됩니다. 그 중에서 collect 최종 연산에 사용할 수 있는 리스트 변환 세트 변환 등의 기능이 담긴 인터페이스는 Collector 인터페이스 입니다. 여러 자료 구조가 담고 있는 Collection 인터페이스와 구분이 필요합니다. 컬렉터란? 간편하게 원하는 형태로 최종 결과를 산출해주는데 도움을 주는 인터페이스. 샘플 데이터 public class Dish { private final String name; private final boolean vegetarian; private final int calories; private final Type type; public Dish(String nam.. 2021. 9. 28.
[모던 자바 인 액션] 5장. 스트림 활용 이 장에서는 스트림 API가 지원하는 다양한 연산을 살펴본다. 필터링 스트림의 요소를 선택하는 방법, 즉 프레디케이트 필터링 방법과 고유 요소만 필터링하는 방법을 배운다, 프레디케이트로 필터링 filter 메서드는 프레디케이트를 인수로 받아서 프레디케이트와 일치하는 모든 요소를 포함하는 스트림을 반환한다. IntStream intStream = IntStream.of(3, 7, 1, 6, 2, 13, 13, 7, 10, 13, 26); intStream.filter(number -> number >= 7) .boxed() .forEach(System.out::println); // 7, 13, 13, 7, 10, 13, 26 고유 요소 필터링 고유 요소로 이루어진 스트림을 반환하는 필터링이다. 고유 요소.. 2021. 9. 28.
[모던 자바 인 액션] 4장. 스트림 소개 우리가 기대한 컬렉션 연산은? 첫번째, 무엇을 원하는지는 명시하되, 세부 방법은 명시하지 않는다. 무엇을 원하는지는 명시를 하되 세부적인 명세는 피하는 것이다! 저자가 예로 들기를, SELECT NAME FROM dishes WHERE calorie menu.getCalorie() >=300) .sorted(comparing(Menu::getCalorie)) // default: Descending .map(Menu::getName) .collect(toList()); // list => [짜장면, 생연어] 위 코드에 있는 filter,, sorted, map. collect와 같은 연산은 고수준 빌딩 블록으로 이루어져 있기 때문에 특정 스레딩 모델이 제한되지 않고 어떤 상황에서든 사용할 수 있다. 결과.. 2021. 9. 28.
[모던 자바 인 액션] 3장. 람다 표현식 public class StreamPerformanceTest { private static final intTEST_MAX_RANGE= 30_000_000; private static Listlist= new ArrayList(); public static void main(String[] args) { init("init", () -> IntStream.rangeClosed(1,TEST_MAX_RANGE).boxed().collect(toList())); test("for-loop", (List list) -> { int result = 0; for (int each : list) { result += each; } }); test("int-stream", () -> { IntStream.rangeC.. 2021. 9. 28.
[모던 자바 인 액션] 2장. 동작 파라미터화 간단한 예시를 통해 동작 파라미터화가 왜 필요하고 어떻게 코드 개선될 수 있는지 보자. Niniz 객체를 담고 있는 리스트에서 원하는 니니즈를 찾는 프로그램을 개발한다고 가정하겠다. Niniz 클래스는 아래와 같다. /* Niniz.java */ public class Niniz { private String name; private String color; private String classification; public Niniz(String name, String color, String classification) { this.name = name; this.color = color; this.classification = classification; } public String getName(.. 2021. 9. 28.
반응형