[Java] 객체 지향 프로그래밍 vs 람다식

2022. 2. 23. 03:50Back-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("몰입");
반응형