ݺߣ

ݺߣShare a Scribd company logo
Java8 Overview
Javacafe 백엔드 스터디 (자바8)
자바8 Overview
• 함수형 프로그래밍
• 람다 표현식
• 디폴트 메서드
• 메서드 레퍼런스
• 스트림 API
• 병렬로 처리
• 새로운 자바스크립트 엔진(나즈혼)
• JodaTime을 개선한 Date API
• 동시성 API 개선
좋은 소프트웨어의 기능이란
복잡한 것을 간단하게 보이도록 만드는
것이다.
- Grady Booch
자바8 Overview
자바8로 얻을 수 있는 것
•간결함
•가독성
•성능(멀티 스레드)
자바8 함수형 프로그래밍
람다와 메서드 레퍼런스
• 람다와 메서드 레퍼런스가 일급(first-class)으로 새롭게 추가.
• 일급(firstClass) 파라미터로 데이터를 넘기거나 변수로 할당할 수
있다.
• Primitive type : int, boolean, float
• Reference type : String, new 키워드로 생성한 각종 객체들
• Method reference : 메소드 블럭의 메모리상 주소 값
• Lambda : 익명함수 블록의 메모리상 주소값
자바8 함수형 프로그래밍
레거시 자바에서 inventory 정렬하기
Collections.sort(inventory, new Comparator<Apple>() {
@Override
public int compare(Apple o1, Apple o2) {
return Integer.compare(o1.getWeight(), o2.getWeight());
}
});
자바8 함수형 프로그래밍(Lambda)
자바8 람다를 사용한 정렬하기
inventory.sort(
(o1, o2) -> compare(o1.getWeight(), o2.getWeight())
);
(람다 파라미터) -> 람다 로직
자바8 함수형 프로그래밍(Lambda)
자바8 함수형 프로그래밍(Method reference)
자바8 메서드 레퍼런스 사용
inventory.sort(comparing(Apple::getWeight));
객체or클래스 :: 메서드
자바8 함수형 프로그래밍(Method reference)
(Apple a) -> a.getWeight() => Apple::getWeight()
자바8 default method
default 키워드를 사용하면 인터페이스에 메서드를 바로 설정 가
능
기존의 구현체 구조를 변경하지 않고도 새로운 기능을 추가 할
수 있다.
<Interface>
List
ArrayList
LinkedList
AnotherList
자바8 Stream API
• 스트림이란 한번에 한개씩 만들어지는
연속적인 데이터들의 모임이다.
• 자바8에서는 작업을 높은 수준으로 추상화
해서
스트림으로 만들어 처리할 수 있다.
• 스트림 파이프라인을 이용해서 추상화된 병
렬처리가 가능하다.
레거시 자바로 데이터 추출하기
칼로리 400이하의 메뉴를 정렬한 뒤 이름을 출력하라
List<Dish> lowCaloricDishes = new ArrayList<>();
// 칼로리가 400이하인 메뉴만 가지고 온다.
for (Dish d : menu) {
if (d.getCalories() < 400)
lowCaloricDishes.add(d);
}
// 칼로리 순으로 정렬한다
Collections.sort(lowCaloricDishes, new Comparator<Dish>() {
@Override
public int compare(Dish o1, Dish o2) {
return Integer.compare(o1.getCalories(), o2.getCalories());
}
});
// 요리 이름만 가지고 온다.
List<String> lowCaloricDishesName = new ArrayList<>();
for (Dish d : lowCaloricDishes) {
lowCaloricDishesName.add(d.getName());
}
자바8 Stream API
자바8 Stream API를 사용한 데이터 추출
List<String> lowCaloricDishesName = menu
.stream()
.filter(d -> d.getCalories() < 400)
.sorted(comparing(Dish::getCalories))
.map(Dish::getName)
.collect(toList());
자바8 Stream API
자바8 Stream API를 사용한 데이터 추출(병렬로 처
리)
List<String> lowCaloricDishesName = menu
.parallelStream()
.filter(d -> d.getCalories() < 400)
.sorted(comparing(Dish::getCalories))
.map(Dish::getName)
.collect(toList());
자바8 Stream API
Parallel Stream을 사용, 병렬프로그래밍을 쉽게 구현할 수 있다.
자바8 Stream API
정리
• 함수가 일급(first-class)이 되었다.
• 람다를 통해 익명클래스를 단순화
• 메서드 레퍼런스로 람다를 보다 간단하게 작성가능.
• 디폴트 메서드 추가
• 인터페이스에 메서드 바디를 제공
• 스트림기능 추가
• 복잡한 컬렉션 조작을 단순화
• 기존에 복잡했던 병렬 처리도 쉽게 구현가능
끝!!

More Related Content

자바8강의 0강. java8 overview

  • 1. Java8 Overview Javacafe 백엔드 스터디 (자바8)
  • 2. 자바8 Overview • 함수형 프로그래밍 • 람다 표현식 • 디폴트 메서드 • 메서드 레퍼런스 • 스트림 API • 병렬로 처리 • 새로운 자바스크립트 엔진(나즈혼) • JodaTime을 개선한 Date API • 동시성 API 개선
  • 3. 좋은 소프트웨어의 기능이란 복잡한 것을 간단하게 보이도록 만드는 것이다. - Grady Booch 자바8 Overview
  • 4. 자바8로 얻을 수 있는 것 •간결함 •가독성 •성능(멀티 스레드)
  • 5. 자바8 함수형 프로그래밍 람다와 메서드 레퍼런스 • 람다와 메서드 레퍼런스가 일급(first-class)으로 새롭게 추가. • 일급(firstClass) 파라미터로 데이터를 넘기거나 변수로 할당할 수 있다. • Primitive type : int, boolean, float • Reference type : String, new 키워드로 생성한 각종 객체들 • Method reference : 메소드 블럭의 메모리상 주소 값 • Lambda : 익명함수 블록의 메모리상 주소값
  • 6. 자바8 함수형 프로그래밍 레거시 자바에서 inventory 정렬하기 Collections.sort(inventory, new Comparator<Apple>() { @Override public int compare(Apple o1, Apple o2) { return Integer.compare(o1.getWeight(), o2.getWeight()); } });
  • 7. 자바8 함수형 프로그래밍(Lambda) 자바8 람다를 사용한 정렬하기 inventory.sort( (o1, o2) -> compare(o1.getWeight(), o2.getWeight()) );
  • 8. (람다 파라미터) -> 람다 로직 자바8 함수형 프로그래밍(Lambda)
  • 9. 자바8 함수형 프로그래밍(Method reference) 자바8 메서드 레퍼런스 사용 inventory.sort(comparing(Apple::getWeight));
  • 10. 객체or클래스 :: 메서드 자바8 함수형 프로그래밍(Method reference) (Apple a) -> a.getWeight() => Apple::getWeight()
  • 11. 자바8 default method default 키워드를 사용하면 인터페이스에 메서드를 바로 설정 가 능 기존의 구현체 구조를 변경하지 않고도 새로운 기능을 추가 할 수 있다. <Interface> List ArrayList LinkedList AnotherList
  • 12. 자바8 Stream API • 스트림이란 한번에 한개씩 만들어지는 연속적인 데이터들의 모임이다. • 자바8에서는 작업을 높은 수준으로 추상화 해서 스트림으로 만들어 처리할 수 있다. • 스트림 파이프라인을 이용해서 추상화된 병 렬처리가 가능하다.
  • 13. 레거시 자바로 데이터 추출하기 칼로리 400이하의 메뉴를 정렬한 뒤 이름을 출력하라 List<Dish> lowCaloricDishes = new ArrayList<>(); // 칼로리가 400이하인 메뉴만 가지고 온다. for (Dish d : menu) { if (d.getCalories() < 400) lowCaloricDishes.add(d); } // 칼로리 순으로 정렬한다 Collections.sort(lowCaloricDishes, new Comparator<Dish>() { @Override public int compare(Dish o1, Dish o2) { return Integer.compare(o1.getCalories(), o2.getCalories()); } }); // 요리 이름만 가지고 온다. List<String> lowCaloricDishesName = new ArrayList<>(); for (Dish d : lowCaloricDishes) { lowCaloricDishesName.add(d.getName()); } 자바8 Stream API
  • 14. 자바8 Stream API를 사용한 데이터 추출 List<String> lowCaloricDishesName = menu .stream() .filter(d -> d.getCalories() < 400) .sorted(comparing(Dish::getCalories)) .map(Dish::getName) .collect(toList()); 자바8 Stream API
  • 15. 자바8 Stream API를 사용한 데이터 추출(병렬로 처 리) List<String> lowCaloricDishesName = menu .parallelStream() .filter(d -> d.getCalories() < 400) .sorted(comparing(Dish::getCalories)) .map(Dish::getName) .collect(toList()); 자바8 Stream API
  • 16. Parallel Stream을 사용, 병렬프로그래밍을 쉽게 구현할 수 있다. 자바8 Stream API
  • 17. 정리 • 함수가 일급(first-class)이 되었다. • 람다를 통해 익명클래스를 단순화 • 메서드 레퍼런스로 람다를 보다 간단하게 작성가능. • 디폴트 메서드 추가 • 인터페이스에 메서드 바디를 제공 • 스트림기능 추가 • 복잡한 컬렉션 조작을 단순화 • 기존에 복잡했던 병렬 처리도 쉽게 구현가능
  • 18. 끝!!