Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- JPQL
- 스프링
- kotlin
- java
- Greedy
- pointcut
- jpa
- spring
- 스프링 핵심 기능
- db
- Android
- SpringBoot
- 스프링 핵심 원리
- Spring Boot
- springdatajpa
- 그리디
- Servlet
- 백준
- Exception
- Thymeleaf
- AOP
- Proxy
- 인프런
- 알고리즘
- 김영한
- 자바
- QueryDSL
- JDBC
- http
- transaction
Archives
- Today
- Total
개발자되기 프로젝트
객체지향 프로그래밍 vs 람다식 구현 본문
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
'
'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