Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

객체지향 프로그래밍 vs 람다식 구현 본문

Java/다양한 기능

객체지향 프로그래밍 vs 람다식 구현

Seung__ 2021. 10. 27. 23:45

1. 객체 지향 프로그래밍과 람다식 비교


  • 문자열 두 개를 연결하여 출력하는 예제를 두 가지 방식으로!
  • 인터페이스 선언
@FunctionalInterface
public interface StringConcat {

    public void makeString(String s1, String s2);
}
  • 객체지향 방식은 interface를 구현하는 class를 생성해서 기능을 사용해야 함.
public class StringConcatImpl implements StringConcat{

    @Override
    public void makeString(String s1, String s2) {

        System.out.println(s1+", "+s2);
    }
}
  • 반면 람다식은 위의 객체지향 방식처럼 인터페이스를 구현하는 클래스를 생성하지 않고 바로 구현함.
class StringConcatImplTest {

    public static void main(String[] args) {
        String s1 = "hi";
        String s2 = "bye";

        System.out.println("객체지향");
        StringConcatImpl strImpl = new StringConcatImpl();
        strImpl.makeString(s1, s2);

        System.out.println("람다식");
        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) {
                
            }
        }
  • 익명 내부 클래스와 마찬가지로 람다식 내부에 외부의 지역변수 값을 사용하면 오류

 

 

 

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


  • 인터페이스
@FunctionalInterface
public interface PrintString {

    void showString(String str);
}
  • 인터페이스형 변수에 람다식 대입
PrintString lambdaStr = s -> System.out.println(s);
lambdaStr.showString("hello lambda_1");
  • 매개변수로 전달하는 람다식
    • 람다식을 매개변수로 전달해서 메서드 에서 람다식 사용함.
    • p.showString() 은 lambdaStr.showString()과 동일
showMyString(lambdaStr);

public static void showMyString(PringString p){
	p.showString("hello lambda_2");
 }​
  • 람다식을 반환 값으로 쓰기
    • 메서드의 return값으로 람다식을 return
    • reStr에 메서드를 넣어주면, reStr에 람다식 들어감.
public static PrintString returnString(){
	return  s-> System.out.println(s + "world");
}

PrintString reStr = returnString();
reStr.showString("hello");

 

 

4. GitHub : 211027 OOP & Lambda


 

GitHub - bsh6463/various_functions

Contribute to bsh6463/various_functions development by creating an account on GitHub.

github.com

'

'Java > 다양한 기능' 카테고리의 다른 글

Stream활용 예시  (0) 2021.10.29
reduce()  (0) 2021.10.28
Stream  (0) 2021.10.27
함수형 인터페이스, 람다식 구현 및 사용  (0) 2021.10.27
람다식  (0) 2021.10.27
Comments