본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


Java(자바)

자바 함수형 프로그래밍 2

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2019. 4. 25.

 

 

람다식의 등장으로 자바에서도 편리하게, 보기쉽고 간결하게가 모티브가 되어 여러 기능들이 새롭게 계속 나오고 있다. 물론 함수형 프로그래밍 기법을 몰라도 코딩하는데 문제는 없지만.

저번에 사용한 기법은 인터페이스에 내장된 default 메소드를 통한 사용방법이었다면,

 

지금 소개할 내용은 Fuctnion이라는 인터페이스를 활용하는 방법이다.

기본적으로 람다를 알고 있어야 함수형 인터페이스르 이해 할 수 있다.

첫번째 함수 f는 String값을 받아 Integer형태를 리턴한다는 내용이다. 해당 함수를 구현하면 기본적으로 apply라는 메소드를 통해서 실행이 가능 하다.

함수에서는 반드시 리턴값이 존재하기 때문에 만약 void 형태를 구현한다면 Consumer를 활용하면된다.

public class Main {

	
	public static void main(String[] args) {

		Function<String, Integer> f = (s)-> {
            System.out.println(" - f function start - ");
            return Integer.parseInt(s)+3;
        };
		Function<Integer,String> b = (i) -> {
            System.out.println(" - b function start - ");
            return i+"";
		};
		System.out.println(f.apply("1234"));
		System.out.println(b.apply(1234));
		
		Function<String, String> c = f.andThen(b);
		Function<Integer, Integer> d = f.compose(b);

		System.out.println(c.apply("3"));
		System.out.println("---------------------");
		System.out.println(d.apply(3));
		
	}
}

첫번째 f를 실행하면 문자가 숫자로 잘 반환이 된다. 두번째 함수인 b를 실행하면 숫자가 문자로 잘 출력이 된다.

이다음부터가 함수형 인터페이스의 장점인데..

함수형 c를 실행하면 f함수 이후에 b를 자동으로 실행하라는 뜻이며,

함수형 d를 실행하면 b함수 이후에 f가 실행하라는 뜻이 된다.

즉, 사용자가 구현한 행위가 이어져서 연계가 되어 실행 할 수 있다는 뜻이다.

 

이와더불어..Supplier, Consumer, Predicate 등이 추가로 지원되는데 파라미터가 있거나 리턴타입이 있거나 정도의 차이로 기능은 앞서 소개한 Function과 비슷하다.

 

반응형
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글