목록책 정리 (74)
초보개발자 긍.응.성
소프트웨어에서 이름은 어디나 쓰인다. 이름을 잘 짓는 것만으로도 코드의 가독성이 많이 향상될 수 있다. 의도를 분명히 밝혀라 아무 의미 없는 이름은 짓지 말아야 한다 자료구조에도 그 쓰임을 이해할 수 있도록 이름을 지어야 한다 주석 없이 이해할 수 있는 이름을 지어라 int d; // 경과 시간(단위: 날짜) int elapsedTimeInDays; int daysSinceCreation; int daysSinceModification; int fileAgeInDays; 그릇된 정보를 피하라 널리 쓰이는 의미가 있는 단어를 다른 의미로 사용해선 안된다 서로 흡사한 이름을 사용하지 않도록 주의한다 유사한 개념은 유사한 표기법을 사용한다 일관성이 떨어지는 표기법을 갖지 않도록 한다 의미 있게 구분하라 불용어..
스칼라는 객체지향과 함수형 프로그래밍을 혼합한 언어다. 스칼라 또한 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과 비슷한 패턴, 즉 람다 표현식과 파이프라이닝을 활용하여 간편..