모던 자바 인 액션
-
챕터[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")} ..
-
챕터[19] 함수형 프로그래밍 기법카테고리 없음 2020. 10. 22. 00:44
서론 일급 시민 고차원 함수 커링 부분 적용 영속 자료구조 자바 스트림을 일반화하는 게으른 평가와 게으른 리스트 패턴 매칭, 자바에서 패턴 매칭을 흉내 내는 방법 참조 투명성과 캐싱 일급 함수 함수형 프로그래밍에서 함수를 마치 일반값처럼 사용하여 인수를 전달하거나, 결과를 반환하거나 자료구조를 저장할 수 있어 일반값처럼 취급하는 함수를 일급 함수라고한다. 자바 8이 이전 버전과 구분될 수 있는 특징중 하나가 일급 함수를 지원한다는 점이 있다. 추가로 자바 8에서는 메서드 참조( :: ) 및 람다로 직접 함수값을 표현해 메서드를 함수값으로 사용할 수 있다. 고차원 함수 자바 8의 함수는 고차원 함수라 할 수 있으며 아래의 특징을 가진다. 하나 이상의 함수를 인수로 받는다. 결과값으로 함수를 반환한다. 지역..
-
챕터[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..
-
챕터[4] 스트림모던자바인액션 2020. 10. 21. 15:56
서론 자바 8에서 추가된 스트림은 무엇인지 컬렉션과 무엇이 다른지 등 스트림의 대해서 설명 스트림이란? Java 8 API에 새로 추가된 기능으로 스트림을 이용하면 선언형(데이터를 처리하는 임시 구현 코드 대신 질의로 표현)으로 컬렉션 데이터를 처리할 수 있다. 또한 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다. 특징으로는 선언형(간결 및 가독성 증가), 조립가능(유연성 증가), 병렬화(성능 증가) 가 존재한다. (스트림은 계속해서 챕터에 나오므로 순차적으로 배워가면 된다.) 스트림 == 데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소 요소의 정의 연속된 요소 컬렉션과 동일하게 스트림은 특정 요소 형식으로 이루어진 연속된 값 집합의 인터페이스를 제공한다. 컬렉션은..
-
챕터[2] 동작 파라미터화모던자바인액션 2020. 10. 21. 15:55
제너릭이란 클래스에서 사용할 타입을 클래스 외부에서 선택하여 사용한다. 제네릭 타입은 참조형 타입만 가능하다 (기본형 사용 불가능) ->Wrapper Class 사용 동작 파라미터화란? 자주 바뀌는 요구사항에 효과적으로 대응할 수 있는 방법으로 아직은 어떻게 실행할 것인지 결정화지 않은 코드 블럭을 의미한다. 동작 파라미터화 변화는 요구사항에 대응하기 위하여 기존에는 메서드를 제작하여 구현하였다. 아래와 같이 2가지의 일을 하는 2개의 메서드를 구현하여 판단했다. -> 사과의 색이 빨간색인 사과만 거르는 필터링 메서드 -> 사과의 색이 초록색인 사과만 거르는 필터링 메서드 매 요구사항마다 메서드가 하나씩 생길 수 있는 반면 동작 파라미터화를 이용하여 참 또는 거짓만 반환하는 함수인 프리디케이트를 정의해보..