목록모던 자바 인 액션 (19)
초보개발자 긍.응.성
스칼라는 객체지향과 함수형 프로그래밍을 혼합한 언어다. 스칼라 또한 JVM에서 실행되며 자바에 비해 더 다양하고 심화된 함수형 기능을 제공한다. 스칼라와 자바에 적용된 함수형의 기능을 살펴보면서 자바의 한계가 무엇인지 확인해보자. 들어가며 투어를 환영합니다 이 투어에서는 스칼라에서 가장 자주 사용되는 기능을 요약하여 소개하며, 스칼라 초보자를 대상으로 합니다. 언어 전체를 다루는 튜토리얼이 아닌 간단히 둘러보기입니다. docs.scala-lang.org 함수 스칼라의 함수는 어떤 작업을 수행하는 일련의 명령어 그룹이다. 스칼라의 함수는 일급값이다. def isJavaMentioned(tweet: String) : Boolen = tweet.contains("Java") def isShortTweet(tw..
이번 장에서는 고급적인 함수형 프로그래밍 기법을 소개한다. 고차원 함수(higher-order functions) 함수를 인수로 받아서 다른 함수로 반환하는 정적 메서드를 고차 함수라고 부른다. 고차원 함수를 적용할 때 어떤 인수가 전달될지 알 수 없으므로 인수가 부작용을 포함할 가능성을 염두에 두어야 한다. 따라서 인수로 전달된 함수가 어떤 부작용을 포함하게 될지 정확하게 문서화하는 것이 좋다. 커링(currying) 커링은 x와 y라는 두 인수를 받는 함수 f를 한개의 인수를 받는 g라는 함수로 대체하는 기법이다. 이때 g라는 함수 역기 하나의 인수를 받는 함수를 반환한다. 이때 함수 g의 상태는 여러 과정이 끝나지 않은 상태를 가리켜 '함수가 부분적으로(partially) 적용되었다'라고 말한다. ..
공유된 가변 데이터 변수가 예상하지 못하는 값을 갖는 이유는 시스템의 여러 메서드에서 공유된 가변 데이터 구조를 읽고 갱신하기 때문이다. 어떤 자료구조도 바꾸지 않는 시스템이 있다면 문제가 일어날 일이 없다(유지 보수하기 쉽다). 자신을 포함하는 클래스의 상태 그리고 다른 객체의 상태를 바꾸지 않으며 return 문을 통해서만 자신의 결과를 반환하는 메서드를 순수(pure) 메서드 또는 부작용 없는(side-effect free) 메서드라고 부른다. 이때 말하는 부작용은 아래와 같다. 자료구조를 고치거나 필드에 값을 할당(setter) 예외 발생 파일에 쓰기 등의 I/O 동작 수행 선언형 프로그래밍 선언형 프로그래밍은 어떻게가 아닌 무엇을에 집중하는 프로그래밍 방식이다. 질의문 자체로 문제를 어떻게 푸는..
리액티브 프로그래밍 패러다임의 중요성이 증가하는 이유는 아래의 세 가지 때문이다. 빅데이터 : 보통 빅데이터는 페타바이트(Petabyte, PB, $10^{15}$ bytes) 단위로 구성되며 매일 증가한다. 다양한 환경 : 모바일 디바이스에서 수천 개의 멀티 코어 프로세서로 실행되는 클라우드 기반 클러스터에 이르기까지 다양한 환경에 애플리케이션이 배포된다. 사용 패턴 : 사용자는 1년 내내 항상 서비스를 이용할 수 있으며 밀리초 단위의 응답 시간을 기대한다.. 리액티브 매니패스토 리액티브 애플리케이션과 시스템 개발의 핵심 원칙에 대하여 정의한다. 직접 읽는게 더 도움될 것이다. 리액티브 선언문 탄력성(Resilient): 시스템이 장애 에 직면하더라도 응답성을 유지 하는 것을 탄력성이 있다고 합니다. ..
Future의 단순 활용 자바 5부터는 미래의 어느 시점에 결과를 얻는 모델에 활용할 수 있도록 Future 인터페이스를 제공하고 있다. 다른 작업을 처리하다가 시간이 오래 걸리는 작업의 결과가 필요한 시점이 되었을 때 Future의 get 메서드로 결과를 가져올 수 있다. get 메서드는 이미 계산이 완료되어 결과가 준비되었다면 즉시 결과를 반환하지만 결과가 준비되지 않았다면 작업이 완료될 때까지 스레드를 블록 시킨다. Future 인터페이스로는 간결한 동시 실행 코드를 구현하기에 충분하지 않다. 또한 복잡한 의존을 갖는 동작을 구현하는 것은 쉽지 않다. 자바 8에서는 새로 제공하는 CompletableFuture 클래스를 통해 Stream과 비슷한 패턴, 즉 람다 표현식과 파이프라이닝을 활용하여 간편..
(책의 기준으로)최근 소프트웨어 개발 방법을 획기적으로 뒤집는 두 가지 추세 애플리케이션을 실행하는 하드웨어 관련 멀티코어 프로세서가 발전하면 애플리케이션의 속도는 멀티코어 프로세서를 얼마다 잘 활용할 수 있도록 소프트웨어를 개발하는가에 달라질 수 있다. 애플리케이션을 어떻게 구성하는가 관련 마이크로서비스 아키텍처 선택이 증가하게 되며 독립적으로만 동작하는 웹사이트가 아닌 다양한 소스의 콘텐츠를 가져와 합치는 메시업 형태를 띠게 된다. 이를 위해 여러 웹 서비스에 접근해야 하는 동시에 서비스의 응답을 기다리는 동안 연산이 블록 되거나 귀중한 CPU 클록 사이클 자원을 낭비하지 않아야 한다. 특히 스레드를 블록함으로 연산 자원을 낭비하는 일은 피해야 한다. 이를 위해 자바 8에서는 Future인터페이스를 ..