[Java]람다식

박진우·2022년 9월 17일
0

[Java]자바의 기초

목록 보기
16/16

람다식이란

자바 8부터 함수적 프로그래밍 위해 람다식 지원

  • 람다식(Lambda Expressions)을 언어 차원에서 제공
    • 람다 계산법에서 사용된 식을 프로그래밍 언어에 접목
    • 익명 함수(anonymous function)을 생성하기 위한 식

자바에서 람다식을 수용한 이유

• 코드가 매우 간결해진다.
• 컬렉션 요소(대용량 데이터)를 필터링 또는 매핑해 쉽게 집계

자바는 람다식을 함수적 읶터페이스의 익명 구현 객체로 취급

어떤 인터페이스를 구현할지는 대입되는 인터페이스에 달려있음

Interface(MyInterface)

public interface MyInterface {

	void sayHello();
}

Class(MyInterfaceImpl)

public class MyInterfaceImpl implements MyInterface {

	@Override
	public void sayHello() {
		System.out.println("Hello, MyInterface instance");
	}

}

Main

Lambda Expression 정의
1. Interface의 추상메소드로만 사용 가능
2. Interface의 추상메소드가 1개만 있을 경우만 사용 가능
3. lambda expression(람다표현식)으로 생성된 인스턴스는 내부적으로 Interface를 자식 익명객체로 만든것과 동일
4. Lambda expression 예
() -> {System.out.println("Hello, Lambda function MyInterface Instance");}
=> sayHello() 추상메소드를 구현한 것을 표현
. () : method parameter list
.{System.out.println("Hello, Lambda function MyInterface Instance");} => sayHello method의 body를 coding한 것


public class Main {

	public static void main(String[] args) {
		MyInterfaceImpl mi = new MyInterfaceImpl();
		mi.sayHello();
		
		// 인터페이스를 익명객체로 생성하여 사용
		MyInterface ma = new MyInterface() {
			
			@Override
			public void sayHello() {
				System.out.println("Hello, Anonymous MyInterface Intance");
			}
		};
		ma.sayHello();
		
		// Lambda 표기법
		MyInterface ml = () -> {System.out.println("Hello, Lambda function MyInterface Instance");};
		ml.sayHello();
	}

}

Interface(MyFunctionalInterface)

@FunctionalInterface
public interface MyFunctionalInterface {
	
	int method(int x, int y);

}

Main

람다표현식 사용 규칙
1. 1. method 본문 내용 코딩을 가능하면 1개 명령어로 coding할 것
=> 추상메소드 body에 있는 명령어가 1개이면 {} 제거 가능

	fi = () -> System.out.println();
		fi.method();
  1. 추상메소드의 parameter 갯수가 1개이면 () 제거 가능
	fi = x -> System.out.println(x*5);
		fi.method(5);
  1. 추상메소드의 body가 return 키워드를 포함하여 1개의 명령어로 되어 있으면 {}와 return 키워드 제거 가능
public class MyFunctionalInterfaceEx {

	public static void main(String[] args) {
		MyFunctionalInterface fi;
	
		fi = (x,y) -> {
			int result = x+y;
			return result;
		};
		System.out.println(fi.method(5, 2));

		fi = (x,y) -> {return x+y;};
		System.out.println(fi.method(5, 2));
		
		fi = (x, y) -> x+y;
		System.out.println(fi.method(5, 2));
		
		fi = (x, y) -> sum(x,y);
		System.out.println(fi.method(5, 2));
	}

	public static int sum(int x, int y) {
		return (x+y);
	}
}


강의를 듣은후 느낀점

오늘은 굉장히 간단한걸 해서 편안하게 했었던 것 같다. 이제 자바의 기초 강의는 끝났다.
이 이후에는 당분간 코드업 기초 100제롤 풀 예정이다

profile
개발자를 꿈꾸는 사람입니다

0개의 댓글