내일배움캠프 18일차 TIL - 람다(메서드 참조, 생성자 참조)

2024. 5. 10. 17:32·⛺스파르타코딩클럽

240510

# 오늘 꼭 기억 해야 할 것!

오늘의 학습 

    ●  1. 람다 표현식 - 복습

    ●  2. 함수형 인터페이스 - 복습

    ●  3. 메서드 참조 / 생성자의 메서드 참조

 

람다 표현식의 메서드 참조 및 생성자의 메서드 참조

1. 기본적인 람다 구조( 함수형 인터페이스 )

2. 람다 메서드 참조

3. 생성자의 메서드 참조

 

1. 기본적인 함수형 인터페이스를 구현한 람다 표현식 구조

// Function => 함수형 인터페이스의 구조 
@FunctionalInterface
public interface Function<T, R> {
    R apply(T t);
    // 반환 타입 R , 넣을 값의 타입 T
}

// < 넣을값 , 반환타입 >
// 람다식을 이용해 인터페이스 구현 = 문자열 => Integer(정수형 변환)
public static void main(String[] args) {
	Function<String, Integer> function = (a) -> Integer.parseInt(a);
	int result = function.apply("12"); // Integer타입으로 변환(정수) int의 래퍼클래스
	System.out.println(result) // 결과값 : 정수형 12
}

// 원래는 이런식으로 인터페이스를 implements를 통하여 구현을 해야 했었다.
class FunctionImpl implements Function<String, Integer> {
    @Override
    public Integer apply(String s) {
        int result = Integer.parseInt(s);
        return result;
    }
}

 

위의 코드 예제를 보면 Function이라는 자바에서 기본적으로 만들어 둔 인터페이스가 존재한다. 이 인터페이스는 함수형 인터페이스로 람다식으로 구현할 수 있다.

원래는 인터페이스를 구현하려면 Implements를 통하여 클래스에 인터페이스를 구현해 추상메서드를 전부 오버라이딩을

했어야 했지만 람다식을 이용하여 클래스 내부에서 손 쉽게 인터페이스를 구현하여 기능을 사용 할 수 있게 되었다.

 

 

2. 람다 메서드 참조

람다 메서드 참조 방식은 자바에서 제공하는 람다 표현식 중 하나이다.

@FunctionalInterface
public interface Function<T, R> {
    R apply(T t);
}
// 변경 전 람다식
public static void main(String[] args) {
	Function<String, Integer> function = (a) -> Integer.parseInt(a); // 변경점
	int result = function.apply("12");
	System.out.println(result);
}
// 변경 후 람다식
public static void main(String[] args) {
	Function<String, Integer> function = Integer::parseInt; // 변경점
	int result = function.apply("12");
	System.out.println(result);
}

변경 전 람다식을 보면 static메서드인 parseInt() 메서드를 호출하는 것을 볼 수 있다.

변경 후 람다식을 보면 Integer클래스 타입을 :: ( 호출 해주는 역할 )을 통해 해당 타입의 메서드를 호출해 줄 수 있다.

람다식을 이용해서 줄인 코드에서 또 한번 람다식에서는 줄여주는 표현식을 제공해준다.

하지만 이렇게 너무 추상화를 시켜서 표현식을 이용하게 된다면 오히려 가독성이 떨어지는 경우가 생기므로

상황에 따라서 적절하게 사용 할 필요가 있다.

 

2. 람다 생성자의 메서드 참조

람다에는 생성자의 메서드를 참조하는 표현식이 존재한다.

// Function => 함수형 인터페이스의 구조 
@FunctionalInterface
public interface Function<T, R> {
    R apply(T t);
}

// < 넣을값 , 반환타입 >
// 람다식을 이용해 인터페이스 구현 = 문자열 => Integer(정수형 변환)
public static void main(String[] args) {
	Function<String, Integer> function = (a) -> Integer.parseInt(a);
	int result = function.apply("12"); // Integer타입으로 변환(정수) int의 래퍼클래스
	System.out.println(result) // 결과값 : 정수형 12
}

 

 

# 오늘의 회고

오늘은 람다와 스트림 함수형 인터페이스와 익명 클래스를 공부하였다.

람다에서 막히는 부분이 많았지만 그래도 어느정도 이해를 하게 되었다.

'⛺스파르타코딩클럽' 카테고리의 다른 글

내일배움캠프 20일차 TIL - Spring(API)  (0) 2024.05.13
내일배움캠프 19일차 TIL - Iterator  (0) 2024.05.12
내일배움캠프 17일차 TIL - 함수형 인터페이스, 익명 클래스  (0) 2024.05.09
내일배움캠프 16일차 TIL - 개인 공부  (2) 2024.05.07
내일배움캠프 15일차 TIL - 과제 피드백(Calculator)  (1) 2024.05.03
'⛺스파르타코딩클럽' 카테고리의 다른 글
  • 내일배움캠프 20일차 TIL - Spring(API)
  • 내일배움캠프 19일차 TIL - Iterator
  • 내일배움캠프 17일차 TIL - 함수형 인터페이스, 익명 클래스
  • 내일배움캠프 16일차 TIL - 개인 공부
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • 전체
    오늘
    어제
    • 전체보기 (143) N
      • 🎓방송통신대학교 (25) N
        • 🖥️컴퓨터과학과 (1)
        • 🌍유비쿼터스 컴퓨팅 (10) N
        • ⚙️컴퓨터의 이해 (11)
        • 🏛️세계의정치와경제 (3)
      • 📚Computer Science (0)
      • 🛠️Backend (2)
      • ☕Java (13) N
        • 📝Java Programming (12) N
        • 🧩Java Design Pattern (1)
      • 🌳Spring (9)
        • 🌱Spring Framework (6)
        • 🌱Spring Security (1)
      • ⚡Python (13)
      • 🛢️Database (0)
      • 🌿GitHub (1)
      • 🌐 Network (7)
        • 📜HTTP (7)
      • 🚀DevOps (1)
      • Algorithm Problem Solving (2)
      • Data Structure (1)
      • JavaScript (1)
      • ⛺스파르타코딩클럽 (65)
      • 잡담 (1)
      • 정리가 필요한 글 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    방송대
    스프링
    컴퓨터의 이해
    클래스
    파이썬
    방통대
    Java
    Python
    유비쿼터스
    자바
    유비쿼터스 컴퓨팅개론
    Spring Framework
    세계화
    컴파일러
    함수
    다형성
    방송통신대학교
    유비쿼터스 컴퓨팅
    spring
    클라우드
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
junbin2
내일배움캠프 18일차 TIL - 람다(메서드 참조, 생성자 참조)
상단으로

티스토리툴바