티스토리 뷰

Java

[Java] 람다식 (1)

sayho 2022. 3. 10. 20:26
람다식

  메서드를 하나의 식으로 표현한 것. 메서드의 이름과 리턴 값이 없어지므로 익명 함수라고 한다. 만약 메서드를 

  사용한다면 클래스를 생성하고 객체를 생성해야 함수를 호출할 수 있다. 그러나 람다식을 사용하면 람다식 자체가

  함수가 되기 때문에 편리하다.

int[] arr = new int[5];
Arrays.setAll(arr, (i) -> (int)(Math.random()*5) + 1);

int method() {
	return (int)(Math.random()*5) + 1;
}
람다식 사용법
int max(int a, int b) {
	return a>b ? a : b;
}

(int a, int b) -> { return a>b ? a : b; }

(int a, int b) -> a>b ? a : b

(a, b) -> a>b ? a : b
람다식(익명 함수)를 호출할 수 있었던 이유

  자바에서 모든 메서드는 클래스 내에 포함되어있어야 하는데 람다식은 어디에 포함되는지 의문을 가질 수 있다.

  람다식은 익명 클래스의 객체와 동등하다고 볼 수 있다. 

(int a, int b) -> a>b ? a : b

class Object {
	int max(int a, int b) {
    	return a>b ? a : b;
    }
}
람다식을 호출하기 위한 방법

  람다식을 일회성으로 사용하는 것이 아닌 여러번 사용하고 싶다면 참조변수에 람다식이 포함된 익명 객체의 주소

  저장하면 된다. 참조변수를 사용하기 위해서는 참조변수에 클래스나 인터페이스가 할당되어야 한다. 

interface MyFunction {
	public abstract int max(int a, int b);
}

MyFunction f = new MyFunction() {
	public int max(int a, int b) {
    	return a>b ? a : b;
    }
};

Myfunction f2 = (int a, int b) -> a > b ? a : b;

int maxValue = f.max(10,20);
int maxValue2 = f2.max(10,20);
람다식 예제
// 람다 적용 전
List<String> list = Arrays.asList("aaa", "abc", "bbbb", "ddd", "eee");

Collections.sort(list, new Comparator<String> {
	public int compare(String s1, String s2) {
    	return s2.compareTo(s1);
    }
});

// 람다 적용 후
Collections.sort(list, (s1, s2) -> s2.compareTo(s1));
람다식 형변환

  람다식은 익명 객체이고 익명 객체는 타입이 없기 때문에 대입 연산자 사용 시 형변환이 필요하다. 람다식은 

  오직 함수형 인터페이스로만 형변환이 가능하고 모든 객체의 부모인 Object 타입으로는 형변환 불가능. 

interface Myfunction {
	void method();
}

Myfunction f = (Myfunction) ( () -> System.out.pringln("여기"));

 

'Java' 카테고리의 다른 글

객체지향  (0) 2022.03.20
[Java] 컬렉션 프레임워크  (0) 2022.03.13
[Java] 람다식 (2)  (0) 2022.03.12
[Java] Iterator와 ListIterator  (0) 2022.02.05
[Java] Collection 과 List  (0) 2022.02.05
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함