[Java] 객체 지향 프로그래밍 vs 람다식
2022. 2. 23. 03:50ㆍBack-end/Java
객체 지향 프로그래밍과 람다식(함수형 프로그래밍)을 비교해보자.
문자열을 연결하는 예제로 두 가지 방식을 구현해 보면서 비교해보자
인터페이스 생성
public interface StringConcat {
public void myString(String str1, String str2);
}
인터페이스를 구현하는 클래스 생성
public class StringConcatImpl implements StringConcat {
@Override
public void myString(String str1, String str2) {
System.out.println(str1 + str2);
}
}
메인 클래스 생성
public class StringConcatTest {
public static void main(String[] args) {
StringConcatImpl concatImpl = new StringConcatImpl();
concatImpl.myString("몰입", "코딩");
}
}
// Run -> Console : 몰입코딩
여기까지 기존의 자바 객체 지향 프로그래밍이다
같은 예제를 람다식으로 구현해보면..
@FunctionalInterface
public interface StringConcat {
public void myString(String str1, String str2);
}
@FunctionalInterface 어노테이션을 붙여 함수형 인터페이스라 정의하고
객체 지향 방식과 다르게 구현 클래스는 생략..
public class StringConcatTest {
public static void main(String[] args) {
StringConcat concat = (s1, s2) -> System.out.println(s1 + s2);
concat.myString("몰입", "코딩");
}
}
바로 메인 클래스에서 값을 받고 기능까지 구현한다
이렇게 구현할 수 있는 이유는 내부적으로 익명 클래스가 만들어지기 때문이다
자바에서는 객체 없이 메서드가 호출될 수 없기 때문에 개발자가 하는 일이 생략되었을 뿐
람다식을 구현하면 익명 내부 클래스가 만들어져서 익명 객체가 생성된다
추가로 람다식은 함수를 변수처럼 사용한다
매개변수로 전달해서 사용하거나 메서드 반환(return)값으로 반환할 수 있다
@FunctionalInterface
public interface StringConcat {
public void showString(String str); // 함수형 인터페이스
}
StringConcat concat = s -> System.out.println(s); // 람다식을 변수에 대입
concat.showString("몰입코딩"); // 람다식을 담은 변수로 String 출력
// 매개변수로 전달하는 람다식
public static void paramString(StringConcat sc) {
sc.showString("몰입코딩");
}
// return 값으로 쓰이는 람다식
public static PrintString returnString() {
return s -> System.out.println(s + "코딩");
}
PrintString pString = returnString();
pString.showString("몰입");
반응형
'Back-end > Java' 카테고리의 다른 글
[Java] 스트림(Stream) - reduce() (0) | 2022.02.26 |
---|---|
[Java] 스트림(Stream) (0) | 2022.02.24 |
[Java] 함수형 인터페이스로 람다식 구현 (0) | 2022.02.22 |
[Java] 함수형 프로그래밍 - 람다식(Lambda expression) (1) | 2022.02.22 |
[Java] 내부 클래스란? (inner class) (0) | 2022.02.21 |