모던자바인액션
-
챕터[21] 결론 그리고 자바의 미래모던자바인액션 2020. 10. 29. 15:41
서론 자바 8기능 자바 8이후 변경사항 동작 파라미터화(람다와 메서드 참조) 메서드로 전달되는 값은 Function, Predicate, BiFunction 등의 형식을 가지며, 메서드를 수신한 코드에서는 apply, test 등의 메서드로 코드를 실행할 수 있다. 람다는 자바8에서의 추가된 가장 혁신적인 기능이다. 스트림 API (Java8) 컬렉션의 n번 탐색하여 결과를 찾아내는 연산을 스트림을 API의 파이프라이닝을 통하여 한번의 게으른 연산으로 값을 찾을 수 있다. parallel 메서드로 인하여 스트림을 병렬로 처리할 수 있다. 내부반복, 외부반복, 부작용 없는 연산, 람다와 메서드 참조로 파라미터화된 메서드, 함수형 개념이 핵심이다. CompletableFuture 클래스 (Java8) Fut..
-
챕터[20] OOP와 FP의 조화 : 자바와 스칼라 비교모던자바인액션 2020. 10. 22. 01:29
서론 스칼라란? 자바와 스칼라 관계 클래스와 트레이트 스칼라란? 스칼라는 객체지향과 함수형 프로그래밍의 혼합한 언어이며, JVM에서 동작하기에 자바의 클래스를 사용할 수 있으며 마찬가지로 자바에서 라이브러리 추가만으로 스칼라 코드를 호출하여 사용할 수 있다. 스칼라에서의 모든 데이터 타입은 객체로 취급한다. 스칼라에서의 변수는 일반 선언 var과 상수 선언인 val이 존재한다. 스칼라 사용하기 문자열 보간법 컬렉션 사용 import scala.io.Source class ScalaExam { object Beer { def main(arg : Array[String]): Unit = { var n : Int = 2; while( n println(s"Hello ${n} bottles of beer")} ..
-
챕터[18] 함수형 관점으로 생각하기모던자바인액션 2020. 10. 22. 00:44
서론 함수형 프로그래밍을 이용하지 않으면 메소드의 호출로 인하여 다른 객체가 변경될 경우 부작용이 발생할 수 있다. 이러한 부작용은 결국 개발자 입장에서 유지보수를 하기 힘들게 만들며, 병렬로 처리하는 과정에서는 언제 어떻게 값이 변경되는지 추적할 수가 없어진다. 공유된 가변 데이터 어떠한 자료구조도 바꾸지 않으며(자신을 포함하는 클래스의 상태 및 다른 객체) return 문을 통해서 자신의 결과를 반환하는 메서드를 순수 메서드 혹은 부작용 없는 메서드라고 불린다. 부작용 없는 메서드의 부작용이란? 자료구조를 고치거나 필드에 값을 할당 예외 발생 파일에 쓰기 및 I/O 동작 선언형 프로그래밍 어떻게로 접근하는 방식을 선언형프로그래밍이라고 부르기도 한다. 선언형 프로그래밍에서는 우리가 원하는 것이 무엇이고..
-
챕터[17] 리엑티브 프로그래밍모던자바인액션 2020. 10. 22. 00:43
서론 리액티브 애플리케이션 및 시스템 개발 원칙 자바 9 Flow API Publisher, Subscriber, Subscirption, Processor 리액티브 프로그래밍 패러다임의 중요성 수년 전까지 대규모 애플리케이션은 수십 대의 서버, 기가바이트의 데이터, 수초의 응답 시간, 당연히 여겨졌던 몇 시간의 유지보수 시간 등의 특징을 가졌다. 오늘날에는 다음과 같은 적어도 세 가지 이유로 상황이 변하고 있다. 빅데이터 : 보통 빅테이터는 페타바이트 단위로 구성되며 매일 증가한다. 다양한 환경 : 모바일 디바이스에서 수천 개의 멀티 코어 프로세서로 실행되는 클라우드 기반 클러스터에 이르기까지 다양한 환경에 애플리케이션이 배포된다. 사용 패턴 : 사영자는 1년 내내 항상 서비스를 이용할 수 있으며 밀리..
-
챕터[16] 안정적 비동기 프로그래밍모던자바인액션 2020. 10. 21. 16:06
서론 비동기 작업을 만들고 결과 얻기 비블록 동작으로 생산성 높이기 비동기 API 설계 및 구현 Future 자바 8 이전의 코드에서는 Future를 통하여 비동기 작업을 진행하였지만 Future의 값을 얻을려고 접근을 하게 될 경우 블록이 되어 작업이 끝날때까지 무기한(쓰레드 대기시간) 기다리는 문제가 발생할 수 있다. ExecutorService executorService = Executors.newCachedThreadPool(); Future future = executorService.submit(new Callable() { @Override public Double call() throws Exception { // 오래걸리는 작업은 다른 스레드에서 실행되게 (실제로는 null이 아님) r..
-
챕터[15] CompletableFuture와 리액티브 프로그래밍 컨셉의 기초모던자바인액션 2020. 10. 21. 16:05
서론 Future란? Future(참조) Thread Pool Thread Pool을 이용하게 될 경우 계속해서 Thread가 증가하며 메모리가 할당되는 것이 아닌 별도의 Thread의 최대치를 정해둘 수 있다. 그렇기에 작업이 실행될 때마다 새로운 Thread가 생기는 것이 아닌 Thread Pool이 놀고 있는 Thread에게 작업을 할당해준다. 작업은 내부적으로 블로킹 큐에 저장되며, 놀고 있는 Thread가 블로킹 큐에서 작업을 빼서 실행하게 된다. 그리고 작업이 끝난 Thread 들은 다시 새로운 작업이 블로킹 큐에 들어올 때까지 대기상태로 대기한다.(유지한다) 장점 하드웨어에 맞는 수의 태스크를 유지함과 동시에 수 천개의 태스크를 Thread Pool에 아무 오버헤드 없이 제출할 수 있다는 점..
-
챕터[14] 자바 모듈 시스템모던자바인액션 2020. 10. 21. 16:05
서론 자바 모듈 시스템 10년 동안 직소 프로젝트 내부 기능이며, 자바 9에서 가장 많이 이야기 나오는 새로운 기능인 모듈 시스템에 대하여 알아보자. 물론 그전에 잠깐 현재 자바의 모듈화는 어떤식으로 했는지 부터 알아보자. 1. 관심사 분리(SoC) SoC : 컴퓨터 프로그램을 고유의 기능으로 나누는 동작을 권장하는 원칙이다. 특정 회계 애플리케이션을 개발한다고 가정 할 경우 SoC를 적용함으로 파싱, 분석, 레포트 기능을 모듈이라는 각각의 겹치지 않은 코드 그룹으로 분리할 수 있다. SoC 원칙은 모델, 뷰, 컨트롤러 같은 아키텍처 관점 그리고 북구 기법을 비즈니스 로직과 분리하는 등의 하위 수준 접근 등의 상황에 유용하다. 추가로 SoC 원칙은 다음과 같은 장점을 제공한다. 개별 기능을 따로 작업할 ..
-
챕터[13] 디폴트 메서드모던자바인액션 2020. 10. 21. 16:04
서론 디폴트 메서드란? 이론적인 챕터 알아두면 언젠가는 쓸 수 있을꺼라 생각한다. 기존 Java 8 이전의 인터페이스에 새로운 메서드가 생길경우 인터페이스를 구현하는 모든 클래스는 인터페이스의 새로운 메서드를 구현하거나 슈퍼클래스의 구현을 상속받아야 한다. 갑작스런(?) 인터페이스에 메서드가 추가될 경우 상속한 모든 클래스를 고치는 문제점을 해결하는 방법으러는 2가지가 존재한다. 정적 메서드(Static) 디폴트 메서드(default) 디폴트 메서드 활용 패턴 디폴트 메서드를 사용하는 방법으로 책에서 설명하는 디폴트 메서드 이용에는 2가지 방법을 알아보자. 선택형 메서드(optional) 디폴트 메서드를 이용하여 빈 메서드를 선언하여 사용을 원한다면 구현해서(재정의) 선언하면 된다. 다중 상속(multi..