익명클래스와 람다식

hoon·2025년 1월 16일

JAVA

목록 보기
10/21

1. 익명 클래스 (Anonymous Class)

1) 익명 클래스란?

  • 클래스 이름 없이 선언과 동시에 객체를 생성하여 사용하는 클래스.
  • 인터페이스추상 클래스를 즉석에서 구현하거나, 기존 클래스를 확장할 때 사용.
  • Java 8 이전에는 익명 클래스를 주로 사용했으나, 이후 람다식으로 대체되는 경우가 많음.

2) 익명 클래스 특징

  • 인터페이스추상 클래스를 구현할 때 주로 사용.
  • 선언과 동시에 객체를 생성하므로 간결하지만, 가독성이 떨어질 수 있음.
  • 객체 이름이 없으므로 재사용 불가.

3) 익명 클래스 예제

interface Inter {
    void display();
}

abstract class AbstractClass {
    abstract void abstractMethod();
}

public class AnonymousClassExample {
    public static void main(String[] args) {
        // 인터페이스를 구현한 익명 클래스
        Inter inter = new Inter() {
            @Override
            public void display() {
                System.out.println("익명 클래스: 인터페이스 구현");
            }
        };
        inter.display();

        // 추상 클래스를 구현한 익명 클래스
        AbstractClass abstractObj = new AbstractClass() {
            @Override
            void abstractMethod() {
                System.out.println("익명 클래스: 추상 클래스 구현");
            }
        };
        abstractObj.abstractMethod();
    }
}

2. 람다식 (Lambda Expression)

1) 람다식이란?

  • 함수형 프로그래밍을 지원하기 위해 도입된 문법(Java 8 이상).
  • 익명 클래스를 간결하게 표현하는 방식으로, 함수형 인터페이스에서만 사용 가능.

2) 함수형 인터페이스

  • 추상 메서드가 단 하나만 존재하는 인터페이스.
  • @FunctionalInterface 어노테이션을 사용하여 명시적으로 지정 가능.

3) 람다식 기본 문법

(parameters) -> { body }
  • 파라미터: 메서드의 매개변수.
  • 화살표 연산자 (>): 파라미터와 메서드 본문을 구분.
  • 본문: 실행할 코드 블록.

4) 람다식 예제

@FunctionalInterface
interface Inter {
    void display();
}

public class LambdaExample {
    public static void main(String[] args) {
        // 람다식을 이용한 인터페이스 구현
        Inter inter = () -> System.out.println("람다식: 인터페이스 구현");
        inter.display();
    }
}

3. 익명 클래스 vs 람다식

구분익명 클래스람다식
문법복잡함간결함
사용 가능 대상모든 클래스 및 인터페이스함수형 인터페이스
가독성코드가 길어져 가독성이 낮음코드가 간결해 가독성이 높음
추상 메서드 수제한 없음추상 메서드가 1개인 함수형 인터페이스만 사용 가능
재사용성클래스 재사용 가능람다식은 재사용 불가

4. 익명 클래스와 람다식 활용 예제

@FunctionalInterface
interface Calculator {
    int operate(int a, int b);
}

public class AnonymousAndLambdaExample {
    public static void main(String[] args) {
        // 익명 클래스
        Calculator addition1 = new Calculator() {
            @Override
            public int operate(int a, int b) {
                return a + b;
            }
        };
        System.out.println("익명 클래스: 5 + 3 = " + addition1.operate(5, 3));

        // 람다식
        Calculator addition2 = (a, b) -> a + b;
        System.out.println("람다식: 5 + 3 = " + addition2.operate(5, 3));
    }
}

5. 익명 클래스와 람다식의 장단점

익명 클래스의 장점

  • 모든 클래스와 인터페이스에 적용 가능.
  • 하나의 객체를 빠르게 생성 가능.

익명 클래스의 단점

  • 코드가 길어지고 가독성이 떨어짐.
  • 동일 기능을 여러 번 구현해야 할 때 비효율적.

람다식의 장점

  • 코드가 간결하고 가독성이 높음.
  • 함수형 인터페이스를 간편하게 구현 가능.

람다식의 단점

  • 함수형 인터페이스에만 적용 가능.
  • 복잡한 로직을 구현할 때 코드가 읽기 어려울 수 있음.

6. 정리

익명 클래스

  • 클래스 이름 없이 선언과 동시에 객체를 생성하여 인터페이스나 추상 클래스를 구현할 때 사용.

람다식

  • 익명 클래스보다 간결한 방식으로 함수형 인터페이스를 구현할 때 사용.

0개의 댓글