1
2
3
4
5
|
@FunctionalInterface
public interface StringConcat {
public void makeString(String s1, String s2);
}
|
cs |
문자를 연결하는 인터페이스 생성.
1
2
3
4
5
6
7
8
9
|
public class StringConcatImpl implements StringConcat{
@Override
public void makeString(String s1, String s2) {
System.out.println(s1+","+s2);
}
}
|
cs |
인터페이스를 구현한 클래스 생성.
여기까지 기존의 객체지향 프로그래밍 방식이다.
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
32
33
34
35
36
37
|
public class StringConcatTest {
public static void main(String args[]) {
String s1 = "Hello";
String s2 = "World";
// 1. 기존 클래스 사용 구현.
// 인터페이스를 구현한 클래스 생성.
// 구현한 클래스명으로 함수 실행.
StringConcatImpl strImpl = new StringConcatImpl();
strImpl.makeString("Hello", "world");
// 2. 람다식 사용하여 구현.
// 람다식을 사용.
// 클래스 만드는 StringConcatImpl 부분이 생략됨.
// 내부적으로 익명클래스가 생성.
// 2.1 함수가 변수처럼 사용됨.
// 2.2 매개변수로 전달이 됨
// 2.3 반환값으로도 사용이 됨
StringConcat concat = (s,v)->System.out.println(s+","+v);
concat.makeString(s1, s2);
// 3. 익명 내부 클래스로 구현.
// 익명 내부 클래스
// (s,v)->System.out.println(s+","+v);
StringConcat concat2 = new StringConcat() {
@Override
public void makeString(String s1, String s2) {
System.out.println(s1+":"+s2);
}
};
concat2.makeString(s1, s2);
}
}
|
cs |
기존의 클래스를 사용하여 인터페이스 메소드를 구현하여 호출하여 사용하는 반면,
람다식의 경우 implements를 하지않고 클래스 변수을 사용하여 메소드를 사용한다.
실제로 implements를 하지않고 바로 사용할수 있는 것이 아니라 람다식부분은
익명 내부클래스로 구현된걸 간략하게 보여주고 있는 것이다.
'OOP > Java' 카테고리의 다른 글
사용자 정의 예외 클래스 (0) | 2022.05.18 |
---|---|
예외처리 (Exception)는 왜 하는가? (0) | 2022.05.11 |
연산 수행에 대한 구현 reduce() 연산 (0) | 2022.05.10 |
스트림(Stream) (0) | 2022.05.09 |
람다식(Lamda expression) (0) | 2022.05.02 |