[JAVA] Lambda 람다 1

펭귄안녕·2024년 10월 21일

JAVA

목록 보기
4/9
post-thumbnail

람다를 들어가기 전에

람다 (lambda)
자바스크립트 화살표 함수보다 조건이 많음
인터페이스 사용 문법을 엄청나게 축약한 것

이너(inner) 클래스 : 클래스 안에 선언된 클래스
클래스의 멤버(구성요소) : 멤버 변수(필드), 메서드, 생성자, 클래스

  1. 멤버 이너 클래스 : 멤버 변수의 선언 위치와 같은 위치에 만들어진 이너 클래스
  2. 로컬 이너 클래스 : 지역 변수의 선언 위치와 같은 위치에 만들어진 이너 클래스
  3. 익명 이너 클래스 (람다 출발 )

Outer

public class Outer {
    private int num;

    public Outer(){
        this.num=0;
    }

    // 멤버 이너 클래스
    class Board{
        public void printNum(){
            System.out.println("num="+num);
        }

    }

    // 메서드
    public void aaa(){
        int age=0; // 지역변수

        // 로컬 이너 클래스
        class Item{
            public void printAge(){
                System.out.println("age="+age);
            }

        }
    }

}

OuterTest

public class OuterTest {
    public static void main(String[] args) {
        // Outer 클래스에 대한 객체 생성
        Outer outer=new Outer();

        // Board 클래스의 객체 생성
        Outer.Board board = outer.new Board();

        // 요새 안씀 그냥 클래스안에 클래스가 있을 수 있다라는 거만 알아두기
    }

}

람다로 변환

Printable 인터페이스

람다 적용을 위해서는 인터페이스에 하나의 추상메서드만 존재해야 함
추상 메서드가 하나만 존재하는 인터페이스 : 함수형 인터페이스

public interface Printable {
    void print();

}

LocalOuter

public class LocalOuter {
public Printable getPrinter(){

Printable 인터페이스의 객체 생성

  • 인터페이스만으로는 객체 생성 불가
    -> 인터페이스를 구현한 클래스를 먼저 생성
    -> 해당 클래스에 대한 객체 생성

Printable 인터페이스를 구현한 클래스

로컬 이너 클래스

class MyPrinter implements Printable{
	public void print() {
	System.out.println("프린터 실행");
	}
}

로컬 이너 클래스 -> 익명 이너 클래스 변환

Printable p1= new Printable() {

public void print() {
	System.out.println(111);
	}
};

익명 -> 람다로의 변환

Printable p2=()->{
	System.out.println(111);
};
// 생성한 객체를 리턴
        return p1;
    }

}

0개의 댓글