자바8 - 함수형 인터페이스와 람다 표현식에 대해서 간단하게

728x90

함수형 인터페이스는 추상메소드가 1개 일 경우를 함수형 인터페이스라고 합니다.

 

public interface Test {
	void go();
}

 

이렇게 Test라는 인터페이스에 추상메소드가 한개이니 이 인터페이스는 함수형 인터페이스 입니다.

 

public interface Test {
	void go();
    	void gogo();
}

 

그럼 이렇게 추상 메소드가 두개 일 경우는 함수형 인터페이스 일까요??? 

 

아닙니다.

 

추상메소드가 두개 이므로 이 인터페이스는 함수형 인터페이스가 아닙니다.

 

* 대신 추상 메소드 말고 static 메소드와 default 메소드가 있습니다. 다른 형태를 포함하지만 추상 메소드가 한개인 인터페이스는 함수형 인터페이스 입니다.

 

public interface Test {
	void go();
    	
        static void gogo(){
        
        }
        
        default void gogogo(){
        
        }
}

 

이 인터페이스는 다른 형태의 메소드를 여러개 가지고 있지만 추상 메소드는 한개라서 함수형 인터페이스 입니다.

 

@FunctionalInterface
public interface Test {
	void go();
    	
        static void gogo(){
        
        }
        
        default void gogogo(){
        
        }
}

- @FunctionalInterface 어노테이션을 명시해주면 함수형 인터페이스가 됩니다.

 

그럼 이 함수형 인터페이스의 사용방법을 알아 보겠습니다.

 

class Main{
	public static void main(String[] args){
    	Test test = new Test(){
            @Override
            public void go(){
          		System.out.println("출발!");  
            }
        };
    }
}

 

기본적으로 인터페이스를 new를 통해 가져오고 override를 통해 명시해줍니다.

 

상속받아오는 방법도 있겠네요.

 

근데 이렇게 추상메소드가 한개인 함수형 인터페이스를 함축한 방법으로 사용하는 방법이 있습니다.

 

그 방법이 바로 람다 표현식입니다.

 

class Main{
	public static void main(String[] args){
		Test test = () -> System.out.println("출발");
	}
}

이렇게 = 까지는 같습니다. new 타입 형식을 대신해서 () -> 형식을 사용합니다.

 

()에는 input 인자가 들어오게 됩니다. 

 

출력문이 하나일 경우에 사용하는 방법이고,

 

출력문이 두개 이상일 경우는 다음과 같이 사용 하면 됩니다.

 

class Main{
	public static void main(String[] args){
		Test test = () -> {
        		System.out.println("출발");
                	System.out.println("출발");
        	};
	}
}

 

이렇게 해준다고 함수가 실행되는 것은 아니기 때문에 함수를 실행까지 해줍니다.

 

class Main{
	public static void main(String[] args){
		Test test = () -> {
        		System.out.println("출발");
                	System.out.println("출발");
        	};
            test.go();
	}
}

//실행결과

출발

출발

 

간단하게 함수형 인터페이스와 람다식에 대해 알아보았습니다!

반응형