코드의 형식을 맞추는 목적은 무엇일까?
깔끔하고, 일관적이고, 꼼꼼하고, 질서정연한 코드라고 느껴지는 코드는 어떤 코드일까?
책에서는 오늘 구현한 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미친다. 코드가 많이 바뀌어도 맨 처음 잡아놓은 구현스타일과 가독성 수준은 유지보수 용이성과 확장성에 계속 영향을 미친다.
그렇기 때문에 원래의 코드는 사라질지라도 개발자의 스타일과 규율은 사라지지 않아 형식을 지키는것이 중요하다.
형식을 맞추는 이유는?
일단 코드 형식은 의사 소통의 일환이고 전문 개발자의 일차적인 의무이기 때문에 아주 중요하다.
- 오늘 구현한 기능이 다음 버전에서 바뀔 확률이 아주 높음
- 그 때문에 오늘 구현한 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미침
- 원래 코드의 흔적이 없어지더라도 처음 잡은 구현 스타일과 가독성 수준은 계속 영향을 미침
적절한 행 길이를 유지하자
- 큰 파일보다 작은 파일이 일반적으로 이해하기 쉽다.
- 200줄 미만의 코드로도 충분히 크고 복잡한 시스템을 만들 수 있음
신문 기사처럼 작성하자
- 신문 기사를 보면 제목 - 요약문 - 본문이 나오는 것처럼 소스코드도 가장 중요하고 대표가 될만한 부분부터 위에서 차근차근 정리하면 좋다.
대다수 기사는 아주 짧다. 신문이 아주 긴 하나의 기사만 싣는다면 아무도 읽지 않을 것이다.
개념은 빈 행으로 분리하라
- 글에 문단이 있는 것 처럼 코드에는 빈 행이 있다.
// 아래 코드는 다닥다닥 붙어잇어서 잘 읽히지 않는다 간단한 코드임에도 불구하고.. public List<Cell> getFlaggedCells() { List<Cell> flaggedCells = new ArrayList(); for (Cell cell : gameBoard) if (cell.isFlagged()) flaggedCells.add(cell); return flaggedCells; }
// 아래처럼 변수는 변수끼리 로직은 로직끼리 구분하면 읽기가 편해진다. public List<Cell> getFlaggedCells() { List<Cell> flaggedCells = new ArrayList(); for (Cell cell : gameBoard) if (cell.isFlagged()) flaggedCells.add(cell); return flaggedCells; }
세로 밀집도
개념을 빈 행으로 구분지었다면 세로 밀집도는 연관성을 의미한다.
- 즉 서로 밀접한 코드 행은 세로로 가까이 놓자
// 아래 코드는 변수가 for문 로직 위에 붙어있다 뭔가 좀 그렇다.. public List<Cell> getFlaggedCells() { List<Cell> flaggedCells = new ArrayList(); List<Cell> dummyCells = new ArrayList(); for (Cell cell : gameBoard) if (cell.isFlagged()) flaggedCells.add(cell); dummyCells.add(cell); return flaggedCells; } // 변수는 변수끼리 붙여서 연관성을 더 강조하자 public List<Cell> getFlaggedCells() { List<Cell> flaggedCells = new ArrayList(); List<Cell> dummyCells = new ArrayList(); for (Cell cell : gameBoard) if (cell.isFlagged()) flaggedCells.add(cell); dummyCells.add(cell); return flaggedCells; }
코드 순서
- 클래스 내에 아래와 같은 순서로 코드를 작성하자
- static변수 : public > protected > package > private
- instance변수 : public > protected > package > private
- 생성자
- 메서드 : (public → private → private) → (public → private → private) ~~~
// public 메서드에서 호출되는 private 메서드는 바로 아래에 두도록 하자. public List<Cell> getFlaggedCells() { List<Cell> flaggedCells = new ArrayList(); addFlaggedCells(flaggedCells); return flaggedCells; } private void addFlaggedCells(List<Cell> flaggedCells) { ~~~ }
수직 거리
- 가로 길이를 길게 만들지 말것
- 인텔리제이를 사용한다면 가로 길이를 제한하는 구분 선이 존재하지만 되도록이면 넘기지 않는 것이 중요
- 공백을 잘 넣자
List<String> list=new ArrayList(); list .add("이건 좀ㅠㅠ"); // 공백을 잘 사용하자 List<String> list = new ArrayList(); list.add("이게 맞지 !");
- 정렬을 하지 말자
- 가장 긴 변수랑 위치를 맞추기 위해 공백을 넣는것은 좋지 못한 행위이다
String abcdefgh = "hi"; String a = "이러지마";
- 들여쓰기를 잘하자
- 들여쓰기가 잘 되어있지 않다면 보기 힘들것이다.
List<String> list=new ArrayList(); // 이러지 말자 ! for(String value : list) system.out.println(value);
결론
- 팀이건 개인이건 코드를 작성할 때 나름대로 규칙을 가지고 지키면서 깔끔하게 작성하도록 노력하자 !