Anonymous Inner Class 와 Lambda
1. Anonymous Inner Class
-
익명 내부 클래스 란?
이름을 가지지 않는 클래스
-
익명 내부 클래스 구현 위치
- 메서드 내부에 구현
- 변수에 대입하여 직접 구현
-
익명 내부 클래스의 생성 방법
메서드를 호출할 때 생성되거나, 인터페이스 타입 변수에 대입할 때, new 키워드를 사용하여 생성
예시는 다음과 같다.
📃 Runnable이라는 Interface를 구현
#1
class Outer{
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("runnable");
}
};
}
public class anonymousInnerClass {
public static void main(String[] args) {
Outer outer = new Outer();
outer.runnable.run();
}
}
#2
class Outer{
public Runnable getRunnable(){
return new Runnable() {
@Override
public void run() {
System.out.println("runnable");
}
};
}
}
public class anonymousInnerClass {
public static void main(String[] args) {
Outer outer = new Outer();
Runnable runnable = outer.getRunnable();
runnable.run();
}
}
출력 결과 => 동일하게
runnable
2. Lambda
-
람다식이란?
함수형 프로그래밍 으로써
순수 함수를 구현하고 호출함으로써 외부(side effect)에 영향을 주지 않고 매개변수만을 사용하도록 만든 함수 -
함수형 프로그래밍(Functional Programming)?
자료 처리를 수학적 함수의 계산으로 취급하고, 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임
ex) Javascript
예시는 다음과 같다
📃 인터페이스 생성 후 메서드 한개 정의
@FunctionalInterface
public interface MyNumber {
int getMaxNumber(int num1, int num2);
}
public class MyNumberTest {
public static void main(String[] args) {
MyNumber maxNum = (x, y) -> (x >= y) ? x : y;
int max = maxNum.getMaxNumber(10,20);
System.out.println(max);
}
}
출력 결과 =>
20
- 왜 람다식을 사용할까?
- 사용하기 간단하다
- 안정적이고 확장성이 뛰어나다
- 병렬처리
3. 익명 내부 클래스 VS 람다식
📃 StringConcat이라는 인터페이스 생성
@FunctionalInterface
public interface StringConcat {
public void makeString(String s1, String s2);
}
📃 ++ 일반적인 객체지향 프로그래밍
StringConcat이라는 인터페이스를 상속받는 StringConcatImpl클래스
<public class StringConcatImpl implements StringConcat{
@Override
public void makeString(String s1, String s2) {
System.out.println(s1 + " " + s2);
}
}
public class StringConcatTest {
public static void main(String[] args) {
// 람다식(함수형 프로그래밍 방식) 이용
StringConcat concat = (s1, s2) -> System.out.println(s1 + " " + s2);
concat.makeString("hello", "java");
// 익명 내부 클래스 이용
StringConcat concat2 = new StringConcat() {
@Override
public void makeString(String s1, String s2) {
System.out.println(s1 + " " + s2);
}
};
concat2.makeString("hello", "java");
// 아래는 ++
// 객체지향 프로그래밍 방식
StringConcatImpl slImpl = new StringConcatImpl();
slImpl.makeString("hello", "java");
}
}
출력 결과 => 동일하게
hello java
!! 사실 람다식으로 메서드를 구현하고 호출하면 내부적으로 익명 클래스가 생성된다
그렇다면 무슨 차이일까?
📌람다식은 하나의 메서드로 생성해 포함하는 반면에
익명 내부 클래스는 새로운 클래스로 생성된다.
출처 :
인프런 -doit자바프로그래밍(내부클래스, 내부클래스-람다식)
Author And Source
이 문제에 관하여(Anonymous Inner Class 와 Lambda), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lejehwan/Anonymous-Inner-Class-와-Lambda저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)