코드 컨벤션

Viva의 놀이터·2021년 8월 3일
6

코드 컨벤션의 중요성

혼자 개발을 하는 상황이라면 코드 컨벤션의 필요성이 적다고 느껴질 수도 있습니다. 본인이 작성한 코드이기에 코드를 쉽게 이해하고 해당 메소드나 변수가 어떤 것을 의미하는지 알고있기 때문입니다. 하지만 시간이 지난 상태에서 해당 코드를 다시 본다고하면 본인이 작성한 코드일지라도 이해하는데 시간이 걸립니다.

만약 해당 코드를 다른 사람이 이해하고 활용해야 하는 상황이라면 시간은 더욱 오래걸릴 것입니다. 여러명의 개발자가 하나의 프로젝트에 투입이 되어서 작업을 진행하는 경우 각자의 스타일로 코드를 작성한다고 하면 같은 프로젝트 안에서 다른 개발자의 코드를 이해하고 이해하는데 시간이 소요될것이고 기능을 오해하는 경우가 생길 것입니다. 사전에 코드 스타일을 통일함으로써 이러한 문제들을 해결 할 수 있습니다. 이런 코드 스타일(코딩 규칙)의 통일을 코드 컨벤션이라하고 자바에서는 코드 컨벤션의 가이드를 제공하고 있습니다. 필자도 처음 프로젝트에 투입되고 프로젝트의 구조를 이해하기가 수월했던 이유는 코드 컨벤션에 따라 작성된 코드이기 때문이였습니다.

코드 컨벤션 규칙

Java에서 제공한 공식 문서의 번역본은
블로그 를 참고하였습니다.

해당 블로그를 읽고 공감이되고 도움이 되었던 구조만 요약해서 정리해봤습니다.

  1. public 과 private가 한 파일안에 작성될 경우 첫 번째 클래스 혹은 인터페이스는 public이 먼저 위치해야한다.

  2. 하나의 파일에 여러개의 다른 구조(기능, 등등)가 들어갈 경우 각각의 구조는 공백이나 주석을 통해서 구역이 구분되야 한다. 또한 2000줄이 넘어가면 파일을 분리하는것이 좋다

  3. 한 줄에 80자 이상 쓰는것은 가독성이 저하됨으로 2줄로 나눠야 한다. 나누는 기준은 다음과 같다.

    1. 콤마 후에 두 줄로 나눈다.
    2. 연산자 앞에서 두 줄로 나눈다.
    3. 낮은 원칙 보다는 레벨이 높은 원칙에 따라 두 줄로 나눈다.
    4. 앞줄과 같은 레벨의 식이 시작되는 새로운 줄에서 나누고 앞줄과 들여쓰기를 일치시킨다.
  4. 선언은 한 줄당 하나의 선언문을 사용한다.

  5. K&R 스타일로 중괄호 선언한다. 줄 마지막에 '{'를 사용하고 블럭을 종료할 때는 새줄을 삽입하고 '}'를 사용하여 종료한다.
    ex)

    if (xxxx){
        return xxx;
    }
    • else,catch,finally, while등은 닫는 '}' 뒤에 사용한다.
      ex)
    if (xxxx){
        return xxx;
    }else{
        return xxx;
    }

코드 컨벤션의 궁극적인 목표

결론적으로 코드 컨벤션의 궁극적인 목표는 누구나 쉽게 코드를 이해하고 사용할수 있게하기위함 이라고 생각했습니다. 코드 컨벤션을 공부하면서 다음과 같은 글귀를 알게되어서 공유하고자 합니다.

  • 이 코드가 무슨 코드인지는 오직 신과 나만이 안다 그리고 이제는 오직 신만이 아신다.

  • 컴퓨터 프로그램의 구조와 해석 중 ' Programs should be written for people to read, and only incidectally for machine to execute' 프로그램은 사람들에게 읽히기 위한 목적으로 만들어져야 하고, 우현히 컴퓨터가 실행할 수 있다면 더욱 좋다.

본인이 작성한 코드는 반드시 다른 사람이 읽고 사용하기 때문에 좋은 코드는 글 처럼 누구나 쉽게 읽을 수 있는 코드입니다.

쉽게 읽히는 코드를 작성하기 위해서는 알맞은 문법에 맞게 변수나 메서드 명을 설정해 줘야합니다.

이를 네이밍 컨벤션이라고 하는데 각각의 회사 마다 디테일한 부분은 다르기 때문에 이번에는 네이버 기준으로 네이밍 컨벤션에 대해서 조사해 봤습니다.

변수명 작성 방법

  1. 클래스나 메소드명은 파스칼 표기법을 따른다.(모든 단어에서 첫 문자는 대문자 나머지는 소문자)
    ex) HelloWordl, NameViva

  2. 변수, 파라미터 등은 카멜 표기법을 따른다.
    ex) helloWordl, nameViva

  3. 메서드 이름은 동사/전치사로 시작한다.
    ex) countNumber, withUserId

  4. 상수는 대문자로 작성하고 복합어인 경우 '_'를 사용하여 단어를 구분한다.
    ex) public final int SPECIAL_NUMBER = 1;

좋은 변수명은 코드를 글처럼 읽게 만들어준다.

ex) item.insertPurchaseList(userChoice, amount)

위 코드는 실제로 코드를 분석하지 않아도 어떤 동작을 하는지 알 수 있게 설계되어있다. 모든 코드가 다음과 같이 작성되어 있다면 코드의 가독성은 비약적으로 올라갈것이다. 하지만 실제로 계발을 하다보면 항상 위와 같이 이상적으로 변수명이 들어맞지 않는다. 따라서 다음과 같은 방법을 사용하여 최대한 글 처럼 작성 할 수 있습니다.

  1. 명사는 주어(클래스), 목적어(매개변수,변수)로 사용됨을 인식하고 변수명을 정해야합니다.

  2. 동사(매서드)는 행위를 나타냅니다. 동사에는 3가지 형태가 존재합니다. 동사원형, 과거형, 과거분사형

  • 동사 원형을 사용하는 경우는 함수의 메서드를 첫 단어로 사용한다.(동사와 명사가 하나에 복합어로 사용될 때는 동사가 앞에 나옵니다.)

  • 과겨형은 없다.

  • 과거분사는 형용사라고 생각하고 사용하자, 수동의 의미 , boolean 변수에 사용됩니다.

  1. 단수와 복수를 구별해서 사용하자

일반적으로 리스트는 복수, 리스트의 아이템은 단수로 사용한다. 리스트는 가급적 복수형으로 작성합니다.

  1. 중복을 제거하자

문장을 읽을 때 한 문장안에 단어가 반복되면 이질감을 느끼게된다. 클래스 내부함수는 클래스에 사용된 단어는 가급적 빼고 작성합니다.
ex)

good

class User{
    id
    public ischeck
}

bad

class User{
    id
    public isUserIdCheck
}

읽기 좋은 코드를 작성하기 위한 마음가짐

남이 나의 코드를 읽는 상황을 항상 고려하자

참고자료

https://google.github.io/styleguide/javaguide.html 구글 자바 컨벤션 가이드
https://naver.github.io/hackday-conventions-java/ 네이버 자바 컨벤션 가이드
https://www.youtube.com/watch?v=rbSnkiqPnJI&t=1691s

profile
역사를 잊은 기술에겐 미래가 없다

0개의 댓글