자바/++

[Java] 람다 [미완성]

backend dev 2022. 12. 5.

람다 표현식

람다식은 익명함수를 지칭하는 용어이다.

람다식을 사용하기 위해서는 함수형 인터페이스에 접근해서 사용해야한다.

람다식

즉 익명함수를 값으로 사용 할 수도 있으며 파라미터로 전달 및 변수에 대입 하기와 같은 연산들이 가능하다.

 

 

[Java] Comparator , Comparable , 익명객체(클래스)

Comparable, Comparator는 모두 인터페이스이다. 인터페이스 이므로 Comparable, Comparator를 사용하고자 한다면 인터페이스내에 선언된 메소드를 구현해야한다! Comparable 내부에는 compareTo(T o)라는 메소드가

keeeeeepgoing.tistory.com

 

 

 

람다의 표현식

1. 람다는 매개변수의 자료형을 생략할 수 있다, 생략 안하고 적어도 된다.

2. -> 이후에는 함수의 몸체로, 어떤 동작을 하는지 적어주면 된다.

3. 함수 내부 코드가 한줄일 경우 중괄호{}를 생략 할 수있다.

(int x) -> x+1
(x) -> x+1
x -> x+1

4. 함수 내부코드가 return문으로만 구성되어있으면 중괄호{}를 생략 할 수 없다.

() -> { return 1; }
(int x) -> { return x+1; }
x -> { return x+1; }
(x, y) -> { return x+y; }

 

5. 매개변수중 하나는 자료형을 적고 하나는 안 적을 수 없다.

//잘못된 유형 선언된 type과 선언되지 않은 type을 같이 사용 할 수 없다.
(x, int y) -> x+y
(x, final y) -> x+y  

 

 

 

예제

익명객체를 생성하기위해 익명클래스의 구현부를 채울때

람다를 사용하지않는경우

 Arrays.sort(xy, new Comparator<int[]>() { //Array.sort로 정렬, 정렬기준인 Comparator 직접 생성
    @Override
    public int compare(int[] o1, int[] o2) {
        if (o1[0] == o2[0]) { // x값이 같을경우
            return o1[1] - o2[1]; //y값을 기준으로 오름차순
        } else { //그게아닌 일반적인 경우는
            return o1[0] - o2[0]; // x값을 기준으로 오름차순
        }
    }
});

람다를 사용하는 경우

Arrays.sort(xy,(o1,o2)->{
    if (o1[1] == o2[1]) {
        return o1[0] - o2[0];
    }
    else{
        return o1[1] - o2[1];
    }
});

 

 

람다는 함수형 인터페이스의 구현체 메소드 구현에 사용된다.

위의 예제중 람다를 사용하지않는 경우에서는

new Comparator를 해서 compare메소드를 오버라이드(구현)한 익명객체를 Arrays.sort()의 두번째 전달인자로 주었다.

Comparator를 구현한 익명클래스의 인스턴스인 익명객체의 결국 필요한 부분은 구현(오버라이드)된 compare 메소드였을것이다.

 

그래서 두번째 예시인 람다를 사용하는 경우에는

함수형 인터페이스인 Comparator의 구현체메소드인 compare를 구현(overide)하는데 람다가 사용되었다.

 

 

 

 

 

함수형 인터페이스란?

구현체 메소드가 한개인 인터페이스를 함수형 인터페이스라고 한다.

Comparator과 같은 인터페이스도 다른 기본 메소드가 있어도, 구현체메소드는 하나이기 때문에 함수형 인터페이스이다.

 

 

 

 

 

 

출처,참고,더자세히보기

 

 

[Java] Lambda 람다식 (함수형 인터페이스와 메소드참조) - 총정리

1. 람다 표현식(lambda expression)이란? 람다 표현식(lambda expression)이란 "선언없이 실행가능한 함수" 입니다. 간단히 말해 코드한줄에 함수를 써서 그것을 호출하는 방식으로 표현한 것입니다. 자바 8

bangu4.tistory.com

 

Java 8 함수형 인터페이스 (Functional Interface)

Overview 함수형 인터페이스란 1 개의 추상 메소드를 갖는 인터페이스를 말합니다. Java8 부터 인터페이스는 기본 구현체를 포함한 디폴트 메서드 (default method) 를 포함할 수 있습니다. 여러 개의 디

bcp0109.tistory.com

 

[Java] 람다식(Lambda Expression)과 함수형 인터페이스(Functional Interface) - (2/5)

1. 람다식(Lambda Expression) 이란? Stream 연산들은 매개변수로 함수형 인터페이스(Functional Interface)를 받도록 되어있다. 그리고 람다식은 반환값으로 함수형 인터페이스를 반환하고 있다. 그렇기 때문

mangkyu.tistory.com

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

 

 

 

삼항연산자 관련

 

[Java] 삼항연산자 사용법 & 예제

if문을 사용하여 코딩을 할 경우 코드 라인이 의미 없이 길어지는 경우들이 종종 생깁니다. if(){ }else if(){ } 이렇게만 해도 벌써 5라인이죠. 하지만 단순한 if문일 경우 라인수를 획기적으로 줄여

coding-factory.tistory.com

 

'자바 > ++' 카테고리의 다른 글

[Java] BigInteger (큰 숫자 다루기)  (0) 2022.12.14
[Java] compareTo()  (0) 2022.12.05
[Java] Comparator , Comparable , 익명객체(클래스)  (0) 2022.12.04
[Java] Collection (컬렉션) 정리  (0) 2022.12.04
[Java] 나눗셈  (0) 2022.12.04

댓글