-
19. 자바 인터페이스 with code body스프링개발자/201 - 일반 2020. 10. 2. 04:41
자바8부터 인터페이스에도 코드를 쓸 수 있다.
default 혹은 static 메소드에 한해서.
인터페이스 변수(variable)를 갖는 것도 가능하다
1. 코드를 품은 인터페이스
public interface Objective { int offset = 2; // 변수도 선언 및 초기화 가능 default int solve(int a, int b) { return offset + a + b; // 코드를 품은 녀석 } int guess(int a, int b); // 원래 쓰는 방식 }
2. 인터페이스 구현체s
public class MulObjective implements Objective { @Override public int solve(int a, int b) { return offset + a * b; } @Override public int guess(int a, int b) { return 5; } }
public class Mul2Objective implements Objective{ /* solve 메소드가 없다. 인터페이스의 solve를 사용한다. */ @Override public int guess(int a, int b) { return a+b; } }
3. 테스트
@Test public void test1() { int a = 2; int b = 1; Objective objective = new Objective() { // interface instance @Override public int guess(int a, int b) { return 0; } }; // solve values from interface and mul2 are identical assertEquals(objective.solve(a, b), new Mul2Objective().solve(a, b)); }
@Test public void test2() { ArrayList<Objective> objectives = new ArrayList<>(); objectives.add(new Mul2Objective()); objectives.add(new MulObjective()); int a = 2; int b = 1; int actualSolvedSum = objectives.stream().mapToInt(o -> o.solve(a, b)).sum(); int expected_from_mul = 2 + a * b; int expected_from_mul2 = 2 + a + b; int expectedSolvedSum = expected_from_mul + expected_from_mul2; assertEquals(expectedSolvedSum, actualSolvedSum); }
'스프링개발자 > 201 - 일반' 카테고리의 다른 글
21. MongoDB를 꼭 써야해? (0) 2020.10.19 20. @Scheduled 어노테이션 (0) 2020.10.17 18. Git 브랜치 프로텍션(Branch Protection Rule) (0) 2020.09.07 17. 자바 스트림 (0) 2020.09.07 16. 도커(Docker)를 사용해보자 (0) 2020.08.03