java8

· Java
Java8의 라이브러리와 언어의 업데이트된 부분을 알아보자. 어노테이션(annotation) Java의 어노테이션은 부가 정보를 프로그램에 장식할 수 있는 기능이다. 즉, 어노테이션은 문법적 메타데이터(syntactic metadata)다. Java8의 어노테이션은 두 가지가 개선되었다. 1. 어노테이션 반복 이전 자바에서는 선언에서 지정한 하나의 어노테이션만 허용했다. @interface Author { Stirng name(); } @Auth(name="a") @Auth(name="b") @Auth(name="c") // 에러 발생 : 중복된 어노테이션 이제 반복 조건만 만족한다면 선언을 할 때 하나의 어노테이션 형식에 여러 어노테이션을 지정할 수 있다. 어노테이션 반복은 기본으로 제공되는 기능이 아..
· Java
스트림과 게으른 평가 스트림은 데이터 컬렉션을 처리하는 편리한 도구다. 효율적인 구현 및 여러 이유로 Java8 설계자들은 스트림을 조금 특별한 방법으로 java8에 추가했다. 그중 하나로 스트림은 단 한 번만 소비할 수 있다는 제약이 있어서 스트림은 재귀적으로 정의할 수 없다. 자기 정의 스트림 다음 코드처럼 소수 스트림을 계산할 수 있다. public boolean isPrime(int candidate) { int candidateRoot = (int) Math.sqrt((double) candidate); return IntStream.rangeClosed(2, candidateRoot) .noneMatch(i -> candidate % i == 0); } public Stream primes(i..
· Java
자바로 프로그램을 개발하면서 한 번이라도 NullPointerException을 껶지 않은 사람은 없을 것이다. NullPointerException은 모든 자바 개발자를 괴롭히는 예외다. 1965년 토니 호어(Tony Hoare)라는 영국 컴퓨터과학자가 힙에 할당되는 레코드를 사용하며 형식을 갖는 최초의 프로그래밍 언어 중 하나인 알골(ALGOL)을 설계하면서 처음 null 참조가 등장했다. 그는 구현하기가 쉬웠기 때무엔 null을 도입했다고 하였다. 하지만 여러 해가 지난 후 그는 null 및 예외를 만든 결정을 가리켜 십억 달러짜리 실수라고 표현했다. 모든 자바 프로그래머라면 NullPointerException이라는 귀차는 예외가 발생하는 상황을 몸소 겪었을 것이다. 값이 없는 상황을 어떻게 처리..
· Java
람다 테스팅 일반적으로 좋은 소프트웨어 공학자라면 프로그램이 의도대로 동작하는지 확인할 수 있는 단위 테스팅(unit testing)을 진행한다. 우리는 소스 코드의 일부가 예상된 결과를 도출할 것이라 단언하는 테스트 케이스를 구현한다. 보이는 람다 표현식의 동작 테스팅 일반적인 메서드는 이름이 존재하기 때문에 단위 테스트를 문제없이 진행할 수 있지만, 람다는 익명이므로 테스트 코드 이름을 호출할 수 없다. 따라서 필요하다면 람다를 필드에 저장해 테스트 할 수 있다. public class OrderProduct { private String name; private int count; private int price; .... } public static class Order { public stati..
· Java
컬렉션 팩토리(Collection Factory) java 9에서는 작은 컬렉션 객체를 쉽게 만들 수 있는 방법을 제공한다. 자바에서 적은 요소를 포함하는 리스트를 만들때 아래처럼 사용할 것이다. List cars = new ArrayList(); cars.add("아반테"); cars.add("소나타"); cars.add("그랜저"); 이렇게 코드를 작성하게 되면 새 문자열을 저장하는데도 많은 코드가 필요하다. Arrays.asList() 팩토리 메서드를 이용하면 코드를 간단하게 줄일 수 있다. List cars = Arrays.asList("아반테", "소나타", "그랜저"); 내부적으로 고정된 크기의 변환할 수 있는 배열로 구현되었기 때문에 요소를 갱신할 순 있지만 추가하게 되면 Unsupporte..
· Java
이 전 글에는 스트림(Stream)이란 무엇인가?를 알아보았다. 그럼 스트림 API가 지원하는 다양한 연산을 알아보자. 필터링 Predicate로 필터링 (filter) 스트림 인터페이스는 filter 메서드를 지원한다. filter 메서드는 Predicate를 인수로 받아서 일치하는 모든 요소를 포함하는 스트림으로 반환한다. List vegetarianMenu = menu.stream() .filter(Dish::isVegetarian) .collect(toList()); 고유 요소 필터링 (distinct) 스트림은 고유 요소(Primary)로 이루어진 스트림을 반환하는 distinct 메서드도 지원한다.(고유 여부는 객체의 hashCode, equals로 결정) List numbers = Array..
· Java
Java 8 API의 몇몇 함수형 인터페이스는 다양한 유틸리티 메서드를 포함한다. 예를 들어 Comparator, Function, Predicate 같은 함수형 인터페이스는 람다 표현식을 조합할 수 있도록 유틸리티 메서드를 제공한다. 이것은 무슨 의미일까? 간단히 말해, 간단한 여러 개의 람다 표현식을 조합해서 두 Predicate의 or 연산을 수행하는 커다란 Predicate를 만들 수 있다. 또한 한 함수의 결과가 다른 함수의 입력이 되도록 두 함수를 조합할 수 있다. 그런데 Java 8 API에서 지원하는 Comparator, Function, Predicate 인터페이스는 함수형 인터페이스 아닌가? "함수형 인터페이스는 추상화 메서드가 1개뿐이라며?!" 라고 생각할 수 있을것이다. 그렇다. 추..
beekei
'java8' 태그의 글 목록