Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- io
- 쓰레드
- 기초
- Comparable
- iBatis
- enum
- 변수
- 자바
- ListSort
- Java
- 고급자바
- 객체
- IBatis CRUD
- oclick 동적
- I/O
- Thread
- 연산자
- 변수초기화
- 계산기
- 객체지향
- 동적 문자열
- MAP
- 동적 데이터
- 동적 버튼 생성
- 조건문
- 코딩
- 동적 버튼 onclick
- IBatis 게시판
- comparator
- 변수선언
Archives
- Today
- Total
Jun's Blog
[Java] Lambda 간단한 예제 본문
/**
* 람다식 => 익명함수를 생성하기 위한 식
* 자바에서는 '매개변수를 가진 코드 블럭' => 런타임시 익명구현 객체로 생성된다.
*
* 형식) 인터페이스명 객체변수명 = 람다식;
*
* 람다식의 형식) (매개변수들...) -> {처리할 코드들;...}
*
* => 람다식으로 변환할 수 있는 인터페이스는 추상메서드가 1개인 인터페이스만 처리할 수 있다.
* 이런 인터페이스를 '함수적 인터페이스'라고 한다.
* 이 함수적 인터페이스를 만들 때는 @FunctionalInterface로 지정한다.
*/
public class T01_LambdaTest {
public static void main(String[] args) {
// 람다식을 사용하지 않는 경우
Thread th1 = new Thread (
new Runnable() {
@Override
public void run() {
for(int i=0; i <=10; i++) {
System.out.println(i);
}
}
}
);
th1.start();
// 람다식을 사용하는 경우
Thread th2 = new Thread(
() -> {
for(int i=0; i<=10; i++) {
System.out.println("람다 -" + i);
}
}
);
th2.start();
}
}
public class T02_LambdaTest {
public static void main(String[] args) {
// 람다식을 사용하지 않았을 경우
LambdaTestInterface1 lam1 = new LambdaTestInterface1() {
@Override
public void test() {
System.out.println("안녕하세요");
System.out.println("익명구현 객체 방식입니다.");
}
};
lam1.test(); // 메서드 호출
LambdaTestInterface1 lam2 = () ->
System.out.println("반가워요\n람다식으로 처리하는 방식입니다.");
lam2.test(); // 메서드 호출
System.out.println("------------------------------------------------");
/**
* 람다식 작성 방법
*
* 기본형식) (자료형이 매개변수명, ...) -> {실행문들; ...}
* 1) 매개변수의 '자료형 이름'은 생략할 수 있다.
* 예) (int a) -> {System.out.println(a);}
* (a) -> {System.out.println(a);}
*
* 2. 매개변수가 1개일 경우에는 괄호'()'를 생략할 수 있다
* (단, '자로형이름'을 지정할 경우네는 괄호를 생략할 수 없다.
* 예) a-> {System.out.println(a);}
*
* 3. "실행문"이 1개일 경우에는 '{ }'를 생략할 수 있다.
* (이 때 문장의 끝을 나타내는 세미콜론(;)도 생략한다.)
* 예) a -> System.out.println(a)
*
* 4) 매개변수가 하나도 없으면 괄호 '()'를 생략할 수 있다.
* 예) () -> System.out.println(a)
*
* 5. 반환값이 있을 경우에는 return 명령을 사용한다.
*
* 예) (a,b) -> {return a+b;}
* (a,b) -> return a + b;
*
* 6. 실행문에 return 문만 있을 경우 return 명령과 '( )'생략할 수 있다
* 예) (a+b) -> a+b
*
* 람다식을 쓰면 코드가 간결해지므로 좋다!
*/
LambdaTestInterface2 lam3 = (int z) -> {
int result = z + 100;
System.out.println("result : " + result);
};
lam3.test(30);
LambdaTestInterface2 lam4 = (int z) -> {
int result = z + 300;
System.out.println("result : " + result);
};
lam3.test(60);
LambdaTestInterface2 lam5 = z -> System.out.println("result : " + (z + 500));
lam5.test(90);
System.out.println("==========================================================================");
LambdaTestInterface3 lam6 = (int x, int y) -> {
int r = x + y;
return r;
};
int k = lam6.test(20, 50);
LambdaTestInterface3 lam7 = (x, y) -> {
return x + y;
};
k = lam7.test(80, 50);
System.out.println("k : " + k);
LambdaTestInterface3 lam8 = (x, y) -> x + y;
k = lam8.test(100, 100);
System.out.println("k : " + k);
LambdaTestInterface3 lam9 = (x, y) -> {
return x > y ? x : y;
};
k = lam9.test(100, 200);
System.out.println("k : " + k);
}
}
public class T03_LambdaTest {
static int stVar = 9;
private String name = "홍길동";
public void testMethod(final int temp) {
final int localVar = 50;
int kor = 100;
/**
* 람다식 내부에서 사용되는 지역변수는 모두 final이어야 한다.
* 보통은 final을 붙이지 않으면 컴파일러가 자동으로 붙여준다.
* 단, 지역변수의 값을 변경하는 식이 있을 경우에는 자동으로
* final을 붙여주지 않는다.
*/
// temp = 500;
// localVar = 2000;
// kor = 400;
// 람다식에서 지역변수 사용하기
LambdaTestInterface1 lt =
() -> {
System.out.println("temp = " + temp);
System.out.println("localVar = " + localVar);
System.out.println("kor = " + kor);
System.out.println("stVar = " + stVar);
System.out.println("name = " + this.name);
};
lt.test(); // 실행
}
public static void main(String[] args) {
new T03_LambdaTest().testMethod(200);
}
}
<interface>
// 함수적 인터페이스 -> 추상 메서드가 1개만 선언된 인터페이스
@FunctionalInterface
public interface LambdaTestInterface1 {
// 반환값이 없고 매개변수도 없는 추상메서드 선언
public void test();
}
@FunctionalInterface
interface LambdaTestInterface2 {
// 반환값이 없고 매개변수는 있는 추상메서드 선언
public void test(int a);
}
@FunctionalInterface
interface LambdaTestInterface3 {
// 반환값이 있고 매개변수도 있는 추상메서드 선언
public int test(int a, int b);
}
Comments