Real Vectorism. 훨씬 더 입체적으로...
막연히 쓰던 것의 변화 본문
반응형
VO 객체 (기존 사용 방식)
public class UserVO {
private int idx;
private String username;
private String password;
private Date regdate;
/* 중략 */
public void setIdx(int idx) { this.idx = idx; }
public void setUsername(String username) { this.username = username; }
public void setPassword(String password) { this.password = password; }
public void setRegdate(Date regdate) { this.regdate = regdate; }
}
VO 객체 (새로운 형태)
public class UserVO {
private int idx;
private String username;
private String password;
private Date regdate;
/* 중략 */
public UserVO setIdx(int idx) { this.idx = idx; return this; }
public UserVO setUsername(String username) { this.username = username; return this; }
public UserVO setPassword(String password) { this.password = password; return this; }
public UserVO setRegdate(Date regdate) { this.regdate = regdate; return this; }
}
Map 타입 (기존 사용 방식)
@RequestMapping("https://grast.tistory.com")
public String regist(Model model, HttpServletRequest request, HttpServletResponse response) {
Map<String, String> param = new HashMap<String, String>();
param.put("idx", idx);
param.put("username", username);
param.put("password", password);
param.put("regdate", regdate);
int result = userService.insertUser(param);
return "resultPage";
}
Map 타입 (새로운 형태)
/* 사전 선언 필요 */
public class ChainMap<K, V> extends HashMap<K, V> {
public ChainMap<K, V> eat(K k, V v) {
this.put(k, v);
return this;
}
}
/*================================================================*/
@RequestMapping("https://grast.tistory.com")
public String regist(Model model, HttpServletRequest request, HttpServletResponse response) {
int result = userService.insertUser(
new ChainMap<String, String>()
.eat("idx", idx)
.eat("username", username)
.eat("password", password)
.eat("regdate", regdate)
);
return "resultPage";
}
변화 1. 미칠듯한 메서드 체이닝으로 소스코드의 형식적 정리 포텐셜이 증가
...... 그냥 점만 나오면 줄 바꿔서 탭으로 정렬하면 미칠듯한 가독성 유지 가능
변화 2. 미칠듯한 람다함수의 Map 인터페이스 범용성
기존 방식
public UserVO selectUser(String username) {
UserVO user = new UserVO();
user.setUsername(username);
user = userService.selectUser(user);
return user;
}
새로운 방식
public UserVO selectUser(String username) {
return Optional.ofNullable(username)
.map(new UserVO()::setUsername)
.map(userService::selectUser)
.orElseGet(null);
}
map 에서 item -> return item 형식에서 은근히 setter 메소드가 void였던 탓에 Optional 안에서 가공단계를 시작하기 전에 item을 미리 손봐야할 필요가 있었는데 미칠듯한 메소드 체이닝이 람다식 안에서 존재감을 과시하는 범용성 코드로 사용이 가능. 이게 무시무시한게 위에서 새로 만들었던 ChainMap(HashMap 상속체)도 미칠듯한 응용이 가능.
반응형
'Java (based by 1.8, Lambda)' 카테고리의 다른 글
아주 간단한 Collectors.groupingBy 사용방법 (0) | 2020.05.28 |
---|---|
진짜 지랄맞다 (0) | 2020.05.11 |
자바 10 이상의 버전에서 사용이 가능한 var에 대한 학습 (0) | 2020.04.20 |
Optional과 Stream...? (0) | 2020.03.01 |
[언젠가를 위한 복습] 자바 1.8의 학습난이도 최상의 람다식?? (0) | 2020.03.01 |
Comments