Programing_Java
Section#17 _ 람다식 본문
#1 람다식?
: 함수의 이름이 없는 익명 함수를 만들기 위한 표현식
: 함수형 프로그래밍은 객체 지향 프로그램과 달리 함수만을 구현하고 실행할 수 있는 개발 방식
: 함수를 하나의 간결한 식으로 표현하는 것 → 식별자 없이 실행 가능한 함수
#2 람다식 문법
: Java Script나 다른 함수형 프로그래밍에서 볼 수 있었던 문법 패턴들로 기존의 자바 문법과는 다름
: 문법이 매우 간결해지고, 원하는 결과를 쉽게 집계할 수 있음
// 메서드 1
int add (int x, int y){
return x+y
}
// 람다식 메서드
(x, y) → {return x+y}
메서드의 이름과 반환 타입을 제거 화살표 기호(→)를 사용해 구현
#2-1 소괄호 생략
: 매개변수 자료형 생략 가능 → 매개변수가 한개라면 소괄호도 생략 가능, 두 개 이상일 경우에는 생략 불가능
(x, y) → {return x + y}
x, y → {return x + y} // 매개변수 2개, 오류
#2-2 중괄호 생략
: 함수의 return 타입이 void라면 구현부에 있는 중괄호{} 도 생략 가능
→ 함수의 내용이 두 문장 이상, return 타입이 있는 경우에는 생략 불가능
(x, y) → {return x > y ? 1: 0;}
(x, y) → return x > y ? 1 : 0; // 오류, return값이 있어 중괄호 생략 불가능
#2-3 return 생략
: 중괄호 안의 구현 코드가 return 문만 존재할 경우 중괄호 {}와 return 모두 생략 가능
(x, y) → {return x > y ? 1 : 0;}
(x, y) → x > y ? 1 : 0; // 중괄호와 return 구문 생략
#3 함수형 인터페이스
: 인터페이스를 사용하려면 인터페이스를 클래스에 상속 시킨 뒤 내용을 구현해야함
→ class Classname implements Interfacename{}
: 람다식은 위 과정을 생략할 수 있음 → 람다식을 이용하게 되면 인터페이스는 하나의 기능만 정의 가능 → 여러 개의 메서드가 있을 경우, 구분하기 모호
: 람다식은 모든 인터페이스를 람다식의 타겟 타입으로 사용 불가
람다식 구현 : 인터페이스 생성 → 인터페이스에 람다식으로 구현할 메서드 선언
: 함수형 인터페이스 → 하나의 추상 메서드가 선언된 인터페이스 만 람다식의 타겟 타입이 될 수 있음
// 기존 인터페이스
public interface Ex1{
int add (int x, int y);
int minus (int x, int y);
}
// 함수형 인터페이스
public interface Ex2{
int add (int x, int y);
}
#3-1 함수형 인터페이스 선언
: 애노테이션을 부여해 메서드를 두 개 이상 추가하는 오류를 제한 → @FunctionalInterface : 문법적으로 오류를 발생시킴
#3-2 람다식과 외부변수의 관계
: 람다식 내부에서 지역변수를 사용하려면 해당 지역변수는 final로 선언되어야 함
지역변수 : stack 메모리 영역에 생성 / 람다식 : Heap 메모리 영역에 생성 → 서로 간섭 불가능
: variable capture → 람다식 내부에서 지역변수를 사용할 경우, 복사해 사용하기에 그대로 사용은 가능 하지만, 수정은 불가능
'MENTOR JAVA' 카테고리의 다른 글
Section#19 _ 파일 입출력 (0) | 2025.01.26 |
---|---|
Section#18 _ 스레드 (0) | 2025.01.25 |
Section#16 _ 컬렉션 프레임워크 (0) | 2025.01.23 |
Section#15 _ 기본 API 클래스 (0) | 2025.01.22 |
Section#14 _ 예외 처리 (1) | 2025.01.21 |