본문 바로가기

자바

함수형 인터페이스

public interface MyInterface {

    void doIt();    // 추상메소드 하나만 존재해야 함수형 인터페이스로 인정!
                    // 아래 메소드와는 관계x

    static void printName() {
        System.out.println("devjones");
    }

    default void printAge() {
        System.out.println("11");
    }
}

 

@FunctionalInterface
public interface MyInterface {

    void doIt();
}

 

이걸 어떻게 쓰는지?

 

package main03;

public class Main {

	public static void main(String[] args) {
		
		// 익명 내부 클래스.
		MyInterface mi = new MyInterface() {
			
			@Override
			public void doIt() {
				System.out.println("hello");
			}
		};
	}
}

 

위 코드를 다음과 같은 람다표현식을 바꿀 수 있다.

 

package main03;

public class Main {

	public static void main(String[] args) {
		
		MyInterface mi = () -> System.out.println("hello");
	}
}

 

package main03;

public class Main {

	public static void main(String[] args) {
		
		MyInterface mi = new MyInterface() {
			
			@Override
			public void doIt() {
				System.out.println("hello");
				System.out.println("lambda");
			}
		};
	}
}

 

두줄 이상일경우 아래와 같이...

 

package main03;

public class Main {

	public static void main(String[] args) {
		
		MyInterface mi = () -> {
			System.out.println("hello");
			System.out.println("lambda");
		};
	}
}

코드가 훨씬 깔끔해진 것을 확인할 수 있다.

 

다음은 메소드 호출이다.

package main03;

public class Main {

	public static void main(String[] args) {
		
		MyInterface mi = () -> System.out.println("hello");
		
		// 실행
		mi.doIt();
	}
}

 

 

순수함수 (Pure Function)

* 사이드 이펙트가 없다. (함수 밖에 있는 값을 변경하지 않는다)

* 상태가 없다. (함수 밖에 있는 값을 사용하지 않는다)

 

package main03;

@FunctionalInterface
public interface MyInterface {

//	void doIt();
	int doIt(int number);
}
package main03;

public class Main {

	public static void main(String[] args) {
		
		MyInterface mi = (number) -> {
			return number + 10;
		}; 
		
		System.out.println(mi.doIt(3));
	}
}

 

아래는 함수형 인터페이스가 아니다.

package main03;

public class Main {
	
	
	public static void main(String[] args) {
		int baseNumber = 10;
		
		MyInterface mi = new MyInterface() {
			// int baseNumber = 10; 또는 여기
			@Override
			public int doIt(int number) {

				return number;
			}
		};
	}
}

 

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

람다  (0) 2021.04.05
자바에서 제공하는 함수형 인터페이스  (0) 2021.04.05
빅오 표기법  (0) 2021.04.03
[자바] 추상 클래스 예제  (0) 2021.02.11
Factory Method 패턴  (0) 2021.02.07