자바 8-1-Lambda 표현 식 과 함수 식 인터페이스
public class SwingTest {
public static void main(String[] args) {
JFrame jFrame = new JFrame("My JFrame");
JButton jButton = new JButton("My JButton");
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Button Pressed!");
}
});
jFrame.add(jButton); jFrame.pack();
jFrame.setVisible(true);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
이것 은 Swing 프로 그래 밍 의 코드 입 니 다.Button 에 감청 이 벤트 를 연결 합 니 다.Button 을 누 르 면 콘 솔 에서"Button Pressed!"를 출력 합 니 다.내용모니터 에 익명 의 내부 클래스 를 만 드 는 인 스 턴 스 를 사 용 했 습 니 다.이것 은 기 존의 일반적인 코드 조직 형식 이기 도 합 니 다.그러나 자세히 보면 우리 가 진정 으로 주목 하 는 것 은 Action Event 형식의 매개 변수 e 와 콘 솔 에 출력 하 는 구문 System.out.println("Button Pressed!")이다.이전 프로그램 에서 익명 내부 클래스 로 인터페이스 인 스 턴 스 를 만 드 는 코드 를 Lambda 표현 식 으로 바 꾼 후 코드 는 다음 과 같 습 니 다 Public class SwingTest{
public static void main(String[] args) {
JFrame jFrame = new JFrame("My JFrame");
JButton jButton = new JButton("My JButton");
jButton.addActionListener(e -> System.out.println("Button Pressed!"));
jFrame.add(jButton);
jFrame.pack();
jFrame.setVisible(true);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}가장 중간 부분 코드 의 변 화 를 주목 하고 원래 의 6 줄 코드 에서 현재 1 줄 로 이 루어 집 니 다.이것 이 바로 람 다 표현 식 의 간단 한 형식 이다.Lambda 표현 식 의 문법 은(param 1,param 2,param 3)->{임 을 알 수 있 습 니 다.
//todo
}이 매개 변수의 유형 프로그램 은 상하 문 에 따라 추측 할 수 있 지만 모든 유형 을 추측 할 수 있 는 것 은 아 닙 니 다.이 때 는 우리 가 표시 하 는 성명 매개 변수의 유형 이 필요 합 니 다.매개 변수 가 하나 일 때 작은 괄호 는 생략 할 수 있 습 니 다.todo 부분 에 한 줄 의 코드 만 있 을 때 바깥쪽 의 큰 괄호 는 생략 할 수 있 습 니 다.위의 예제 와 같이 코드 가 간결 한 것 을 제외 하고 Lambda 표현 식 은 우리 에 게 어떤 변 화 를 가 져 다 주 었 습 니까?자바 에서 함 수 를 매개 변수 로 전달 할 수 없 는 지,반환 값 이 함수 라 고 설명 할 수 없 는 지 기억 해 봅 시다.자바 8 이전에 답 은 긍정 적 이 었 다.그러면 위의 예 에서 우 리 는 코드 논 리 를 매개 변수 로 감청 기 에 전달 할 수 있 고 감청 기 사건 이 발생 할 때 이렇게 할 수 있 으 며 익명 내부 류 의 방식 으로 매개 변수 가 필요 하지 않다 고 알려 줄 수 있다.이것 도 자바 8 이 가 져 온 또 다른 새로운 특성 이다.함수 식 프로 그래 밍 이다.함수 식 프로 그래 밍 을 지원 하 는 언어 는 매우 많 습 니 다.자바 스 크 립 트 에서 함 수 를 매개 변수 로 전달 하거나 반환 값 은 함수 인 경우 가 매우 흔 합 니 다.자바 스 크 립 트 는 매우 흔히 볼 수 있 는 함수 식 언어 입 니 다.Lambda 는 자바 에 부족 한 함수 식 프로 그래 밍 특성 을 추가 하여 함 수 를 1 등 시민 으로 볼 수 있 도록 합 니 다.함수 식 프로 그래 밍 언어 에서 Lambda 표현 식 의 유형 은 함수 입 니 다.자바 에서 Lambda 표현 식 은 대상 입 니 다.특별한 대상 유형 인 함수 식 인터페이스(Functional Interface)에 의존 해 야 합 니 다.다음은 함수 식 인터페이스의 정 의 를 살 펴 보 겠 습 니 다.만약 에 하나의 인터페이스 에 추상 적 인 방법(Object 류 의 방법 은 포함 되 지 않 음)이 있다 면 이 인 터 페 이 스 는 함수 식 인터페이스 로 볼 수 있 습 니 다.
@FunctionalInterface
public interface Runnable {
/**
* When an object implementing interface Runnable
is used
* to create a thread, starting the thread causes the object's
* run
method to be called in that separately executing
* thread.
*
* The general contract of the method run
is that it may
* take any action whatsoever.
*
* @see java.lang.Thread#run()
*/
public abstract void run();
}
Runnable 인터페이스의 성명 을 살 펴 보 자.자바 8 이후 Runnable 인터페이스 에 Function alInterface 주석 이 하나 더 생 겨 서 이 인 터 페 이 스 는 함수 식 인터페이스 임 을 나타 낸다.그러나 만약 에 우리 가 Functional Interface 주 해 를 추가 하지 않 는 다 면 인터페이스 에 추상 적 인 방법 이 있 고 추상 적 인 방법 만 있 을 때 컴 파일 러 도 이 인 터 페 이 스 를 함수 식 인터페이스 로 본다.
@FunctionalInterface
public interface MyInterface {
void test();
String toString();
}
MyInterface 이것 도 함수 식 인터페이스 입 니 다.toString()은 Object 류 의 방법 이기 때문에 여기 서 복사 만 했 을 뿐 인터페이스 에서 추상 적 인 방법의 수량 을 증가 하지 않 습 니 다.(여기에 자바 8 에서 인터페이스 안의 방법 은 추상 적 인 방법 만 있 는 것 이 아니 라 구체 적 으로 실현 되 는 방법 도 있 습 니 다.기본 적 인 방법(default method)이 라 고 불 립 니 다.이 부분 은 나중에 구체 적 으로 소개 합 니 다.자바 에서 Lambda 표현 식 이 대상 입 니 다.그렇다면 이 대상 의 유형 은 무엇 일 까요?SwingTest 프로그램 을 돌 이 켜 보면 익명 내부 클래스 로 Action Listener 인터페이스 인 스 턴 스 를 만 들 었 습 니 다.
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Button Pressed!");
}
});
Lambda 표현 식 개선 사용 후
jButton.addActionListener(e -> System.out.println("Button Pressed!"));
즉,우 리 는 Lambda 표현 식 을 사용 하여 ActionListener 인터페이스의 인 스 턴 스 를 만 들 었 고 ActionListener 인터페이스의 정 의 를 보 았 습 니 다.
public interface ActionListener extends EventListener {
/**
* Invoked when an action occurs.
*/
public void actionPerformed(ActionEvent e);
}
하나의 추상 적 인 방법 만 있 습 니 다.FunctionalInterface 주 해 를 추가 하지 않 았 지만 함수 식 인터페이스의 정의 에 부합 되 고 컴 파일 러 는 이것 이 함수 식 인터페이스 라 고 생각 합 니 다.따라서 Lambda 표현 식 을 사용 하면 함수 식 인터페이스의 인 스 턴 스 를 만 들 수 있 습 니 다.즉,Lambda 표현 식 은 함수 식 인터페이스 형식 을 되 돌려 줍 니 다.실제로 함수 식 인터페이스 인 스 턴 스 의 생 성 은 세 가지 방식(FunctionalInterface 설명 참조)이 있 습 니 다.1.Lambda 표현 식 2.방법 참조(후속 장절 소개)3.구조 방법 참조(후속 장절 소개)
소결:이 편 은 자바 8 을 배 우 는 문 을 열 었 습 니 다.lambda 표현 식 이 무엇 인지 알 게 되 었 습 니 다.함수 식 인터페이스의 정의 가 무엇 인지 알 게 되 었 습 니 다.그리고 몇 가지 예 를 들 어 lambda 표현 식 의 편리 함 을 보 여 주 었 습 니 다.이 글 이 당신 에 게 도움 이 된다 고 생각한다 면 칭찬 해 주세요.
다음 편
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.