티스토리 뷰
● 도입
- 이번 글에서는 객체의 instance method를 지정할 때 를 알아볼 것이다.
[ClassName::instanceMethodName]
- '해당 클래스의 객체(인스턴스)'를 매개변수(parameter)로 넘겨 해당 객체(인스턴스)의 instance method 메서드를 실행해주는 함수
Function<String, Integer> strLength = String::length;
int length = strLength.apply("Hello world!");
--> "Hello world!"가 위 설명의 '해당 클래스의 객체(인스턴스)'이다.
--> ClassName::instanceMethodName = String::length
BiPredicate<String, String> strEquals = String::equals;
boolean result = strEquals.test("hello", "world");
--> "hello"가 위 설명의 '해당 클래스의 객체(인스턴스)'이다.
--> "hello".equals("world"); 의 모습으로 코드가 실행되는 것이다.
--> ClassName::instanceMethodName = String::equals
[Predicate interface]
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
}
[BiPredicate interface]
@FunctionalInterface
public interface BiPredicate<T, U> {
boolean test(T t, U u);
}
● 실습
1.
package com.fastcampus.functionalprogramming.chapter5;
import java.util.function.BiPredicate;
import java.util.function.Function;
public class Chapter5Section2 {
public static void main(String[] args) {
// [ClassName::instanceMethodName - '해당 클래스의 객체(인스턴스)'를 매개변수(parameter)로 넘겨 해당 객체(인스턴스)의 instance method 메서드를 실행해주는 함수]
// 1.
// String class의 instance을 받아서 해당 instance 안에 있는 length를 호출해 주는 함수
Function<String, Integer> strLength = String::length;
System.out.println(strLength.apply("Hello world!")); // "Hello world!"가 'String class의 instance'인 것이다.
System.out.println(strLength.apply("bye world!")); // "bye world!"가 'String class의 instance'인 것이다.
// 2.
// String을 받아서 해당 String의 .equals() 를 호출해서 또 다른 String과 비교해주는 함수
BiPredicate<String, String> strEquals = String::equals;
System.out.println(strEquals.test("hello", "apple")); // "apple"이 .equals()가 받을 String 이다.
/*
* "hello"를 먼저 받아서 "hello"의 .equals() 를 호출
* .equals()의 인자로 "apple"을 받는다.
* 이런 모습 : "hello".equals("apple")
*/
System.out.println(strEquals.test("hello", "hello")); // 두 번째 "hello"가 .equals()가 받을 String 이다.
}
}
2.
package com.fastcampus.functionalprogramming.chapter5.model;
public class User {
private int id;
private String name;
public User(int id, String name) {
super();
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "User [id=" + id + ", " + (name != null ? "name=" + name : "") + "]";
}
}
package com.fastcampus.functionalprogramming.chapter5;
import java.util.ArrayList;
import java.util.List;
import java.util.function.BiPredicate;
import java.util.function.Function;
import com.fastcampus.functionalprogramming.chapter5.model.User;
public class Chapter5Section2 {
public static void main(String[] args) {
// [ClassName::instanceMethodName - '해당 클래스의 객체(인스턴스)'를 매개변수(parameter)로 넘겨 해당 객체(인스턴스)의 instance method 메서드를 실행해주는 함수]
List<User> users = new ArrayList<User>();
users.add(new User(3, "Alice"));
users.add(new User(1, "Charlie"));
users.add(new User(5, "Bob"));
// printUserField(users, (User user) -> user.getId());
// printUserField(users, (User user) -> user.getName());
// 위를 더 간단하게 해주는게 아래 코드이다.
printUserField(users, User::getId);
printUserField(users, User::getName);
}
// User의 field를 뽑아 오는 method
public static void printUserField(List<User> users, Function<User, Object> getter) {
public static void printUserField(List<User> users, Function<User, Object> getter) {
// getId는 Integer, getName은 String을 return 하기에 최고 조상인 Object를 타입으로 지정한 것이다.
// Function<User, Object> getter = User::getId;
// Function<User, Object> getter = User::getName;
for (User user : users) {
System.out.println(getter.apply(user));
}
}
for (User user : users) {
System.out.println(getter.apply(user));
}
}
}
'Backend > Java8' 카테고리의 다른 글
#14 Method Reference를 이용해 기존 예제를 더 간단하게 (0) | 2022.10.03 |
---|---|
#13 Method Reference - Constructor Reference (0) | 2022.10.02 |
#11 Method Reference - 기존에 만들어놓은 Method를 지정하는 방법 (0) | 2022.09.23 |
#10 Comparator : 비교를 위한 인터페이스 (1) | 2022.09.22 |
#9 Predicate (1) | 2022.09.21 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 코딩테스트
- java
- SpringBoot
- 빅데이터 분석기사
- Spring Boot
- 알고리즘
- node.js
- nosql
- OS
- Advanced Stream
- DART
- 메모리
- 자료구조
- spring
- 프로그래머스
- 코테
- jpa
- Stream
- API
- MongoDB
- Java8
- SQL
- Phaser3
- git
- 운영체제
- Phaser
- db
- 프로세스
- 빅데이터
- MySQL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함