본문 바로가기
Java

4/14 - 컬렉션 자료 구조, 람다

by Jiwon_Loopy 2025. 4. 19.
반응형

목차


수정할 수 없는 컬렉션


  • 대부분 빠름
  • 읽기 전용
  • 요소를 추가, 삭제할 수 없음
  • .of( )를 이용하여 만듬
  • .copyOf( )를 이용하여 만들 수 있음

람다식


  • 함수형 프로그래밍
    • 줄이기 (생략)
      • 인터페이스를 구현한 구현클래스 (메서드 재정의) 객체 생성 사용
      • 간략한 표현 방식
    • 함수를 정의하고 이 함수를 데이터 처리부로 보내 데이터를 처리하는 기법
    • 외부에서 제공된 함수에 의존
    • 인터페이스가 단 하나의 추상 메소드를 가질 때, 이를 함수형 인터페이스라고 한다.
    • 인터페이스가 함수형 인터페이스임을 보장하기 위해서는 @FunctionalInterface 어노테이션을 붙이면 된다.
    • 생략 가능한 경우
      • 반드시 추상메서드가 하나인 인터페이스만 가능(@Functional Interface)
      • 실행문이 하나일 때 생략 가능
      • 실행문이 return 하나일 때 생략 가능
      • 매개변수가 하나일 때 괄호 생략 가능
      • 메서드 참조, 생성자 참조 (::)
  • 선택사항 이지만, 컴파일 과정에서 추상 메소드가 하나인지 검사하기 때문에 유용하다.
package ch16.sec01;

@FunctionalInterface
public interface Calculable {
	void caculate(int x, int y);
}

package ch16.sec01;

public class LambdaExample {
	public static void action(Calculable calculable) {
		int x = 10;
		int y = 4;
		calculable.caculate(x, y);
	}
	
	public static void main(String[] args) {
		action((x,y) -> {
			int result = x+y;
			System.out.println("result: "+ result);
			
		});
		
		action((x,y) -> {
			int result = x -y;
			System.out.println("result " + result);
		});
	}
}
  • 매개변수가 없는 람다식
    • 람다식은 무조건 추상 메서드 재정의
    • 실행문이 두 개 이상인 경우 중괄호 필요
    • 실행문이 한 개일 경우 중괄호 생략 가능
  • 메서드 참조
    • 람다식에서 제공되는 한 매개변수의 메소드를 호출해서 호출한 매개변수를 매개값으로 사용하는 경우
package ch16.sec05.exam01;

@FunctionalInterface
public interface Calcuable {
	double calc(double x, double y);
}

package ch16.sec05.exam01;

public class Computer {

	public static double staticMethod(double x, double y) {
		return x + y;
	}

	public double instanceMethod(double x, double y) {
		return x * y;
	}
}

package ch16.sec05.exam01;

public class Person {
	public void action(Calcuable calcuable) {
		double result = calcuable.calc(10,4);
		System.out.println("결과: " + result);
	}
}

package ch16.sec05.exam01;

public class MethodReferenceExample {
	public static void main(String[] args) {
		Person person = new Person();
		
		person.action(Computer:: staticMethod);
		
		Computer com = new Computer();
		person.action(com :: instanceMethod);
	}
}

출력 결과

결과: 14.0
결과: 40.0
  • 매개변수의 메서드 참조
    • a 매개변수의 메소드를 호출해서 b 매개변수를 매개값으로 사용하는 경우
    (a, b) -> { a.instanceMethod(b); }
    클래스 :: instanceMethod
    
  • 생성자 참조
    • 객체를 생성하는 것을 의미한다.
    (a, b) -> ( return new 클래스(a, b); }
    클래스 :: new
    
728x90
반응형