리펙토링의 이유.
보통 개발과 운영은 별도 회사에서 함.
운영 팀 내에서도 인사 변경은 계속 이루어짐.
서비스가 10년 넘게 지속 될 때, 운영팀이 10년전 개발한 내 코드를 보고 유지보수 할 수 있을까?
좋은 리펙토링의 방향성
통신 채널의 개수는 적을 수록 좋다. -> 객체 간의 의존성을 최소화
명령의 흐름은 수직적일 수록 좋다.
Entity, Vo, Dto는 흔히 혼용되어 사용되어지지만, 좀더 용어에 맞도록 분리하면 다음과 같다.
| 용어 | 설명 |
|---|---|
| Entity | 데이터베이스의 테이블과 1:1로 매칭되는 개체 |
| Vo | 데이터의 불변성을 보장하는 개체 |
| Dto | 서로 다른 계층간의 데이터 교환을 위한 개체 |
Q: 미리 추상화 설계를 완벽하게 해놓고 하는게 맞나.
일단 부딪치면서 수정하는게 맞나?
A: 그룹에 따라 다르다. 절대적인 기준은 없고, 부딪치면서 개선해냐가야하면 후자가, 미리 완벽히 설계할 여유가 잇으면 전자가 나을거다.
대기업이라면 데일리 스크럼이 있을 것이고, 설계단위에서 탄탄한 설계가 가능할 것이지만, 혼자서 에자일 형식으로 진행해야되는 프로젝트라면, 부딪치면서 수정해 갈 수 밖에 없다.
?문자 기준으로 split메소드를 사용하고 싶다면 아래와 같이 코드를 작성해야 한다.
String[] cmdBits = cmd.split("\?", 2);
\가 사용되는 이유는 Java에서 정규 표현식에서 ?는 특수한 의미를 가지고 있기 때문이다.
다음은 정규표현식에서 사용되는 메타 문자들이므로 사용시 주의하자.
. ^ $ * + ? { } [ ] \ | ( )
문자열을 특정한 형식이나 구조로 해석하고, 그 정보를 추출하는 과정
입력받은 데이터나 시스템 내의 데이터가 특정 조건이나 규칙에 부합하는지를 확인하는 프로세스
길찾기.
소프트웨어 애플리케이션에서 특정 URL 경로에 대한 요청을 처리하고 적절한 응답을 반환하는 부분을 의미한다.
라우팅(Routing)은 네트워크에서 데이터 패킷이 출발지에서 목적지로 전송되는 경로를 선택하는 과정 또는 이 경로 자체를 나타낸다.
아래 코드는 단순한 int타입의 유효성 체크 로직이다. 따로 선언문도 필요 없이, 단순한 try catch문 한줄로 입력받은 값(name)이 정수로 치환 되는지 확인 한 후, 치환이 가능하면 치환된 id값을, 치환이 불가능한 경우 -1을 반환한다.
public int getParseInt(String id) {
try {
return Integer.parseInt(id);
}catch(NumberFormatException e) {
}
return -1;
}