반응형
람다식
- 자바에서 함수형 프로그래밍(functional programming)을 구현하는 방식
- 자바 8부터 지원
- 클래스를 생성하지 않고 함수의 호출만으로 기능을 수행
[참고] 함수형 프로그래밍
- 순수 함수(pure function)을 구현하고 호출함으로써 외부 자료에 부수적인 영향을 주지 않고 매개 변수만을 사용하도록 만든 함수
- 함수를 기반으로 구현
- 입력받은 자료를 기반으로 수행되고 외부에 영향을 미치지 않으므로 병렬처리 등이 가능하다.
- 안정적인 확장성 있는 프로그래밍 방식
람다식 구현
- 익명함수를 만든다
- 매개 변수와 매개 변수를 활용한 실행문으로 구현
- (매개변수) -> {실행문;}
[두 수를 입력 받아 더하는 add() 함수 예]
int add(int x, int y){
return x+y
}
🔻
(int x, int y) -> {x+y;}
-
함수 이름 반환형을 없애고 -> 를 사용한다.
-
{}까지 실행문을 의미한다.
람다식 문법
- 매개 변수(하나 인경우) 자료형과 괄호 생략
- str -> {System.out.println(str);}
- 매개변수가 두 개인 경우 괄호를 생략할 수 없다.
- 잘못된 예) x, y ->{System.out.println(x+y);}
- 중괄호 안의 구현부가 한 문장인 경우 중괄호 생략 가능.
- str -> System.out.println(str);
- 중괄호 안의 구현부가 한 문장이라도 return문이 있다면 중괄호 생략 불가
- 잘못된 예) str -> return str.length();
- 중괄호 안의 구현부가 반환문 하나라면 return 문과 중괄호 모두 생략한다.
- str -> str.length();
- (x,y) ->x+y;
[실습] 함수형 프로그래밍 - 1.함수형 인터페이스 선언
public interface MyNumber {
//추상 메서드 선언
int getMax(int num1, int num2);
}
[실습] 함수형 프로그래밍 - 2.람다식 구현과 호출
public class MyNumberTest{
public static void main(String[] args) {
//람다식을 인터페이스형 max 변수에 대입
MyNumber max = (x,y) -> (x >= y) ? x : y; //x가 y보다 크면 x 반환, 작으면 y 반환
//인터페이스형 변수로 메서드 호출
System.out.println(max.getMax(10, 20)); //20
}
}
[실습]객체지향 프로그래밍 방식으로 구현 - 1.인터페이스 구현
public interface StringConcat {
//추상메서드 선언
public void makeString(String str1, String str2);
}
[실습]객체지향 프로그래밍 방식으로 구현 - 2.추상메서드를 구현하기 위한 클래스 정의
//StirngConcat 인터페이스를 구현
public class StringConcatImp implements StringConcat{
@Override
public void makeString(String str1, String str2) {
// TODO Auto-generated method stub
System.out.println(str1+str2);
}
}
[실습]객체지향 프로그래밍 방식으로 구현 - 3.문자열 연결을 위한 클래스를 실행
public class StringConcatTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//문자열을 선언 및 초기화
String str1 = "Java";
String str2 = "Study";
//객체 생성
StringConcatImp concat = new StringConcatImp();
//메소드 호출
concat.makeString(str1, str2); //JavaStudy
}
}
[실습] 람다식 표현식으로 구현하기
public interface StringConcat {
//추상메서드 선언
public void makeString(String str1, String str2);
}
public class LambdaStringConcatTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//문자열을 선언 및 초기화
String str1 = "Java";
String str2 = "Study";
StringConcat concat = (s1, s2) -> System.out.println(s1+s2);
concat.makeString(str1, str2);
}
}
람다표현식은 객체지향프로그래밍처럼 인터페이스 구현 후 추상메서드를 구현하기 위한 클래스를 정의할 필요가 없다.
반응형
'Language > JAVA' 카테고리의 다른 글
[JAVA] 스트림(Stream) 연산 (0) | 2020.07.02 |
---|---|
[JAVA]Class 클래스 (0) | 2020.07.01 |
[JAVA]내부클래스 (0) | 2020.07.01 |
[JAVA]StringBuffer VS StirngBuilder (0) | 2020.07.01 |
[JAVA]String 클래스 (0) | 2020.07.01 |
댓글