[SEB BE] Section 1. 람다(Lambda)

박두팔이·2023년 1월 6일
0

자바

목록 보기
17/26

학습 목표

  1. 람다식이란? 람다식은 어떻게 사용할 수 있는가?
  2. 함수형 인터페이스를 통해 람다를 다루는 방법을 이해하고 설명할 수 있다.
  3. 람다식을 메서드 참조 방식으로 변환할 수 있다.

익명객체

람다식을 이해하기 전에 익명객체에 대해 먼저 살펴보자.

💡 익명 객체 : 이름이 없는 일회용 객체

⭐️ 익명 자식 객체

  • 👉🏻 부모클래스를 상속 받아 생성한다.
  • 👉🏻 부모 타입의 참조변수에 자식객체를 할당할 수 있다.
  • 👉🏻 익명 자식객체를 만들 때, 자식 객체의 중괄호{ } 블록 내에는 상위 클래스의 메서드를 재정의(메서드 오버라이딩)하는 코드가 작성된다.
// 기존 객체생성 방식
부모타입_참조변수 XXX = new XXX();
// 익명 자식객체 생성방식
부모타입_참조변수 XXX = new XXX() {
	상위클래스 메서드 오버라이딩
    @Override
}

아래의 예는 상위클래스인 Person타입의 익명자식객체(클래스)를 만드는 예제이다.

Person클래스에는 4개의 메서드가 있다.

class Person { // Person 상위 클래스생성

    public void wake() { // 메서드01
        System.out.println("기상!");
    }

    public void eat() { // 메서드02
        System.out.println("냠냠냠");
    }

    public void sleep() { // 메서드03
        System.out.println("쿨쿨쿨...zzZ");
    }

    public void live() { // 메서드04
        wake();
        eat();
        sleep();
    }
}

public class Main { // Main 클래스
    public static void main(String[] args) {
    
    💡 익명자식객체 생성하기
     Person 영희 = new Person() { // 중괄호 열어주기
     	👉🏻 상위타입의 참조변수(Person)에 '영희'자식객체 할당할 수 있음
     	👉🏻 클래스이름은 없지만 그 주소값이 저장된 '영희'참조변수는 있음
			
            💡 익명 자식객체에 추가된 work() 메서드
            private void work() {
                System.out.println("근무 시작!");
                System.out.println("퇴근!");
            }
            
            💡 상위 클래스(Person)의 live()메서드를 오버라이딩하는 코드작성
            @Override
            public void live() {
                super.wake(); 
                super.eat(); 
                super.sleep();
                work(); // 오버라이딩 시 work()메서드 추가
            }
        };

⭐️ 익명 구현 객체

  • 👉🏻 인터페이스를 구현해서 생성
  • 👉🏻 인터페이스 타입의 참조변수에 할당할 수 있다.
  • 👉🏻 익명 구현 객체를 만들 때,
    구현 객체의 중괄호{ } 블록 내에는 인터페이스의 추상 메서드를 구현하는 코드가 작성된다.
interface Workable { // 인터페이스 생성
    void work(); // 반환타입이 없는 추상메서드 선언
}

public class Main { // 메인클래스 
    public static void main(String[] args) {
    
    	💡 Workable인터페이스 참조변수타입에 '철수' 익명 구현 객체 생성
  		Workable 철수 = new Workable() { //;대신 중괄호로 열어줌
        
        	  💡 '철수'익명구현객체 workOverTime()메서드 생성
              private void workOverTime() {
                  System.out.println("야근 중...ㅠㅠ");
              }

			  💡 인터페이스 Workable 오버라이딩
              @Override
              public void work() { 
                  System.out.println("수업 중...");
                  workOverTime(); //추가
              }
          };

람다식의 기본 문법

  • 람다식이란? 메서드 식을 간단하게 표현한 자바 문법이다.
  • 람다식은 반환타입과 메서드 이름을 생략할 수 있다.
  • 메서드 이름이 없기 때문에 익명함수라고 불린다.

아래의 코드는 일반적인 sum메서드이다.

int sum(int num1, int num2) {
	return num1 + num2;
}

💡 sum메서드를 람다식으로 바꿔보자!

(int num1, int num2) -> num1 + num2 
  • 메서드바디가 한줄로 끝난다면 { }, return문, (;)을 생략한다.
  • 실행문이 두줄이면 { } 중괄호 필요

함수형 인터페이스인 경우 아래와 같이 매개변수타입도 생략이 가능하다.

(num1, num2) -> num1 + num2 

함수형 인터페이스에 대해서는 따로 설명하겠다.

profile
기억을 위한 기록 :>

0개의 댓글