자바

자바 람다식의 종류 -> 리턴값 있음, 매개변수 있음, 리턴값 매개변수 있음 / 클래스 멤버와 로컬 변수 사용

알통몬_ 2017. 3. 19. 17:26
반응형


안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 


함수적 인터페이스에 대해 공부하시려면 아래 링크를 클릭하시면 됩니다.

2017/03/19 - [자바] - java 자바 람다식 기본 문법과 함수적 인터페이스


이번 포스팅에서는 

람다식의 세 가지 종류에 대해 공부하겠습니다.


1. 매개 변수, 리턴값 없는 람다식


@FunctionalInterface

public interface NoInterface {

    public void method();

}

위 인터페이스를 타겟타입으로 갖는 람다식

=> 

NoInterface ni = () -> { ... }

람다식이 대입된 인터페이스의 참조 변수는 

method() 호출 가능

ni.method();

예제)


2. 매개 변수 있는 람다식

@FunctionalInterface

public interface ATM {

    public void method(int a);

}

사용 예제)

3. 리턴값 있는 람다식

@FunctionalInterface

public interface ATM {

    public int method(int a, int b);

}

위 인터페이스를 타겟타입으로 가지는 람다식의 경우는

method()가 리턴 값이 있으므로 return 문이 있어야 함.

ATM atm = (a, b) -> { ... ; return 리턴값; }

{} 에 리턴문만 있고 리턴 문 뒤에 연산식이나 메소드 호출이 오는 경우는

아래 처럼 작성할 수 있음.

예제)

이상입니다.

다음은 람다식의 클래스 멤버 사용과 로컬 변수 사용에 대해 보겠습니다.

1. 클래스 멤버 사용

클래스 멤버는 제약사항 없이 람다식의 실행 블록에 사용이 가능합니다.

하지만 this 키워드 사용 시에는 주의 필요함.

람다식에서 this는 내부적으로 생성된 익명 객체 참조가 아니라

람다식을 실행할 객체의 참조임.


예제)


2. 로컬 변수 사용

람다식의 경우 주로 메소드 내부에서 작성됩니다.

때문에 로컬 익명 구현 객체를 생성시킨다고 봐야겠죠?


람다식에서 바깥 클래스의 필드 or 메소드는 사용하는데 제한이 없지만

메소드의 매개 변수 or 로컬 변수를 사용하면 이 두가지의 변수는

final 특성을 가져야 합니다.

위 두 가지 변수를 람다식에서 읽는 것은 가능하지만

람다식 내부나 외부에서 변경은 할 수 없습니다.


예제)

이상입니다.


위 5개의 예제들은 각자 실행해보시기 바랍니다 ㅎㅎ


다음 포스팅부터는 표준 API 함수적 인터페이스에 대해

하나씩 공부하겠씁니다~~

반응형