클린코드는 코드를 작성하는 의도와 목적이 명확하며, 다른 사람이 쉽게 읽을 수 있어야 한다. 즉, 가독성이 좋아야 한다.
다른 사람이 코드를 봐도, 자유롭게 수정이 가능하고 버그를 찾으며, 변경된 내용이 어떻게 상호작용하는지 이해하는 시간을 최소화하는 것이다.
변수, 클래스, 메소드에 의도가 분명한 이름을 사용한다.
int elapsedTimeInDays;
int daysSinceCreation;
int fileAgeInDays;
잘못된 정보를 전달할 수 있는 이름을 사용하지 않는다. 예를 들어, 범용적으로 사용되는 단어를 사용하면 안 된다. (aix, hp 등)
또한, 연속된 숫자나 불용어를 덧붙이는 방식은 피해야 한다.
코드를 읽는 사람이 코드를 작성한 사람만큼 이해할 수 있도록 도와야 한다. 주석은 반드시 달아야 할 이유가 있는 경우에만 작성하도록 한다.
// 주어진 'name'으로 노드를 찾거나 아니면 null을 반환한다.
// 만약 depth <= 0이면 'subtree'만 검색한다.
// 만약 depth == N 이면 N 레벨과 그 아래만 검색한다.
Node* FindNodeInSubtree(Node* subtree, String name, int depth);
코드를 보기 좋게 배치하고 꾸며 가독성을 향상시킨다. 규칙적인 들여쓰기와 줄바꿈으로 가독성을 높이고, 일관성 있는 패턴을 적용해 불규칙한 중복 코드를 제거한다.
왼쪽에 변수를 두고, 오른쪽에 상수를 둔다.
if (length >= 10)
while (bytesReceived < bytesExpected)
부정이 아닌 긍정을 다루자.
if (a == b) {
// same
} else {
// different
}
함수는 작게, 한 번에 하나의 작업만 수행하도록 작성한다.
예를 들어, 아래의 함수는 추천 수를 변경하는 작업을 수행하는 코드인데, 두 가지 일을 하고 있다.
var voteChanged = function (oldVote, newVote) {
var score = getScore();
if (newVote !== oldVote) {
if (newVote.equals("Up")) {
score += oldVote.equals("Down") ? 2 : 1;
} else if (newVote.equals("Down")) {
score -= oldVote.equals("Up") ? 2 : 1;
} else if (newVote.equals("")) {
score += oldVote.equals("Up") ? -1 : 1;
}
}
setScore(score);
};
위의 코드를 별도의 함수로 분리하여 가독성을 향상시킬 수 있다.
var voteValue = function (String vote) {
if (vote.equals("Up")) {
return 1;
}
if (vote.equals("Down")) {
return -1;
}
return 0;
};
var voteChanged = function (String oldVote, String newVote) {
var score = getScore();
score -= voteValue(oldVote);
score += voteValue(newVote);
setScore(score);
};
이제 훨씬 깔끔한 코드가 되었다!
시큐어 코딩이란 안전한 소프트웨어를 개발하기 위해, 소스 코드에 존재할 수 있는 잠재적 보안 약점을 제거하는 것을 말한다.
안전하지 않은 코드:
String query = "SELECT * FROM users WHERE userid = '" + userid + "' AND password = '" + password + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);
안전한 코드:
String query = "SELECT * FROM users WHERE userid = ? AND password = ?";
PreparedStatement stmt = connection.prepareStatement(query);
stmt.setString(1, userid);
stmt.setString(2, password);
ResultSet rs = stmt.executeQuery();
시큐어 코딩을 통해 적절한 검증 작업을 수행하고 안전하게 처리할 수 있다.
클린 코드는 가독성이 좋고 유지보수가 쉬운 코드로, 협업 시 빠르게 문제를 찾고 수정할 수 있게 도와줍니다. 이를 위해서는 네이밍, 주석, 흐름제어, 함수 작성 방법 등에 신경 써야 합니다.
또한, 시큐어 코딩을 통해 보안 약점에 대비한 코드를 작성하여 안전한 소프트웨어 개발이 가능해집니다. 클린 코드와 시큐어 코딩의 원칙을 지키며 소프트웨어를 작성하는 것은 개발자의 중요한 의무입니다.