이것이 자바다 Chap.14 람다식 Lambda expression(java) 발표용 PPT
간단하게 정리한 것.
이것이 자바다 책을 기반으로 작성한 강의용 PPT입니다.
부족한 게 많으니 쓰실 때에는 추가하셔서 쓰세요~
참고 자료 : 이것이 자바다
사진 첨부 : http://palpit.tistory.com/
이것이 자바다 Chap.16 스트림&병렬처리 Stream¶llel processing(java) 발표용 PPT
이 자료는 인코딩 과정에서 슬라이드가 다 날라가 버려서 중간중간이 날라갔습니다......
간단하게 정리한 것.
이것이 자바다 책을 기반으로 작성한 강의용 PPT입니다.
부족한게 많으니 사용하실 때에는 추가하셔서 쓰세요~
참고 자료 : 이것이 자바다
사진 첨부 : http://palpit.tistory.com/
이것이 자바다 익명 객체 + Chap.11 기본 API 클래스(java) 발표용 PPT.
간단하게 정리한 것.
이것이 자바다 책을 기반으로 작성한 강의용 PPT입니다.
부족한 게 많으니 쓰실 때에는 추가하셔서 쓰세요~
참고 자료 : 이것이 자바다
사진 첨부 : http://palpit.tistory.com/
지난 26일(2014/7/26), 지앤선과 KSUG가 함께 진행했던 세미나에서 발표한 람다 관련 내용입니다.
첫 시간에 정대원님이 발표하신 람다 기본에 다루지 않은 내용만 정리했는데 지난 번에 올렸던 자료(http://www.slideshare.net/gyumee/java-8-lambda-35352385)의 후편으로도 볼 수 있을 것 같습니다.
제 발표는 장표만으로 내용을 가늠하기 어려운데 그래도 이번에는 청각 장애인들도 참여한다고 해서 장표에 글자를 많이 넣으려고 했습니다.
동작 파라미터와 람다(Java 8 in Action)
자바8 in Action을 읽고 정리해본 내용입니다.
자바8은 함수형 패러다임과 멀티 코어에서의 병렬 처리를 돕는 방향으로 출시되었습니다.
‘자바 8 in Action’ 책을 읽고 ppt로 정리해봤습니다.
어떻게 해서 람다와 메서드 레퍼런스 개념까지 자바8에 도입이 되었는지 설명하는 문서입니다.
주요 키워드
동작 파라미터화(Behavior Parameterization), 값 파라미터화, 익명 클래스, 람다
스프링 컨테이너는 base-package의 클래스를 검색해서 자동으로 자바빈으로 등록하는데 이에 해당하는것이 @Component, @Repository, @Service, @Contoroller, @RestController 어노테이션이다.
자동스캔을 위해서는 <context:component-scan /> 과 같이 base-package를 기술하며, 패키지가 여럿인 경우, 콤마로 구분하여
기술한다.
본 강좌에서는 클로저에 대해 알아보도록 하겠습니다. 클로저란 내부 함수와 내부 함수에 영향을 미치는 주변환경을 모두 포함한 객체로정의할 수 있습니다. 또한 클로저는 func와 함수이름이 생략된 경량의 함수객체로 클로저 표현을 통해 문장릉 짧고 간단하게 만들 수 있습니다.
Youtube
- https://youtu.be/0bIRlDCH8kU
let us: Go! 2020 fall
https://let-us-go-2020-fall.vercel.app/
https://youtu.be/73IVJfFHDzI?t=12057
The MyBatis data mapper framework makes it easier to use a relational database with object-oriented applications. This document explain about MyBatis basic concept.
1. 람다식
- 함수적 프로그래밍을 위해서 자바 8부터 람다식을 지원하면서 코드
패턴이 많이 바뀌게 됨.
- 익명 함수를 생성하기 위한 식으로 객체 지향 언어보다는 함수 지향
언어에 가깝다.
- 자바 코드가 매우 간결해지고, 컬렉션의 요소를 필터링하거나 매핑해
서 원하는 결과를 쉽게 집계할 수 있다.
Runnable runnable = new Runnable() {
public void run() {
...
}
};
Runnable runnable = () -> { ... };
- Runnable 인터페이스의 익명구현 객체 생성.
2. 람다식
기본 문법
(타입 매개변수, ...) -> { 실행문; ... }
(int a) -> { System.out.println(a); }
(a) -> { System.out.println(a); }
a -> { System.out.println(a); }
람다식에서는 매개 변수의 타입을 일반적으로 언급하지 않으므로 다음처
럼.
(매개 변수 타입은 런타임 시에 대입되는 값에 따라 자동으로 인식)
하나의 매개변수만 있으면 괄호 생략 가능.
3. 람다식
기본 문법
() -> { 실행문 ; ... }
(x, y) -> { return x+y ;}
(x, y) -> x+y
중괄호 안에 return문만 있을 경우 다음과 같이 씀.
4. 람다식
타겟 타입
- 람다식은 메소드를 가지고 있는 객체를 생성.
인터페이스 변수 = 람다식;
- 람다식은 인터페이스 변수에 대입된다.
- 람다식은 인터페이스의 익명 구현 객체를 생성한다.
- 람다식은 대입될 인터페이스의 종류에 따라 작성 방법이 다르다.
- 람다식이 대입될 인터페이스를 람다식의 타겟 타입.
6. 람다식
매개 변수와 리턴값이 없는 람다식(함수적 인터페이스)
public class MyFunctionalInterfaceExam {
public static void main(String[] args) {
MyFunctionalInterface fi;
//세 람다식이 같은 의미
fi = () -> {
String str = "method call1";
System.out.println(str);
};
fi.method();
//-----------------------------------------------------
fi = () -> {
System.out.println("method call2");
};
fi.method();
//-----------------------------------------------------
fi = () -> System.out.println("method call3");
fi.method();
}
}
7. 람다식
매개 변수가 있는 람다식(함수적 인터페이스)
public class MyFunctionalInterfaceExam2 {
public static void main(String[] args) {
MyFunctionalInterface2 fi;
//두 람다식이 같은 의미
fi = (x) -> {
int result = x * 5;
System.out.println(result);
};
fi.method(2);
//-----------------------------------------------------
fi = x -> System.out.println(x * 5);
fi.method(2);
}
}
8. 람다식
리턴값이 있는 람다식(함수적 인터페이스)
public class MyFunctionalInterfaceExam3 {
public static void main(String[] args) {
MyFunctionalInterface3 fi;
//네 람다식이 다 같은 의미
fi = (x, y) -> {
int result = x + y;
return result;
};
System.out.println(fi.method(2, 5));
//---------------------------------------------------------
fi = (x, y) -> {
return x + y;
};
System.out.println(fi.method(2, 5));
//---------------------------------------------------------
fi = (x, y) -> x + y;
System.out.println(fi.method(2, 5));
//---------------------------------------------------------
fi = (x, y) -> sum(x, y);
System.out.println(fi.method(2, 5));
}
public static int sum(int x, int y) {
return x + y;
}
}
9. 람다식
클래스 멤버와 로컬 변수 사용
- 람다식 실행 블록에는 클래스의 멤버(필드와 메소드) 및 로컬 변수를
사용할 수 있다.
클래스 멤버의 사용
- 람다식 실행 블록에는 클래스의 멤버인 필드와 메소드를
제약 사항 없이 사용가능.
- 하지만 this 키워드를 사용할 때에는 주의.
- 일반적으로 익명 객체 내부에서 this는 익명 객체의 참조이지만,
람다식에서 this는 내부적으로 생성되는 익명 객체의 참조가 아니라
람다식을 실행한 객체의 참조.
10. 람다식
클래스 멤버의 사용
public class UsingThis {
public int outterField = 10;
class Inner {
int innerField = 20;
void method() {
MyFunctionalInterface4 fi = () -> {
System.out.println("Outter Field: " + outterField);
System.out.println("Outter Field: " + UsingThis.this.outterField + "n");
System.out.println("Inner Field: " + innerField);
System.out.println("Inner Field: " + this.innerField + "n");
};
fi.method();
}
}
}
public class UsingThisExam {
public static void main(String[] args) {
UsingThis usingThis = new UsingThis();
UsingThis.Inner inner = usingThis.new Inner();
inner.method();
}
}
중첩 객체 Inner에서 람다식을 실행했기 때문에 람다식 내부에서의 this는 중첩 객체 Inner 입니다.
11. 람다식
로컬 변수 사용
- 람다식은 메소드 내부에서 주로 작성되기 때문에 로컬 익명 구현 객체를 생성시킨
다고 봐야 합니다.
- 람다식에서 바깥 클래스의 필드나 메소드는 제한 없이 사용할 수 있으나, 메소드의
매개 변수 또는 로컬 변수를 사용하면 이 두 변수는 final 특성을 가져야 합니다.
- 따라서 매개 변수 또는 로컬 변수를 람다식에서 읽는 것은 허용되지만, 람다식 내
부 또는 외부에서 변경할 수 없습니다.
public class UsingLocalVariable {
void method(int arg) {
int localVar = 40;
// arg = 31; // final 특성 때문에 수정 불가
// localVar = 41; // final 특성 때문에 수정 불가
MyFunctionalInterface5 fi = () -> {
System.out.println("arg: " + arg);
System.out.println("localVar: " + localVar);
};
fi.method();
}
}
12. 람다식
표준 API의 함수적 인터페이스
- 자바 8 부터는 빈번하게 사용되는 함수적 인터페이스(Functional
Interface)는 java.util.function 표준 API 패키지로 제공합니다.
- 목적 : 함수적 인터페이스를 메소드 또는 생성자의 매개 타입으로 사
용하여 람다식을 대입할 수 있도록 하기 위해서 입니다.
- java.util.function 패키지의 함수적 인터페이스는 크게 Consumer,
Supplier, Function, Operator, Predicate로 구분됩니다.
18. 람다식
andThen()과 compose() 디폴트 메소드
- Comsumer, Function, Operator 종류의 함수적 인터페이스는 andThen()
과 compose() 디폴트 메소드를 가지고 있습니다.
- andThen() 과 compose() 메소드는 두 개의 함수적 인터페이스를 순차적
으로 연결하고, 첫 번째 처리 결과를 두 번째 매개값으로 제공해서 최종 결
과값을 얻을 때 사용합니다.
- andThen()과 compose()의 차이점은 어떤 함수적 인터페이스부터 먼저
처리하느냐에 따라 다릅니다.
20. 람다식
and(), or(), negate() 디폴트 메소드와 isEqual() 정적 메소드
- 이 메소드들은 각각 논리 연산자인 &&, ||, !과 대응된다.
minBy(), maxBy() 정적 메소드
- 이 두 메소드는 매개값으로 제공되는 Comparator를 이용해서
최대 T와 최소 T를 얻는 BinaryOperator<T>를 리턴합니다.
21. 람다식
메소드 참조
- 메소드 참조(Method Reference)는 말 그대로 메소드를 참조해서 매개 변수의
정보 및 리턴 타입을 알아내어, 람다식에서 불필요한 매개 변수를 제거하는 것
이 목적입니다.
정적 메소드와 인스턴스 메소드 참조
클래스 :: 메소드;
매개 변수의 메소드 참조
람다식에서 제공되는 a 매개 변수의 메소드를 호출해서 b 매개 변수
를 매개값으로 사용하는 경우
(a, b) -> { a.instanceMethod(b); }
Class :: instanceMethod
22. 람다식
생성자 참조
- 생성자를 참조한다는 것은 객체 생성을 의미
(a, b) -> { return new Class(a, b); }
Class :: new;