@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인 경우에만 실행된다.