해결된 질문
작성
·
139
0
Convertible converter = new KRWConverter(); // 다형성을 활용
convertUSD(converter, 1);
static void convertUSD(Convertible converter, int USD) {
converter.convert(USD); // KRWConverter.convert(USD)와 같음
추상메서드는 오버라이딩을 강제하기 때문에 위의 로직을 적용해서 강사님께서는 다음과 같이 인라인 함수를 converter에 대입할 수 있다고 하셨습니다.
convertUSD( public void convert(int USD) {
// 1달러 = 1400원
System.out.println(USD + " 달러 = " + (USD * 1400) + " 원");
}, 1);
그리고 람다식을 활용해서 다음과 같이 작성할 수 있구요.
convertUSD( (USD) -> System.out.println(USD + " 달러 = " + (USD * 1400) + " 원"), 2 );
이 람다식 변환과정에서 인터페이스 변수인 converter와 람다식의 로직이 동일하기 때문에 람다식을 아예 인터페이스 변수에 다음과 같이 넣을 수 있구요
Convertible convertible = (USD) -> System.out.println(USD + " 달러 = " + (USD * 1400) + " 원");
convertible.convert(2); // 2 달러 = 2800 원
여기서 궁금한 것이 있습니다. 추상메서드를 오버라이딩한 람다식을 인터페이스 변수에 넣는 것이 이전 시간에 배운 익명 클래스를 참조 객체에 넣는 것과 비슷하다고 느꼈는데요, 람다식이 익명 클래스로부터 발전되서 그런건가요?
제가 머리가 나빠서 그런건지 모르겠지만 함수형 인터페이스의 동작 원리를 이해하는데 시간이 많이 오래 걸렸습니다 ㅠㅠ
답변 2
0
안녕하세요?
복습 차원에서 개념 정의를 해 볼게요.
1. 함수형 인터페이스
자바에서 하나의 추상 메소드를 가진 인터페이스를 함수형 인터페이스라고 합니다. 함수형 인터페이스의 주 목적은 람다식이나 익명 클래스 등을 통해 인터페이스의 추상 메소드를 구현하기 위한 것입니다.
2. 익명 클래스
익명 클래스는 이름이 없는 클래스로 인터페이스를 구현하거나 상위 클래스를 확장하는데 사용됩니다. 익명 클래스를 이용하면 추상 메소드를 구현하여 객체를 생성하고 사용할 수 있지요.
3. 람다식
람다식(자바 8 이후~)은 간결하게 함수형 인터페이스의 추상 메소드를 구현할 수 있게 해줍니다. 람다식은 함수형 인터페이스를 구현하는 데 사용될 수 있으며 익명 클래스보다 코드를 더 간결하게 만들 수 있습니다.
정리하면, 람다식은 함수형 인터페이스를 보다 간결하게 구현하기 위한 목적으로 등장했습니다. 기존의 익명 클래스는 주로 인터페이스나 추상 클래스를 구현하는 데 사용되었는데, 클래스의 인스턴스를 생성하고 해당 클래스의 메소드를 구현하는 과정이 다소 번거로웠어요. 람다식을 이용함으로써 이러한 익명 클래스를 더 간소화하고 표현력을 향상시킬 수 있게 된 것이죠.
람다식을 이용하면 익명 클래스를 보다 간결하게 표현할 수 있는 대안이 됩니다. 서로 수행하는 기능이 비슷하기도 하구요. 하지만 그렇다고 해서 람다식과 익명 클래스가 동일한 것은 아닌 별개의 개념입니다. 이에 대해서는 보다 상세한 설명이 되어 있는 링크로 대신 답변을 드리겠습니다. 참고해보시면 좋겠습니다 😊
👉 https://blog.imqa.io/aos_lambda_basic/
또한 아래 링크의 글도 함께 읽어보시면 도움될 것 같아요!
👉 https://yozm.wishket.com/magazine/detail/2023/
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
Ambition님께서 함수형 인터페이스 및 람다식에 대해 이해하셨는지 확인하고자 하시네요. 질문 내용에 기반하여 적절한 답변을 찾고자 노력했습니다.
함수형 인터페이스는 Java 8부터 도입된 개념으로 인터페이스에 단 하나의 추상 메서드만을 가지고 있어야 하며, 이를 통해 람다 표현식을 사용할 수 있습니다. 람다 표현식은 익명 함수와 유사하며, 코드를 더 간결하게 만들어주는 데 도움을 줍니다.
Ambition님께서 언급하신 내용은 일반적인 클래스 인스턴스를 생성하여 메서드를 오버라이딩하는 방법 대신, 람다 표현식을 이용해 바로 함수형 인터페이스의 추상 메서드 구현체를 제공한 것입니다. 이는 익명 클래스를 사용하는 것과 비슷한 개념으로, 구현체를 제공하는 더 간단하고 간결한 방법입니다.
아래에 첨부된 일련의 답변 링크들 중 하나는 함수형 인터페이스를 사용하면 KRWConverter 클래스 필요성
이라는 주제로, 함수형 인터페이스와 람다식의 관계에 대해 설명하고 있습니다. 이 리소스는 Ambition님의 질문에 대한 좋은 참고 자료가 될 것입니다.
이 답변은 람다식을 사용하여 Convertible 인터페이스의 구현체를 만들었기 때문에 KRWConverter 클래스는 더 이상 필요하지 않다는 내용을 담고 있습니다. 코드 간소화와 가독성, 재사용성을 높일 수 있다는 점도 언급됩니다.
Ambition님의 이해를 돕기 위해, 질문자가 질문한 내용을 바탕으로 유사한 답변 링크를 찾았다는 점을 인지하시고, 추가적인 질문이 있으시다면 언제든지 질문해주세요. 저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
아하 그렇군요 람다식으로 Convertible의 익명 구현체를 만들었기 때문에 마치 구현체의 인스턴스를 생성해서 메서드를 호출하는 것처럼 동작할 수 있었던 거네요