[JAVA #29] 객체 지향 프로그래밍과 람다식 구현 방식의 비교

HJoo·2023년 1월 2일
0

TodayStudy

목록 보기
31/111
post-thumbnail

문자열 두 개를 연결하여 출력하는 예제

객체 지향 프로그래밍 방식

  1. 인터페이스 선언
@FunctionalInterface
public interface StringConcat {
    public void makeString(String s1, String s2);
}
  1. 인터페이스를 구현한 클래스 만들기
public class StringConcatImpl implements StringConcat{
    @Override
    public void makeString(String s1, String s2) {
        System.out.println(s1 + ", " + s2);
    }
}
  1. 클래스를 생성하고 메서드를 호출하기
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);
  • 람다식에서는 위 객체지향 프로그래밍 방식에서의 2번이 없다
    즉 인터페이스를 구현한 클래스 부분이 명시되지 않았다
    하지만 없는 것은 아니다

    람다식을 구현하면 익명 내부 클래스가 만들어지고 이를 통해 익명 객체가 생성된다

    StringConcat concat2 = new StringConcat(){
    //아예 생략되는 것이 아니라 내부에서 익명 클래스로 만들어 진다
        @Override
        public void makeString(String s1, String s2){
            System.out.println(s1 + ", " + s2);
        }
    };

함수를 변수처럼 사용하는 람다식

  • 인터페이스형 변수에 람다식 대입하기

    인터페이스

    interface PrintString{
    	void showString(String str);
    }

    람다식을 대입

    PrintString lambdaStr = s->System.out.println(s);  //람다식을 변수에 대입
    lambdaStr.showString("hello lambda_1");
  • 매개변수로 전달하는 람다식
    showMyString(lambdaStr); 
    public static void showMyString(PrintString p) {
    	p.showString("hello lambda_2");
    }
  • 반환 값으로 쓰이는 람다식
    public static PrintString returnString() {         //반환 값으로 사용
    		return s->System.out.println(s + "world");
    }
    PrintString reStr = returnString();  
    reStr.showString("hello ");
profile
안녕하세요. Chat JooPT입니다.

0개의 댓글