전체 글

개발팀과 도메인 전문가가 이해할 수 있는 코드는 생산성과 직결되기 때문에 코드는 읽기 쉽고 이해하기 쉬워야 한다. 도메인 전용 언어(DSL)는 특정 도메인을 대상으로 만들어진 프로그래밍 언어로 이 문제를 해결할 수 있다. 도메인 전용 언어(domain-specific languages, DSL) DSL은 범용 프로그래밍 언어가 아니며, 특정 비즈니스 도메인의 문제를 해결하려고 만든 언어다. 특정 도메인에만 국한되므로 오직 자신의 문제를 어떻게 해결할지에만 집중할 수 있고 특정 도메인의 복잡성을 잘 다룰 수 있다. DSL을 개발하기 위한 두가지 필요성 의사 소통의 왕: 프로그래머가 아닌 사람도 이해할 수 있도록 코드의 의도가 명확히 전달되어야 한다.(코드가 비즈니스 요구사항에 부합하는지 확인할 수 있다.)..
일반적으로 코드 가독성이 좋다는 것은 '어떤 코드를 다른 사람도 쉽게 이해할 수 있음'을 의미한다. 익명 클래스를 람다 표현식으로 리팩터링하기 하나의 추상 메서드를 구현하는 익명 클래스는 람다 표현식으로 리팩터링할 수 있다. new Thread(new Runnable() { @Override public void run() { System.out.println("Hi~"); } }).start(); new Thread(()-> System.out.println("Hi~")).start(); 익명 클래스를 람다 표현식으로 변환하기 위한 조건 익명 클래스에서 사용한 this와 super는 람다 표현식에서 다른 의미를 갖는다. 익명 클래스에서 this는 익명 클래스 자신을 가르키지만 람다에서 this는 람다를..
8.1 컬렉션 팩토리 Arrays.asList() 팩토리 메서드를 이용하면 코드가 간단하게 생성 가능하다. 요소를 추가하거나 삭제하면 AbstractList 클래스에서 UnsupportedOperationException이 발생한다. UnsupportedOperationException이 발생하는 이유는 뭘까?? asList에서 사용하는 ArrayList는 java.util.ArrayList가 아니라 Arrays 클래스 내부의 정적인 클래스인 ArrayList를 사용하고 있다. Arrays클래스의 ArrayList 멤버 변수를 보면 Element가 final 키워드와 함께 초기화 되는것을 볼 수 있다. java.util.ArrayList와 동일한 추상 클래스인 AbstractList를 상속하고 있다. 집..
자바 7(포크/조인 프레임워크)이 등장하기 전에는 데이터를 서브파트로 분할하여 각각 스레드로 할당해야 된다. 의도치 않은 레이스 컨디션이 발생하지 않도록 적적한 동기화를 추가하여 마지막으로 부분 결과를 합쳐야 한다. 7.1 병렬 스트림 병렬 스트림이란 각각의 스레드에서 처리할 수 있도록 스트림 요소를 여러 청크로 분할한 스트림이다. (parallelStream) public static long parallelSum(long n) { return Stream.iterate(1L, i -> i + 1) .limit(n) .parallel() //스트림을 병렬 스트림으로 변환 .reduce(0L,Long::sum); } 이전 코드와 다른점은 parallel 메서드를 통해서 스트림이 여러 청크로 분활되어 있다..
컬렉션(Collection), 컬렉터(Collector), collect를 주의하며 학습하자 6.1 컬렉터란 무엇인가? 명령형 프로그래밍과 함수형 프로그래밍의 차이 명령형 프로그래밍 private static void groupImperatively() { Map transactionsByCurrencies = new HashMap(); for (Transaction transaction : transactions) { Currency currency = transaction.getCurrency(); List transactionsForCurrency = transactionsByCurrencies.get(currency); if (transactionsForCurrency == null) { tran..
uhanuu
몸뚱아리부터 마음가짐까지