웹 개발 메모장
[자바] 매개 변수에 함수를 넣어봅시다. 본문
c.calculation((a, b)->a+b, 4, 2)
자바8 부터 메소드의 파라미터로 함수를 넘길 수 있습니다.
사칙연산 기능을 구현을 해보면서 알아볼까요?
아래와 같은 사칙연산 메소드를 가지는 Calc 클래스가 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class Calc{ public int add(int a, int b) { return a+b; } public int substract(int a, int b) { return a-b; } public int multiple(int a, int b) { return a*b; } public int division(int a, int b) { return a/b; } } | cs |
이런식으로 객체 생성 및 메소드 호출을 통해 사용하면 되겠죠?
1 2 3 4 5 6 | Calc c = new Calc(); c.add(1, 1); c.substract(1, 1); c.multiple(1, 2); c.division(4, 2); | cs |
Calc 클래스를 좀더 객체지향적인 형태로 구현을 해봅시다.
Calc 인터페이스를 만들고
1 2 3 | interface Calc { public int calculation(int a, int b); } | cs |
CalcService 클래스가 사용하는 형태로 하겠습니다.
이렇게 되면 객체를 파라미터로 받아 사용하는 형태인데요.
1 2 3 4 5 | class CalcService{ public int calculation(Calc c, int a, int b) { return c.calculation(a, b); } } | cs |
Calc 인터페이스를 implements하고 사칙연산의 기능을 구현하는 클래스들을 만들고
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | class Add implements Calc{ @Override public int calculation(int a, int b) { return a+b; } } class Substract implements Calc{ @Override public int calculation(int a, int b) { return a-b; } } class Multiple implements Calc{ @Override public int calculation(int a, int b) { return a*b; } } class Division implements Calc{ @Override public int calculation(int a, int b) { return a/b; } } | cs |
이와같이 사용하면 되겠습니다~
1 2 3 4 5 6 | CalcService c = new CalcService(); c.calculation(new Add(), 1, 1); c.calculation(new Substract(), 1, 1); c.calculation(new Multiple(), 1, 2); c.calculation(new Division(), 4, 1); | cs |
간단한 기능이라 배보다 배꼽이 더 커보이는데요 자바8부터 파라미터로 함수를 넣어줄 수가 있기 때문에
위와 같이 Calc 인터페이스를 상속받는 클래스의 객체를 생성해서 파라미터로 넘기지 말고
바로 함수를 인자로 넣어봅시다.
이번엔 인터페이스와 서비스 클래스 두 개만 있으면 충분합니다.
인터페이스를 Functional 인터페이스로 사용할 것인데 그러려면 인터페이스는 한 개의 추상메소드만 포함해야 합니다.
1 2 3 4 5 6 7 8 9 | interface Calc { public int calculation(int a, int b); } class CalcService { public int calculation(Calc c, int a, int b) { return c.calculation(a, b); } } | cs |
아래와 같이 익명 함수를 넣어서 사용하는 예제였습니다~
1 2 3 4 5 6 | CalcService c = new CalcService(); c.calculation((a, b)->a+b, 1, 1); c.calculation((a, b)->a-b, 1, 1); c.calculation((a, b)->a*b, 2, 2); c.calculation((a, b)->a/b, 4, 2); | cs |
'옛날.. > 자바' 카테고리의 다른 글
[자바] Integer Object는 Object인데 왜 == 연산 결과가 가끔 true 일까 (0) | 2019.01.25 |
---|---|
[자바] Lazy Evaluation 이란? (6) | 2019.01.25 |
[자바] HashMap 기초 개념 (0) | 2018.08.13 |
[자바] 자바8 맛보기 (0) | 2018.07.19 |
[자바] 인터페이스에도 메소드 정의가 가능하다 (2) | 2018.07.10 |
Comments