모던 자바 인 액션 6주차 - Chap07
·
PL/모던 자바 인 액션
지금까지는 스트림을 통해 컬렉션을 선언형으로 제어하는 방법을 살펴봤다. 이번 장에선 `병렬 데이터 처리와 성능`에 대해 다룰 계획이다. 병렬 스트림 앞서, 4장에선 스트림 인터페이스를 이용하면 아주 간단하게 요소를 병렬로 처리할 수 있다고 이야기했다. `병렬 스트림`이란 각각의 스레드에서 처리할 수 있도록 스트림 요소를 여러 청크로 분할한 스트림이다. 여러 청크로 분할되어있으니 모든 멀티코어 프로세서가 각각의 청크를 할당받아 처리할 수 있다. 숫자 n을 인수로 받아 1~n까지 모든 숫자의 합을 반환하는 ㅁ네서드를 구현할때 우선 스트림으로 구현하면 다음과 같이 무한스트림을 받아 크기를 제한하는 방식으로 구현할 수 있다. public static long sequentialSum(long n) { retur..
자바 병렬 프로그래밍 - 3장
·
PL/모던 자바 인 액션
지난, 2장에서는 공유하는 데이터를 여러 곳에서 사용할 때 동기화하는 방법을 알아봤다. 이번 3장에서는 여러 스레드에서 특정 객체를 동시에 사용할 때 섞이지 않고 안전하게 동작하도록 객체를 공유하고 공개하는 방법을 알아볼 계획이다. 가시성(Visibility) 메모리 가시성이란, 멀티 스레드 환경에서 특정 공유변수를 참조하는 여러 스레드가 있을 때 하나의 스레드에서 데이터를 변경했는지 여부를 알 수 있느냐의 문제를 이야기한다. (동기화를 파악할 수 있느냐?) 이러한 가시성 문제는 직관적으로 이해할 수 있는 문제가 아니기에 쉽게 파악하고 코드를 작성하기 어렵다. 아래 코드를 보자. public class NoVisibility{ private static boolean ready; private stati..
소프트웨어 개발 방법론: 애자일 프로세스
·
CS/교육팀
이번 주는 소프트웨어 개발 방법론: 애자일 프로세스에 관한 주제를 다루겠다. 이 글을 통해 애자일 프로세스가 무엇인지 정리하고자 한다. 소프트웨어 프로세스 우선, 소프트웨어 프로세스이다. 소프트웨어 프로세스란, 소프트웨어를 개발하기 위해 필요한 활동의 집합을 구조화해서 정리한 집합이다. 즉, 해야할 비슷한 활동들을 묶어놓은 것인데 적게는 4단계, 크게는 5단계로 구분한다. Specification: 요구사항과 기능을 정의하고 스펙을 명시하는 과정이다. Design and Implementation: 실제 코드를 설계하고 작성하는 개발과정 Validation: 작성한 코드가 요구사항대로 진행되는지 검증하는 Testing 과정 Evolution: 유지, 보수하는 과정 여기서 Design과 Implementa..
Git이란?
·
CS/교육팀
프로젝트를 한다하면 Git 을 무조건적으로 사용한다. 그렇다면 Git을 왜쓸까? 이번주차에는 Git에 대해 잘 모르는 사람들, 헷갈리는 부분을 짚고 Git의 작동원리에 대해 알아보는 시간을 갖겠다. Git이란? 우선, 깃 공식 사이트인 https://git-scm.com/ 에 들어가보면 다음과 같이 설명이 되어있다. 이를 번역해보면, `Git은 소규모 프로젝트부터 대규모 프로젝트까지 모든 것을 속도와 효율성으로 처리하도록 설계된 무료 오픈 소스 분산 제어 시스템`이라고 한다. 프로젝트에 사용하는 분산 버전 제어시스템이 핵심으로, 한마디로 정리하면 Git은 분산형 버전 관리 시스템이다. Git을 통해 프로젝트의 버전을 관리하는 것이다. 그렇다면 GitHub는 무엇일까? 말그대로, Git에 중심지, 중추를 ..
자바 병렬 프로그래밍 - 2장
·
PL/모던 자바 인 액션
보호되어 있는 글입니다.
자바 병렬 프로그래밍 - 1장
·
PL/모던 자바 인 액션
보호되어 있는 글입니다.
모던 자바 인 액션 5주차 - Chap06
·
PL/모던 자바 인 액션
보호되어 있는 글입니다.
Effective Java - item 44
·
PL/모던 자바 인 액션
표준 함수형 인터페이스를 사용하라 자바 표준 라이브러리에 여러 표준 함수형 인터페이스가 담겨있다. 따라서, 필요한 용도에 맞는게 이미 존재한다면, 직접 구현하지말고 표준 함수형 인터페이스를 사용하자. 총 43개의 인터페이스 중 대표적으로 기억해야할 기본 인터페이스 6개의 이름과 함수 시그니처는 다음과 같다. UnaryOperator: T apply(T t) BinaryOperator: T apply(T t1, T t2) Predicate: boolean test(T t) Function: R apply(T t) Supplier: T get() Consumer: void accept(T t) 이어서, 기본 인터페이스는 기본 타입으로 int, long, double로 각 3개씩 변형이 존재한다. 해당 기본 ..
Effective Java - item 42
·
PL/모던 자바 인 액션
익명 클래스보다는 람다를 사용하라 과거 자바는 추상 메서드 하나만 담은 인터페이스(현재의 함수형 인터페이스)를 사용해 함수의 타입을 표현했다. 이런 인터페이스의 인스턴스를 함수객체라 하였고 익명 클래스를 통해 함수 객체를 만들었다. 이는 과거 객체지향 디자인 패턴에는 충분한 방법이었다. 그러나, 함수형 프로그래밍이란 개념이 등장하며 익명클래스 방식은 코드가 너무 길기에 적합하지 않았다. 람다의 등장 자바 8 부턴 함수형 인터페이스의 인스턴스를 익명 클래스가 아닌 람다식을 사용해 만들 수 있게 되었다. 람다를 통해 훨씬 더 간결하게 코드를 만들고 어떤 동작을 하는지도 명확히 알 수 있었다. Collections.sort(words, (s1,s2)->Integer.compare(s1.length(),s2.l..
모던 자바 인 액션 스터디 - 3주차
·
PL/모던 자바 인 액션
이번 주는 지난 주에 이은 람다에 대한 마무리와 스트림에 대한 간단한 소개가 교재 내용의 주를 이룬다. 형식 검사, 형식 추론 제약 함수형 인터페이스가 존재한다면 람다 표현식을 구현할 수 있다. 그러나, 람다 표현식을 봤을때 어떤 함수형 인터페이스를 구현하는지는 알 수 없다. 어떻게 람다 표현식의 실제 형식을 파악할까? 1. 형식 검사 람다가 사용되는 컨텍스트를 통해 대상 형식을 확인할 수 있다. 대상 형식이란, 어떤 컨텍스트에서 기대되는 람다표현식의 형식을 의미한다. 아래 코드를 보자. List heavierThan150g = filter(inventory,(Apple apple) -> apple.getWeight()>150); 이러한 코드가 있을때 아래 5가지 과정을 거쳐 형식을 검사한다. 1. fi..
유쓰응
글쓰는 개발자 Youth