Java

๋ฉ”์„œ๋“œ ์ฐธ์กฐ(method reference)

9taetae9 2023. 10. 6. 22:21
728x90

๋ฉ”์„œ๋“œ ์ฐธ์กฐ 

-ํ•˜๋‚˜์˜ ๋ฉ”์„œ๋“œ๋งŒ ํ˜ธ์ถœํ•˜๋Š” ๋žŒ๋‹ค์‹์€ '๋ฉ”์„œ๋“œ ์ฐธ์กฐ'๋กœ ๋” ๊ฐ„๋‹จํžˆ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ข…๋ฅ˜ ๋žŒ๋‹ค ๋ฉ”์„œ๋“œ ์ฐธ์กฐ
static๋ฉ”์„œ๋“œ ์ฐธ์กฐ (x)-> ClassName.method(x) ClassName::method
์ธ์Šคํ„ด์Šค๋ฉ”์„œ๋“œ ์ฐธ์กฐ (obj.x)->obj.method(x) ClassName::method

-static ๋ฉ”์„œ๋“œ ์ฐธ์กฐ

Integer method(String s) { //Integer.parseInt(String s)๋งŒ ํ˜ธ์ถœ

      return Integer.parseInt(s);

}

๋žŒ๋‹ค์‹

Function<String, Integer> f = (String s) -> Integer.parseInt(s); 

๋ฉ”์„œ๋“œ ์ฐธ์กฐ

Function<string, integer> f = (String s) -> Integer::parseInt(s);

 

-์ƒ์„ฑ์ž์˜ ๋ฉ”์„œ๋“œ ์ฐธ์กฐ

1)๋งค๊ฐœ๋ณ€์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ

๋žŒ๋‹ค์‹

Supplier<MyClass> s=()->new MyClass(); 

๋ฉ”์„œ๋“œ ์ฐธ์กฐ

Supplier<MyClass> s=MyClass::new; 

 

2)๋งค๊ฐœ๋ณ€์ˆ˜ 1๊ฐœ์ธ ๊ฒฝ์šฐ

๋žŒ๋‹ค์‹

Function<Integer, MyClass> s = (i) -> new MyClass(i);

๋ฉ”์„œ๋“œ ์ฐธ์กฐ

Function<Integer, MyClass> s= MyClass::new;

 

๋ฐฐ์—ด๊ณผ ๋ฉ”์„œ๋“œ ์ฐธ์กฐ

๋žŒ๋‹ค์‹

Function<Integer, int[]> f = x->new int[x]; 

๋ฉ”์„œ๋“œ ์ฐธ์กฐ

Function<Integer, int[]> f2 = int[]::new; //๋ฐฐ์—ดํƒ€์ž…[]::new

 

public class MethodReference {

 

public static void main(String[] args) {

Function<String,Integer> f=(String s) -> Integer.parseInt(s);

Function<String,Integer> f2=Integer::parseInt; //ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค์— ์ •๋ณด๊ฐ€ ์žˆ๊ธฐ ๋–„๋ฌธ์— ๋ฉ”์„œ๋“œ์ฐธ์กฐ๊ฐ€ ๊ฐ€๋Šฅ

 

 

System.out.println(f.apply("100")+200);

System.out.println(f2.apply("100")+200);

 

Supplier<MyClass> s= ()->new MyClass();

Supplier<MyClass> s2= MyClass::new;

 

MyClass mc = s.get(); //MyClass ๊ฐ์ฒด ๋ฐ˜ํ™˜

System.out.println(s.get());

 

MyClass mc2 = s2.get(); //MyClass ๊ฐ์ฒด ๋ฐ˜ํ™˜

System.out.println(s2.get());

 

Function<Integer, MyClass2> f3=(i)->new MyClass2(i);

Function<Integer, MyClass2> f4=MyClass2::new;

 

MyClass2 mc3 = f3.apply(100);

System.out.println(mc3.iv);

System.out.println(f3.apply(200).iv);

 

MyClass2 mc4 = f4.apply(200);

System.out.println(mc4.iv);

 

Function<Integer, int[]> f5 = (i) -> new int[i];

System.out.println(f5.apply(100).length);

 

Function<Integer,int[]> f6 = int[]::new; //๋ฉ”์„œ๋“œ ์ฐธ์กฐ

System.out.println(f6.apply(200).length);

 

 

 

 

}

}

 

class MyClass{}

 

class MyClass2{

int iv;

 

MyClass2(int iv) {

this.iv=iv;

}

}

 

output:

300

300

java_study.MyClass@2a3046da

java_study.MyClass@2a098129

100

200

200

100

200

728x90