// 람다식은 익명 클래스가 생성 됨
StringConcat concat = (s, v)->System.out.println(s+","+v);
concat.makeString(s1, s2);
객체 지향 프로그래밍과 람다식 비교
- 문자열 두 개를 연결하여 출력하는 예제를 두 가지 방식으로 구현
인터페이스 선언
@FunctionalInterface
public interface StringConcat {
public void makeString(String s1, String s2);
}
객체지향 프로그램밍 구현
인터페이스를 구현한 클래스 만들기
public class StringConcatImpl implements StringConcat {
@Override
public void makeString(String s1, String s2) {
System.out.println(s1+","+s2);
}
}
클래스를 생성하고 메서드 호출 하기
public class StringConcatTest {
public static void main(String[] args) {
String s1 = "Hello";
String s2 = "World";
StringConcatImpl strImpl = new StringConcatImpl();
strImpl.makeString(s1, s2);
}
}
람다식으로 구현
// 람다식은 익명 클래스가 생성 됨
StringConcat concat = (s, v)->System.out.println(s+","+v);
concat.makeString(s1, s2);
익명 객체를 생성하는 람다식
- 자바에서 객체 없이 메서드가 호출 될 수 없음
- 람다식을 구현하면 익명 내부 클래스가 만들어지고, 이를 통한 익명 객체가 생성
StringConcat concat2 = new StringConcat() {
@Override
public void makeString(String s1, String s2) {
System.out.println(s1 + "...." +s2);
}
};
concat2.makeString(s1, s2);
- 익명 내부 클래스에서와 마찬가지로 람다식 내부에서도 외부에 있는 지역 변수의 값을 변경하면 오류가 발생함
'JAVA' 카테고리의 다른 글
| [JAVA] 함수형 인터페이스와 람다식 구현하여 사용하기 (0) | 2023.09.10 |
|---|---|
| [JAVA] 람다식 (1) | 2023.09.10 |
| [JAVA] 여러 내부 클래스의 정의와 유형 (1) | 2023.09.04 |
| [JAVA] 쌍(pair)으로 자료를 관리하는 Map 인터페이스를 구현한 클래스와 그 활용 (1) | 2023.09.01 |
| [JAVA] 중복되지 않게 자료를 관리하는 Set 인터페이스를 구현한 클래스와 그 활용 (0) | 2023.08.28 |