ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 람다 쉽게 설명
    IT/개발(자바, 서블릿, 스프링 등) 2025. 5. 5. 14:12

    인터페이스는 new 키워드로 인스턴스 생성을 할 수 없다.

    보통, 인터페이스를 구현한 클래스 객체를 만들고, 추상메서드를 구현한다.

    그리고 인터페이스를 구현한 클래스로 인스턴스를 생성한다.

     

    public interface 인터페이스 {
    	void 메서드();
    }
    
    public class 클래스 implementes 인터페이스 { // 인터페이스를 구현한 클래스를 만든다.
    	public void 메서드() {
    		System.out.println("test"); // 추상메서드를 구현한다.
    	}
    }
    
    public class 메인클래스 {
    	public static void main(String[] args) {
        	인터페이스 a1 = new 클래스(); //인터페이스를 구현한 클래스로 인스턴스를 생성
        }
    }

     

    혹은 인터페이스를 new 해서 추상메서드를 바로 구현하면, 익명 내부 클래스 정의와 생성을 동시에 할 수 있다.

    (하지만 알다시피 인터페이스 자체로는 객체를 만들수는 없다.

    위의 코드에서 new 인터페이스명() 은 그렇게 보일 뿐이지, 

    사실 자식 클래스를 생성해서 implements 하고 클래스 초기화 한 것과 다름이 없다.

    그냥 익명 내부 클래스를 작성함과 동시에 객체를 생성하도록하는 Java의 문법으로 보면 된다.)

     

    // 인터페이스를 new 해서 추상메서드를 바로 구현하면, 익명 내부 클래스 정의와 생성을 동시에 가능
    인터페이스 a2 = new 인터페이스() {
    	public void 메서드() { 
    		System.out.println("난 익명 내부 클래스!");
    	}
    };

     

    람다식을 쓰면? 클래스를 만들지 않고 인터페이스를 사용할 수 있다!

     

    람다식을 쓰려면, 아래 두가지 조건이 필요하다.

    1. 인터페이스로만 만들 수 있다.
    2. 하나의 추상 메소드만 선언되어 있는 인터페이스만 가능하다.

    //익명 내부 클래스를 람다식으로 바꾸는 과정
    인터페이스 a2 = new 인터페이스() { //자료형을 예측할 수 있기 때문에 new 인터페이스() 생략
    	public void 메서드() { //메서드가 하나이기 때문에 public void 메서드() {~} 생략
    		System.out.println("난 익명 내부 클래스!");
    	}
    };
    
    //람다식
    인터페이스 a3 = () -> {
    	System.out.println("난 람다식!");
    };

     

    위에서 설명한 내용대로 메서드를 호출하면 결과는 아래와 같다

    a1.메서드();	//출력: test
    a2.메서드();	//출력: 난 익명 내부 클래스!
    a3.메서드();	//출력: 난 람다식!

     

Designed by Tistory.