Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Java 컨벤션에 대해서 알아보자 #25

Open
KIMSEI1124 opened this issue Oct 17, 2023 · 1 comment
Open

Java 컨벤션에 대해서 알아보자 #25

KIMSEI1124 opened this issue Oct 17, 2023 · 1 comment
Assignees
Labels
ch24 about chapter24 🎊week5

Comments

@KIMSEI1124
Copy link
Contributor

KIMSEI1124 commented Oct 17, 2023

👍 문제

Java의 컨벤션이 무엇이 있는지 알아봅니다.
그리고 어떠한 규칙들이 있는지 적어주면 좋을 것 같아요!

✈️ 선정 배경

24장에서 "기본적인 애플리케이션 코딩은 잘 되어 있는가?"중 "명명 규칙을 잘 지켰는가?"가 있습니다.
현재 싸피에서 교육을 받고 있는데 강의에서도 그렇고 같은 동기들을 봐도 재대로 명명 규칙을 사용하지 않는 것 같습니다.
그래서 우리라도 재대로 알고 사용해보자는 의도로 문제를 선정하게 되었습니다!

📺 관련 챕터 및 레퍼런스

ch24. 애플리케이션에서 점검해야 할 대상들

🐳 비고

@KIMSEI1124 KIMSEI1124 added 🎊week5 ch24 about chapter24 labels Oct 17, 2023
@KIMSEI1124 KIMSEI1124 changed the title Java 컨벤션?! Java 컨벤션에 대해서 알아보자 Oct 17, 2023
@kgh2120 kgh2120 self-assigned this Oct 17, 2023
@kgh2120
Copy link
Member

kgh2120 commented Oct 19, 2023

들어가며

프로그래밍을 배우겠다고 처음으로 책을 피고 나면, 빠르게 코드를 어떻게 작성하는 지를 배웠던 것 같다. 내가 배웠던 Java의 경우 "클래스의 이름은 대문자로 시작하고, 변수, 함수의 이름은 소문자로 시작하고..." 이런 식의 이야기를 많이 들었다. "나는 빨리 프로그래밍 배우고 싶은데 왜 이런걸 알려줘!" 라는 생각이 들었던 사람들이 많을 텐데 왜 코드를 작성하는 방법을 배우는지, 그리고 우리가 주로 사용하는 Java에서 반드시 알아야 할(모르면 총 맞는) 컨벤션들에 대해서 알아보자.

코드 컨벤션

Convention이라는 단어를 사전에 검색하면 다음과 같이 나온다.

Convention. N 1. 관습 2. 대회 3. 조약
- Naver 사전

프로그래밍에서 사용하는 Convention이라는 말은 '관습'에 가깝다고 생각한다. 사실 Class의 시작을 대문자로 써야 하는 이유는 어디에도 없으니까..

보통은 프로그래밍에서 이 Convention은 코드를 작성할 때 적용되기 때문에 Code Convention이라 부른다. 한글로 말하면 코드 작성 규칙 정도가 될 것 같다.

그렇다면 왜 코드 작성 규칙을 지켜야 할까?

이에 대한 답은 저명한 기업인 OracleNaver에서 작성한 글을 인용하는 것으로 답하겠다.

Code conventions are important to programmers for a number of reasons:

  • 80% of the lifetime cost of a piece of software goes to maintenance.
  • Hardly any software is maintained for its whole life by the original author.
  • Code conventions improve the readability of the software, allowing engineers to understand new code more quickly and thoroughly.
  • If you ship your source code as a product, you need to make sure it is as well packaged and clean as any other product you create.
    - Oracle

파파고 선생님의 해석으로는 다음과 같은 뜻이라고 하신다.

코드 규약은 프로그래머들에게 다음과 같은 여러 가지 이유로 중요합니다:

  • 소프트웨어 한 개의 평생 비용의 80%가 유지 보수에 사용됩니다.
  • 원작자에 의해 평생 유지되는 소프트웨어는 거의 없습니다.
  • 코드 규약은 소프트웨어의 가독성을 향상시켜 엔지니어가 새로운 코드를 보다 빠르고 철저하게 이해할 수 있도록 해줍니다.
  • 소스 코드를 제품으로 발송하는 경우에는 다른 제품과 마찬가지로 포장이 잘 되어 있고 깨끗한지 확인해야 합니다.

정리하자면 내가 만든 소프트웨어(코드)는 오랫동안 유지 보수가 되어야 하는데, 내가 평생 유지 보수할 일은 거의 없다. 그러니까 다른 사람이 잘 읽고, 해석할 수 있도록 코드를 작성해야 한다는 것이다.

그 다음은 Naver에서 작성한 글의 내용이다.

코딩 컨벤션은 읽고, 관리하기 쉬운 코드를 작성하기 위한 일종의 코딩 스타일 규약이다. (...) 개발자 간 통일된 규약이 없다면 코드의 의도를 파악하거나 오류를 찾기 어렵다. 코딩 컨벤션을 준수하면 가독성이 좋아지고, 성능에 영향을 주거나 오류를 발생시키는 잠재적 위험 요소를 줄여준다. 특히 규모가 큰 프로젝트일수록 유지보수 비용을 줄이는 데 도움이 된다. - Naver

위의 내용에선 조금 더 직관적으로 표현해주었다. 개발자끼리 '어떤 방식으로 코드를 짜자!'는 규칙을 정하면 코드를 작성할 때 고민을 줄일 수 있을 것이고, 마찬가지로 코드를 해석하는데도 쉬울 것이다.

이 상황을 조금이라도 피할 수 있을지도..?

정리하자면 Code Convention은 코드를 작성하는 일관적인 규칙이다. 이 규칙으로 인해 개발자는 코드를 규칙에 맞게 작성하고, 규칙에 따라서 해석할 수 있다. 그럼 더 쉽게 코드를 이해할 수 있고, 이는 유지보수성이 상승한다고 할 수 있다.

Code Convention이 무엇인지와 필요성에 대해서 알아보았으니 Java에는 어떤 대표적인 Convention이 있을지 알아보자

Java Convention 정리

Java에는 굉장히 많은 Convention이 있고, 이 것들에 대해선 나도 전부를 알지 못한다. 관련한 Docs를 읽으면서 새롭게 배운 사실들도 있었지만, 이번에는 이것만은 절대 넘어갈 수 없는 케이스 몇 가지와 최근에 자주 본 케이스들에 대해서 정리하겠다.

이것만은 제발 피하자!

다음 주어지는 케이스들은 나는 개인적으로 아래 짤과 같은 경우라고 생각한다.

Class와 Interface의 이름엔 대문자로 시작하자.

예시

public class MemberServiceImpl{}
public interface MemberService{}

Bad Case

public class memberServiceImpl{} // BAD! 첫 글자는 대문자!
public interface Memberservice{} // BAD! 구분자도 대문자!

패키지 이름은 소문자로 구성

예시

import java.util.Calander; // good

Bad Case

import COM.SSAFY.BOARD.BoardDto; // BAD! 대문자 X
import com.ssafy.application-service.MemberService; // BAD! - X

메서드 이름에 소문자 카멜표기법 적용

예시

public static void main(String[]args){}

BAD CASE

public void SetMember(){} // BAD! 첫 글자는 소문자!
public void getmember(){} // BAD! 구분자는 대문자!

상수는 대문자와 언더스코어로 구성

예시

private static final String EXAMPLE_CODE = "hello";
private static final int MOD = 1_000_000_007;

Bad Case

private static final String ExampleCode = "hello"; // Bad! 구분자로 _를 입력해야 함
private static final int mod = 1_000_000_007; // Bad! 전체를 대문자로 작성해야 함

변수에 소문자 카멜표기법 적용

예시

String name = "Kim";
int age = 20;
MemberDto memberDto = null;

Bad Case

String Name = "Kang"; // BAD! 첫 글자는 소문자 사용!
MemberDto memberdto = null; // Bad! 구분자는 대문자 사용!

나는 굉장히 관대한 개발자니까 이정도만 하고 넘어가겠다.

자주 접한 오류

세종대왕 컨벤션

예시

public class 좌표{
    int 엑스좌표;
    int 와이좌표;
}

Good Case(식별자에는 영문/숫자/언더스코어만 허용해야 한다.)

public class Coordinate{
    int x;
    int y;
}

한 줄에 여러 문장 쓰기

예시

int min = Integer.MAX_VALUE; int max = Integer.MIN_VALUE;

Good Case (한 줄에는 한 문장만 사용한다)

int min = Integer.MAX_VALUE; 
int max = Integer.MIN_VALUE;

하나의 선언문에 여러 변수 넣기

예시

int min, max;

Good Case (하나의 선언문에는 하나의 변수만)

int min; 
int max;

배열에서 대괄호를 변수 뒤에 선언

예시

String commands[];

Good Case (배열에서 대괄호는 타입 뒤에 선언)

String[] commands;

한 줄로 끝나는 조건/반복문에 중괄호 사용 X

예시

if(true)
	System.out.println("hello");
else
	System.out.println("bye");
    
while(true)
	System.out.println("hello world?");

Good Case (조건/반복문에 중괄호 필수 사용)

if(true) {
	System.out.println("hello");
} else {
	System.out.println("bye");
}
while(true) {
	System.out.println("hello world?");
}

마치며

사실 위에서 작성한 케이스정도만 지켜준다면 목숨이 위험한 경우는 없을 것이다. 그래도 이건 내가 관대한 개발자니까 그렇지, 예민한 누군가에겐 이 또한 킬각일지도 모른다.

그렇다면 이 험난한 개발세상에서 살아남기 위해선 이 것들을 다 외워야 하나??

아니다.

같은 코드조차 두 번 쓰기 귀찮아하는 훌륭한 개발자라면, 당연하게 도구를 이용해서 컨벤션을 적용시킬 수 있다!

어떻게 하는지는 링크를 참고해서 적용하자. 적용하는 법까지 요구하는 것은 물에 빠진 사람 구해줬더니 보따리 내놓으라는 격이다.

다들 컨벤션을 잘 지키며 안전하게 코딩하자.

PS. 혹시라도 위에 예시 코드 중에서 컨벤션에 맞지 않는 경우가 있다면 이는 컨벤션 자동 적용의 중요성을 알리기 위한 이스터에그이다.

REF

네이버 캠퍼스 핵데이 Java 코딩 컨벤션
구글 자바 스타일 가이드
Oracle code conventions
ToastUI Coding Convention

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ch24 about chapter24 🎊week5
Projects
None yet
Development

No branches or pull requests

2 participants