자바/자바 입문 공부일지

자바 기초 공부 일지 46. 람다lambda

Tomitom 2022. 11. 3. 16:56
반응형

 

 

람다에 대한 이해를 위해 기본형과 익명 클래스 사용과 람다의 사용을 작성해볼게요. 

 

 

기본 클래스 익명 클래스 람다
interface Printable {
   void print(String s);
}


class Printer implements Printable {
   public void print(String s) {
      System.out.println(s);
   }
}
class Lambda1 {
   public static void main(String[] args) {
      Printable prn = new Printer();
      prn.print("What is Lambda?");
   }
}
interface Printable {
   void print(String s);
}


class Lambda2 {
   public static void main(String[] args) {
      Printable prn = new Printer() {
         public void print(String s) {
            System.out.println(s);
         }
      };
      prn.print("What is Lambda?");
   }
}



interface Printable { // 추상 메소드가 하나인 인터페이스
   void print(String s);
}


class Lambda3 {
   public static void main(String[] args) {
      Printable prn = (s) -> { System.out.println(s); };
      prn.print("What is Lambda?");
   }
}



 

람다의 기본형은 다음과 같습니다. 

 

(매개변수) -> { 구현할 기능을 작성(로컬, 지역) } 

 

람다를 사용하는 주된 목적은 인터페이스에 정의된 단 하나의 추상 메소드가 있을 때 

그것을 최대한 간결하게 정의하기 위함입니다.

 

위 예제를 보았을 때 매개변수 s는 프린트의 매개변수를 뜻하며, 

-> { } 괄호 속은 매개변수를 통해 구현할 기능을 말합니다. 

 

interface Printable {

   void print(String s);

}

 

인터페이스 추상 클래스가 있는 상태에서 그 안의 메소드가 하나밖에 없을 때 

인터페이스는 사용하기 위해서는 반드시 초기화를 해야하기 때문에 

 

컴파일러가 자동적으로 인터페이스 클래스를 보고 new 가 올 것이고, 메소드를 정의하여 인스턴스 생성할 것이라는 것을 인지하여 매개변수와 기능만을 입력할 수 있도록 하는 것이에요. 

 

s라는 매개변수가 문자열이라는 것을 인터페이스에 명시가 되기 때문에 중복하여 표기하지 않아도 됩니다. 

 

 

 

 

람다는 다른 메소드 안에 매개변수로 참조가 됩니다. 

 

Printable prn = (s) -> { System.out.println(s); };

메소드를 오버라이딩한 프린터블의 인스턴스 객체가 되기 때문에 람다식은 인자로 전달이 가능합니다.

 

method((s) -> System.out.println(s));     //    void method(Printable prn) {...}

함수에 함수를 전달하는 콜백함수 로도 쓰입니다.  람다를 이용해서 콜백을 조금 더 편하게 할 수 있습니다. 

람다에 대해서는 파이썬에서 한 번 본 적이 있었으니 그것도 같이 볼게요. 

 

https://blue-dot.tistory.com/22

 

파이썬 공부일지 19. 함수 활용 (튜플, 람다)!

다음으로 함수 관련하여 편하게 쓸 수 있는 기능들로 튜플과 람다가 있습니다. 1. 튜플 리스트와 비슷한 자료로 리스트와 다른 점으로는 한 번 결정된 요소는 바꿀 수 없다는 것입니다. a = [ 요소

blue-dot.tistory.com

 

이것을 예제를 통해서 다시 보겠습니다. 

 

람다를 쓰기 전의 코드

package day19;



interface Bike{
	public void drive(int dist);
	
}


public class LambdaTest01 {
	public static void main(String[] args) {
	
		Bike b = new Bike() {
			public void drive(int dist) {
				System.out.println(dist + "m를 달렸습니다.");
			}
		};
		b.drive(100);
	}
}

 

람다를 사용하면 다음과 같이 코드를 줄일 수 있습니다. 

 

package day19;



interface Bike{
	public void drive(int dist);
	}


public class LambdaTest01 {
	public static void main(String[] args) {
	
		Bike b = (dist)->{System.out.println(dist + "m를 달렸습니다.");
		};
		
		b.drive(100);
		}
	}

결과는 같습니다.

 

람다는 우선 여기까지 기본적인 문법구조를 살펴보고 이 다음에 심화적으로 조금 더 살펴볼게요. 

반응형