@Data
@AllArgsConstructor
public class User {
private Integer id;
private String name;
private LocalDateTime joinDate;
}
각 회사는 업무의 범위가 있고, 그 범위를 보통 도메인이라고 한다. 보통 특정한 분야에서 사용되는 업무 지식을 말한다.
public class UserDaoService {
private static final List<User> users = new ArrayList<>();
private static int usersCount = 3;
static {
users.add(new User(1, "jake", LocalDateTime.now()));
users.add(new User(2, "jack", LocalDateTime.now()));
users.add(new User(3, "paul", LocalDateTime.now()));
}
public User save(User user) {
if(user.getId() == null) {
user.setId(++usersCount);
}
users.add(user);
return user;
}
public List<User> findAll() {
return users;
}
public User findOne(int id) {
return users.stream()
.filter((user) -> user.getId() == id)
.findFirst()
.orElse(null);
}
}
리포지토리와 서비스를 합친 UserDaoService
를 만들어주었다.
참고로
Optional
에서 만일 값이 없을 때, 어떤 메소드의 결과로 처리하고 싶으면 리턴 값이Supplier
인orElseGet()
을 사용해야 하고, 메소드의 결과가 아닌 그냥 값으로 처리하고 싶다면,orElse()
를 사용하는 것이 좋다.
orElse(method())
와 같이 코드를 작성하게 되면, 매번null
이 아니어도method()
는 실행된다. 하지만,orElseGet(() -> method())
는Supplier
를 반환하기 때문에,null
인 경우에만 실행된다.