컴퓨터 과학에서 어려운 문제는 딱 두 가지, 캐시 무효화(Cache invalidation)와 명명(naming)이다.
- 필 칼튼
4-1. 자바 명명 규칙 사용하기
클래스는 대문자로 시작하고, 메소드는 동사형태의 소문자, 변수는 명사형태의 소문자로 시작하는 등 자바 코드 규칙을 준수하라.
https://www.oracle.com/technetwork/java/codeconventions-150003.pdf
4-2. Getter/Setter는 규칙을 적용하라.
필드명이 foo이면 getFoo(), setFoo()와 같이 명명하며, boolean필드는 isFoo()와 같이 명명한다.
4-3. 변수명에 한 글자(i, l, m 등)를 사용하지 마라. 명시적으로 변수의 의미를 알 수 있는 이름을 사용하라.
4-4. 축약 쓰지 않기
static final Path DIR = Paths.get("/var/log");
static final Path CSV = DIR.resolve("stats.csv");
static final String GLOB = "*.log";
void createStats() throws IOException {
try (DirectoryStream<Path> dirStr =
Files.newDirectoryStream(DIR, GLOB);
BufferedWriter bufW = Files.newBufferedWriter(CSV)) {
for (Path lFile : dirStr) {
String csvLn = String.format("%s,%d,%s",
lFile,
Files.size(lFile),
Files.getLastModifiedTime(lFile));
bufW.write(csvLn);
bufW.newLine();
}
}
}
위에는 DIR, CSV, GLOB, dirStr, bufW, lFile, csvLn 등 축약어가 많아 이해하기가 어렵다. 아래와 같이 변경하면 훨씬 낫다
static final Path LOG_FOLDER = Paths.get("/var/log");
static final Path STATISTICS_CSV = LOG_FOLDER.resolve("stats.csv");
static final String FILE_FILTER = "*.log";
void createStatistics() throws IOException {
try (DirectoryStream<Path> logs =
Files.newDirectoryStream(LOG_FOLDER, FILE_FILTER);
BufferedWriter writer =
Files.newBufferedWriter(STATISTICS_CSV)) {
for (Path log : logs) {
String csvLine = String.format("%s,%d,%s",
log,
Files.size(log),
Files.getLastModifiedTime(log));
writer.write(csvLine);
writer.newLine();
}
}
}
4-5. 무의미한 용어 쓰지 않기
class MainSpaceShipManager {
AbstractRocketPropulsionEngine abstractRocketPropulsionEngine;
INavigationController navigationController;
boolean turboEnabledFlag;
void navigateSpaceShipTo(PlanetInfo planetInfo) {
RouteData data = navigationController.calculateRouteData(planetInfo);
LogHelper.logRouteData(data);
abstractRocketPropulsionEngine.invokeTask(data, turboEnabledFlag);
}
}
main, manager, data, info, flag 처럼 자주 쓰이지만 무의미한 용어는 빼는게 낫다. 클래스명에 impl을 붙이거나 인터페이스에 접두사 I를 붙이는 것도 불필요.
class SpaceShip {
Engine engine;
Navigator navigator;
boolean turboEnabled;
void navigateTo(Planet destination) {
Route route = navigator.calculateRouteTo(destination);
Logger.log(route);
engine.follow(route, turboEnabled);
}
}
4-6. 도메인 용어 사용하기
업무 도메인마다 사용하는 언어가 있으므로, 단순히 Person 등을 쓰기 보다는, 해당 도메인의 용어 Astronaut(우주비행사) 등의 구체화된 용어를 사용하라.
반응형