Anonymous Inner Class 와 Lambda
1. Anonymous Inner Class
-
익명 내부 클래스 란?
이름을 가지지 않는 클래스
-
익명 내부 클래스 구현 위치
- 메서드 내부에 구현
- 변수에 대입하여 직접 구현
-
익명 내부 클래스의 생성 방법
메서드를 호출할 때 생성되거나, 인터페이스 타입 변수에 대입할 때, new 키워드를 사용하여 생성
예시는 다음과 같다.
📃 Runnable이라는 Interface를 구현
익명 내부 클래스 란?
이름을 가지지 않는 클래스
익명 내부 클래스 구현 위치
- 메서드 내부에 구현
- 변수에 대입하여 직접 구현
익명 내부 클래스의 생성 방법
메서드를 호출할 때 생성되거나, 인터페이스 타입 변수에 대입할 때, new 키워드를 사용하여 생성
#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
람다식이란?
함수형 프로그래밍 으로써
순수 함수를 구현하고 호출함으로써 외부(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.)