Java & Kotlin
[Java 기능] 객체지향 프로그래밍 vs 람다식
Sue
2022. 2. 14. 22:00
예제 코드
문자열 두개를 연결하여 출력하는 예제
StringConcat.java
package ch04;
public interface StringConcat { // 인터페이스
public void makeString(String s1, String s2);
}
StringConcatImple.java
package ch04;
public class StringConcatImple implements StringConcat { // 인터페이스 구현 클래스
@Override
public void makeString(String s1, String s2) {
System.out.println(s1 +',' + s2);
}
}
StringConcatTest.java
package ch04;
public class StringConcatTest {
public static void main(String[] args) {
String s1 = "Hello";
String s2 = "World";
StringConcatImple strConcat = new StringConcatImple(); // 클래스 객체 생성하여 메서드 사용
strConcat.makeString(s1, s2);
StringConcat strConcat2 = (st1, st2) -> System.out.println(s1 +',' + s2); // 람다식 사용
strConcat2.makeString(s1,s2);
}
수행 결과
Hello,World
Hello,World
익명 객체를 생성하는 람다식
- 자바에서는 객체 없이 메서드가 호출될 수 없음
- 람다식을 구현하면 내부적으로 익명 내부 클래스가 생성되고 이를 통해 익명 객체가 생성됨
- 람다식 내부에서 외부에 있는 지역변수의 값을 변경하면 오류 발생
StringConcat strConcat3 = new StringConcat() {
@Override
public void makeString(String s1, String s2) { // 익명 내부 클래스
System.out.println(s1 + "..." + s2);
}
};
strConcat3.makeString(s1,s2);
}
함수를 변수처럼 사용하는 람다식
- 인터페이스형 변수에 람다식 대입
interface PrintString {
void showString(String str);
}
PrintString lambdaStr = s->System.out.println(s); // 람다식을 변수에 대입
lambdaStr.showString("hello lambda");
- 매개변수로 전달하는 람다식
showMyString(lambdaStr);
public static void showMyString(PrintString p) {
p.showString("hello lambda");
}
- 반환값으로 쓰이는 람다식
public static PrintString returnString() {
return s->System.out.println(s + "World");
}
PrintString reStr = returnString();
reStr.showString("hello ");