시작하며
여러분 안녕하세요!
DreamHanks의 254cm입니다.
이번 시간에는 Lambda에 대해서 설명해보도록 하겠습니다.
Java의 전체 기사는 여기를 클릭해 주세요.
이전 기사는 [Java 개발] 제26회 Object 클래스에 대해서 배워 봤습니다.
Lambda이란?
람다(Lambda)는 Java8에서 도입된 기술로 메서드를 단순하게 표현하는 방식입니다.
람다로 만들어진 메서드는 인터페이스의 인수로서 전달할 수 있습니다.
인터페이스는 건네받은 람다메소드를 추상메소드의 실장으로 사용합니다.
〇람다의 특징
람다를 이용하면 인터페이스의 실장 클래스를 만들지 않아도 추상 메서드를 자유롭게 실장할 수 있습니다.
즉, 프로그램 작성 시의 수고를 덜 수 있습니다.
그리고 람다는 기존 메서드보다 작성 방법이 매우 간단합니다.
람다의 장점과 단점
〇람다의 장점
- 인터페이스의 실장 클래스를 작성하지 않아도 됩니다.
→프로그램 작성에 필요한 번거로움을 없앨 수 있습니다.
2.코드의 작성이 단순한 것으로 가독성이 높습니다.
〇람다의 단점
1.재사용이 불가능합니다.
2.재기 사용에는 부적합합니다.
3.너무 많이 쓰면 오히려 가독성이 줄어듭니다.
람다 쓰는 법
1 |
(인수) -> {처리} |
람다도 일종의 메서드이기 때문에 인수를 쓰든 생략하든 상관없습니다.
그리고 수행하는 처리가 한 줄일 경우 괄호 {}를 생략할 수 있습니다.
처리가 하나의 return으로 구성되어 있는 경우에는 괄호를 생략할 수 없습니다.
람다의 사용 샘플
샘플 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
public class InterfaceSample { public static void main(String[] args) { MethodSample sam1 = new MethodSampleImpl1(); MethodSample sam2 = new MethodSampleImpl2(); System.out.println(sam1.operate(3, 4)); System.out.println(sam2.operate(3, 4)); } } interface MethodSample { public int operate(int x, int y); } class MethodSampleImpl1 implements MethodSample { @Override public int operate(int x, int y) { return x+y; } } class MethodSampleImpl2 implements MethodSample { @Override public int operate(int x, int y) { return x*y; } } |
람다를 사용하지 않고 인터페이스의 추상 메서드를 구현하면
일일이 구현 클래스를 작성해야 합니다.
샘플 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public class LambdaSample { public static void main(String[] args) { LambdaInterface lambdaInterface1 = (x,y) -> { System.out.println("x*y"); return x+y; }; LambdaInterface lambdaInterface2 = (x,y) -> { System.out.println("x*y"); return x*y; }; System.out.println(lambdaInterface1.operate(3, 4)); System.out.println(lambdaInterface2.operate(3, 4)); } } @FunctionalInterface interface LambdaInterface { public int operate(int x, int y); } |
위의 샘플과 같이 람다를 이용하면 샘플 1 보다 가독성이 높은 소스코드를 생성할 수 있습니다.
람다를 사용하기 위해서는 인터페이스를 함수형 인터페이스로 만들어야 합니다.
함수형 인터페이스는 “@FunctionalInterface” 어노테이션이 부여되어 있는 인터페이스이며,
추상메서드를 하나만 선언할 수 있는 인터페이스입니다.
샘플1과 같이 하나의 파일 안에 인터페이스와 구현 클래스를 작성한 경우에는
구현 클래스의 처리와 작성 의도를 퍼트 보고 파악할 수 있지만,
평상시에 인터페이스와 구현 클래스는 각 java 파일에 작성되기 때문에
처리와 작성 의도를 파악하기 어렵습니다.
그러나, 람다를 사용하는 경우에는 실장 클래스가 필요 없고,
추상메서드의 구현이 인터페이스가 사용되는 곳으로 이루어지므로 가독성이 높습니다.
자바는 java.util.function 패키지를 통해 여러 상황에서 사용할 수 있는 함수형 인터페이스를
이미 정의하고 제공하고 있습니다.
끝으로
이번 기사는 이상입니다.
다음 번에는 Stream API를 배워보겠습니다.
방문해 주셔서 감사합니다.
コメント