♠ \ 특징 / ♠
( 1 )
java script
함수의 매개변수로 함수를 넣을 수 있음 ,
리턴값도 함수 내보내기가 가능
( 2 )
java
함수의 매개변수 / 리턴값으로 함수 사용 금지
따라서 부가기능을 추가했음
: 5가지 경우의 대표 함수를 만들어서 사용
< 1 >
대표 함수들
인터페이스 ( 함수 ) | 매개변수 | 리턴값 | 대표 함수 |
Runnable <T> (실행) 함수 | x | x | void run() |
Supplier <T> (공급자) 함수 | x | o | T get() |
Consumer<T> (소비자) 함수 | o | x | void accept(T t) |
Function <T, R> (일반) 함수 | o | o | R apply(T t) |
Predicate <T> (논리) 함수 | o | o , 참/거짓 | boolean test(T t) |
< 2 >
( 예시 )
샘플 함수 만들기
// 함수 매개변수
Supplier<Integer> s = () -> (int)(Math.random()*100 + 1); // 1 ~ 100 까지의 랜덤 수
Consumer<Integer> c = i -> System.out.println(i + ","); // i 출력 함수
Function<Integer , Integer> f = i -> i/10*10; // i의 값 중 1의 자리를 없애는 함수
Predicate<Integer> p = i -> i%2 == 0; // 2의 배수만 리턴하는 함수
샘플 메소드
/**
* 1~100까지 중 10개의 랜덤 숫자 넣기 함수
* 제네릭 함수 : 제네릭을 매개변수에 사용하는 함수, 반환타입 앞에 <T>를 붙임
* T 클래스 : 대표 T : 임의의 어떤 클래스를 대표하는 클래스로 사용
* 제네릭 함수 : static <T> 반환타입 함수명(매개변수타입 매개변수명...) {}
* @param s
* @param list
* @param <T>
*/
static <T> void makeRandomList(Supplier<T> s, List<T> list) {
for (int i = 0; i < 10; i++) {
list.add(s.get()); // s.get() : 매개변수로 전달되는 생산자 함수를 대리하는 함수
}
}
/**
* List에 저장된 요소의 값이(i) 짝수인것만 화면에 출력
* @param p
* @param c
* @param list
* @param <T>
*/
static <T> void printEventNum(Predicate<T> p, Consumer<T> c, List<T> list) {
for (T i: list) {
// 명제 : 참/거짓이 있는 문장
if(p.test(i)) { // p.test(값) : 매개변수로 전달되는 논리(명제) 함수를 대리하는 함수
c.accept(i); // c.accept(값) : 매개변수로 전달되는 소비자 함수를 대리하는 함수
}
}
System.out.println(); // 줄바꿈
}
/**
* 1의 자리를 없앤 새로운 배열을 만들어서 List에 저장하는 함수(1의 자리는 0으로 변경)
* 제네릭 함수 : 함수의 리턴값 앞에 <T>, 제네릭표현식을 사용하는 함수
* @param f
* @param list
* @return
* @param <T>
*/
static <T> List<T> doSomething(Function<T, T> f, List<T> list) {
List<T> newList = new ArrayList<T>(list.size());
for (T i: list) {
newList.add(f.apply(i)); // p.apply(값) : 매개변수로 전달되는 일반 함수를 대리하는 함수
}
return newList;
}
샘플 메소드 호출
List<Integer> list = new ArrayList<>();
// TODO: 정적 함수를 호출하면 마지막 매개변수(배열)에 값이 저장되어 리턴됨 (화면출력됨)
makeRandomList(s,list);
'JAVA' 카테고리의 다른 글
Java - 내부 클래스 (일반속성 클래스) (0) | 2023.10.02 |
---|---|
Java - 내부 클래스 (0) | 2023.10.02 |
Java - Files (클래스) (0) | 2023.10.02 |
Java - Serializable (인터페이스) (0) | 2023.10.02 |
Java - ObjectInputStream , ObjectOutputStream ( 보조스트림 ) (0) | 2023.10.02 |