-
어떻게 코드를 작성하면 좋을까?코드 , 그 밖의/코드 작성법 2020. 11. 2. 14:14
처음 회사에 입사해서 프로젝트를 진행할 때 의외로 저를 참 난처하게 만들었던 것이
바로 코드 작성 방식이었습니다.
그때까지 오로지 저만 알아보면 되는 코드를 작성했기 때문에 코드의 가독성이 좋지 않았고
지적을 참 많이 받았습니다. 그래서 그때 처음으로 코드를 어떻게 작성하는게 좋은 걸까 ? 하는 생각을
하게 됐습니다. 아래 글은 코드 작성에 대해 공부하면서 정리해놓은 것입니다.
Naming
좋은 네이밍이란 의도가 분명한 이름을 짓는 것 입니다.
그렇다면 의도가 분명한 이름을 짓는 법은 무엇이 있을까요?
- 줄여쓰지 마세요. 이름은 충분한 의도가 담기도록 충분히 길게 써야합니다.
- 모호하게 이름을 짓지 마세요. 특히 process 를 주의, 변수 이름에 타입 정보는 불필요한 정보입니다.
- 그렇다고 이름이 길다고 다 좋은 것은 아닙니다.
- 불필요한 단어 중복을 피합니다. ( 클래스의 이름에서 의미를 유추할 수 있다면 중복 단어는 빼는게 좋습니다.)
- 난해함을 피합니다 ( 처음 보는 전문 용어나 나만 알 수 있는 단어를 이름에 사용하면 안됩니다.)
- 단어의 뉘앙스를 고려합니다.
- get : 존재하는 값을 가져온다. 가져오려는 객체가 존재하지 않으면 예외를 던질 때 사용합니다.
- find : 존재하지 않을 수 있는 어떤 값을 가져올 때 사용합니다. 가져오려는 객체가 존재하지 않으면 null 반환할 때 사용합니다.
- initialize ( 또는 init ) : 객체의 상태를 최초로 설정하는 뉘앙스를 가지고 있습니다.
- create : 새 객체를 생성할 때 사용합니다.
- 일관성있게 이름을 지어야합니다. 동일 패키지, 동일 프로젝트 내의 다른 클래스,함수,변수 이름과 어느 정도 일관성있게 작성하는 것이 좋습니다.
- 클래스와 인스턴스는 명사 또는 명사구로 이름을 짓습니다.
- 함수는 동사로 시작, 동사 뒤에는 목적어가 될 명사를 붙여서 서술적으로 표현합니다.
- boolean 을 반환하는 함수 이름은 보통 is로 시작합니다.
- boolean 을 반환하는 함수는 negative 하게 안짓는게 좋습니다. ( if ( !isNotOK( )) 보다는 if (isOk( )) 가 더 가독성이 좋습니다
함수는 짧게 작성
함수를 짧게 작성하는 것이 요즘 추세입니다.
왜그럴까요? 그 이유는 함수가 작을수록 가독성과 유지 보수에 좋기 때문입니다. 또한 버그 발생 가능성도 작아집니다.
함수를 작성할 때 어떤 점을 유의하는게 좋은지 알아보겠습니다.
- 함수 이름이 갖는 추상화 수준에서 단 한가지 역할을 수행하도록 작성하세요.
- 최대한 입력 형식에 대해서 엄격하게 제한을 두고 시작하세요.
- 중괄호 중첩은 최대한 피하세요. 가급적 메소드당 들여쓰기 깊이가 한 단계가 넘지 않게 하는것이 좋습니다.
- 매개 변수의 갯수는 적을수록 좋습니다.
- boolean 타입 인자를 받아서 if 등으로 로직을 분기시키는 함수는 책임이 많아지기 때문에 좋은 함수가 아닙니다.
- 함수의 매개변수에 대해서 유효성 검사를 철저하게 하는것이 좋습니다.
- 보안을 위해서 방어적으로 프로그래밍 하는 것이 좋습니다.
- 코드는 위에서 아래로 자연스럽게 읽히는것이 좋습니다. 하지만 유연성을 유지해야겠죠?
예외
- 예외 상황이 발생했다면 상황을 복구하거나 적절하게 처리해야합니다.
- 가급적 표준 예외를 사용하는 것이 바람직하지만 예외를 새로 만들어서 던지는 것도 좋습니다.
- 예외는 예외 상황에서만 사용해야합니다.
- 예외는 예외 상항 파악에 필요한 실패에 관련된 메세지를 담아야합니다.
- 예외 발생 이전과 예외 발생 이후에 어플리케이션의 상태에 그 어떤 변화가 있으면 안됩니다.
- 예외 클래스의 이름을 지을때는 가급적 Exception 으로 끝나도록 짓습니다.
- 애초에 예외가 일어나지 않게 null값 체크 등 꼼꼼하게 검사하는 것을 우선시 여겨야합니다.
기타
- if 절 안의 코드는 한줄만 작성하는 것이 좋습니다.
- 가급적이면 이중 for문이나 이중 if문을 피하는 것이 좋습니다.
- null을 반호나하는 함수는 만들지 않는것이 좋습니다.
- 최대한 else 를 줄여서 사용하는 것이 좋습니다.
- 카테고리성 데이터 ( 예를 들면 게시판 타입 등등) 는 Enum 을 활용하는것이 좋습니다.
- tab키를 활용하여 들여쓰기합니다.