스퐁지송 개발노트

22.12.02(불금) 람다식 (익명함수) 본문

JAVA 입문 시작

22.12.02(불금) 람다식 (익명함수)

강준석 2022. 12. 2. 16:19
728x90

람다식 - 익명 함수

인터페이스 - 추상메서드(단 2개는 안됨)

 

람다식 예시

 

람다 인터페이스

 

package 람다;

@FunctionalInterface
//람다를 위한 인터페이스입니다 라는 뜻! 안써두됨
public interface Lambda1 {
	int add(int a, int b);
			//매계변수
}

 

 

메인클래스

 

 

package 람다;

public class Main01 {

	public static void main(String[] args) {
		
		Lambda1 l = (int a, int b) -> a + b;
		
		System.out.println(l.add(10/* a */, 30/* b */));

	}

}

 

예시2

 

람다 인터페이스

 

 

package 람다;

public interface Lambda2 {
	void print();
}

 

 

 

메인 클래스

 

 

package 람다;

public class Main02 {

	public static void main(String[] args) {

		Lambda2 l = () -> {
		          //람다2클래스에 매계변수가 없으므로 빈칸
			String str = "메서드 실행";
			System.out.println(str);
		};

		l.print();
		
	}

}

 

람다예시03

 

 

람다인터페이스

package 람다;

public interface Lambda3 {
	void print(String name);
}

 

 

메인문

 

package 람다;

public class Main04 {

	public static void main(String[] args) {

		Lambda3 l = (String name) -> {
			       //Lambda3 인터페이스문에서 받은 매개변수

			System.out.println("이름: " + name);
		};
		
		l.print("티모");
	}

}

 

 

예시

 

 

람다 인터페이스

package 람다;

public interface Lambda5 {
	void m();
}

 

 

메인클래스

 

package 람다;

public class Main05 {

	public static void main(String[] args) {

		Lambda4 l = (x,y) -> x * y;
		//한줄만 작성시 return;생략해서 축약작성
		//그래서 람다인터페이스로 입력값이 자동으로 감
		
		System.out.println("곱 : "+l.cal(5,3));
		
		l = (x,y) -> x+y;
		System.out.println("합 : "+l.cal(5,3));
		//한줄만 작성시 return;생략해서 축약작성
		//그래서 람다인터페이스로 입력값이 자동으로 감
		
		l = (x,y) -> x-y;
		System.out.println("빼기 : "+l.cal(5,3));
		//한줄만 작성시 return;생략해서 축약작성
		//그래서 람다인터페이스로 입력값이 자동으로 감
		l = (x,y) -> x/y;
		System.out.println("나누기 : "+l.cal(5,3));
		//한줄만 작성시 return;생략해서 축약작성
		//그래서 람다인터페이스로 입력값이 자동으로 감
		
	};

}

결과

 

 

곱 : 15
합 : 8
빼기 : 2
나누기 : 1

 

 

 

예시

 

람다 4,5인터페이스

package 람다;

public interface Lambda4 {
	int cal(int x, int y);
}



==================================



package 람다;

public interface Lambda5 {
	void m();
}

 

샘플클래스

 

 

package 람다;

public class Sample {
	
	int a = 10;
	
	void m() {
		final int a = 40;
		
		Lambda5 l = () -> {
			      //Lambda5에 매개변수없으니 빈칸
			System.out.println("this : "+ this.a);
                              //this : 자기 클래스의 a를 부르기때문에 "a" 출력
			System.out.println("a : "+ a);
							 //현제 조건식의 "a"를 불러오기때문에 "40"출력
			
		};
		
		l.m();
		
	}
}

 

 

메인클래스

 

 

package 람다;

public class Main06 {

	public static void main(String[] args) {
		
		Sample s = new Sample();
		
		s.m();

	}

}

결과

 

this : 10
a : 40

 

 

 

Runnable,Thread

 

package 람다;
//자바안의 기본 인터페이스 람다 Runnable
//위에서 아래로 순서로 진행이 아니라 동시에 다중으로 실행
//그래서 위에 첫번쨰 메서드 진행중에 두번째 메서드도 동시에 실행 
public class Main03 {

	public static void main(String[] args) {
		System.out.println("시작");
		//시작과 동시에
		//t.start();
		//t2.start(); 아래 코드 실행
		
		Runnable run = () -> {
			for(int i=1;i<=10;i++){
				System.out.println("첫번째: "+i);
			}
		};
		
		Runnable run2 = () -> {
			for(int i=1;i<=10;i++){
				System.out.println("두번째: "+i);
			}
		};
		
		Thread t = new Thread(run);
		Thread t2 = new Thread(run2);
		
		t.start();
		t2.start();
		System.out.println("종료");
		
	}

}

 

결과

 

시작
종료
첫번째: 1
첫번째: 2
첫번째: 3
첫번째: 4
첫번째: 5
첫번째: 6
첫번째: 7
첫번째: 8
두번째: 1
두번째: 2
두번째: 3
첫번째: 9
두번째: 4
첫번째: 10
두번째: 5
두번째: 6
두번째: 7
두번째: 8
두번째: 9
두번째: 10

728x90
Comments