코딩테스트

자바 코딩테스트 메서드 기초: 람다식

망고고래 2024. 4. 18. 18:42

람다식(lambda expression) = 익명 함수(anonymous function)

what?

이름 없는 함수

why?

  1. 코드에서 한 번만 실행하는 경우
  2. 함수 자체를 다른 함수의 인수로 전달하는 경우
  3. 함수를 더 간결하게 표현할 수 있고 가독성이 좋아짐

how?

private static class Node{
    int dest, cost;
    
    public Node(int dest, int cost){
        this.dest = dest;
        this.cost = cost;
    }
}

public static void main(String[] args){
    Node[] nodes = new Node[5];
    nodes[0] = new Node(1,10);
    nodes[1] = new Node(2, 20);
    nodes[2] = new Node(3, 15);
    nodes[3] = new Node(4, 5);
    nodes[4] = new Node(1, 25);
    
    //익명 함수 사용
    Arrays.sort(nodes, (o1, o2) -> Integer.compare(o1.cost, o2.cost));
    
    //익명 함수 사용 x
    Arrays.sort(nodes, new Comparator<Node>(){
        @Override
        public int compare(Node o1, Node o2){
            return Integer.compare(o1.cost, o2.cost);
        }
    });
}

 

1)람다식 사용

Arrays.sort(nodes, (o1, o2) -> Integer.compare(o1.cost, o2.cost));

 

Arrays.sort()를 사용해서 배열 정렬

두 번째 매개변수로 'Comparator' 인터페이스의 'compare()' 메서드를 구현하는 람다식 전달

(o1, o2) -> Integer.compare(o1.cost, o2.cost)

 

Node 객체를 cost를 기준으로 비교함

(o1, o2): 매개변수 목록(nodes)

->: 람다 화살표. 매개변수 목록과 람다식 본문 분리

Integer.compare(o1.cost, o2.cost): 람다식 본문. 비교 연산을 수행해서 매개변수1이 매개변수2보다 작으면 -1, 같으면 0, 크면 1 반환

 

 

2)람다식 사용 x

Arrays.sort(nodes, new Comparator<Node>(){
    @Override
    public int compare(Node o1, Node o2){
        return Integer.compare(o1.cost, o2.cost);
    }
});

sort()의 매개변수

  1. 정렬할 배열 nodes
  2. Comparator 객체: 배열의 요소들을 비교하는 방법 정의. 익명 클래슷 ㅏ용

new Comparator<Node>(){...}: 익명 내부 클래스 정의. Comparator 인터페이스 구현 -> compare() 메서드 재정의

재정의된 메서드: Node 객체 두 개를 받아서 각 객체의 'cost'를 비교한 값 리턴

compare에서 리턴된 값에 따라 sort() 메서드가 배열 요소 정렬