우아한테크코스 1차에 합격했다! 이제 3주 동안의 프리코스를 거칠 텐데, 그전에 자바 코드 컨벤션을 공부해보도록 한다. 몸이 너무 안 좋아서 글을 읽는 게 도저히 안 되더라ㅜㅜㅜ 이미 잘 정리해주신 선배님들의 글을 참조하면서, 블로그에 포스팅하며 공부하기로 해본다.
미리 얘기하지만, 거의 베끼다시피 한 포스팅이다. 개인 공부를 위해 남긴다!
참조한 포스팅 : myeonguni.tistory.com/1596
<자바 파일 구조>
- 파일은 주석을 통해 다른 구역으로 나누어진다.
- 2,000 라인을 넘기는 파일은 피하자.
<자바 소스 파일>
- 각각의 자바 소스 파일은 public 클래스/인터페이스를 가짐
- public 클래스는 파일에서 첫 번째 클래스/인터페이스 여야 한다.
- 자바 소스 파일은 다음과 같은 순서를 가진다.
* 시작 주석
* Package문과 Import문
* Class와 Interface 선언
/*
* 클래스 이름
*
* 버전 정보
*
* 날짜
*
* 저작권 주의
*/
package java.awt;
import java.awt.peer.CanvasPeer;
<들여 쓰기>
- 4개의 space를 들여 쓰기 단위로 사용한다.
- 8개의 space를 Tab으로 설정하자.
<한 줄의 길이>
- 한 줄에 80자 이상 쓰지 말 것!
<줄 나누기>
- 한 줄에 하나의 식이 들어갈 수 없다면, 다음 원칙을 통해 두 줄로 나눈다.
* 콤마 후에 두 줄로 나누기
* 연산자 앞에서 두 줄로 나누기
* 레벨이 높은 원칙에 따라 두 줄로 나누기
* 앞줄과 같은 레벨의 식이 시작되는 새로운 줄은 앞줄과 들여 쓰기를 일치시킨다.
* 코드가 오른쪽 끝을 넘어간다면, 8개의 빈칸을 사용해 들여 쓴다.
//연습하기 (출처:https://myeonguni.tistory.com/1596)
private static synchronized hrokingLongMethodName(int anArg,
Object anotherArg, String yetAnotherArg,
Object andStillAnother) {
...
}
* 메소드 본문과 구분하기 위한 들여 쓰기는 8칸을 원칙으로 한다.
//연습하기 (출처: https://myeonguni.tistory.com/1596)
if((condition1 && condition2) || (condition3 && condition4)
||!(condition5 && condition6)) {
doSomething();
}
<주석>
- 자바 프로그램은 2가지 종류의 주석을 갖는다.
- 주석은 프로그램을 읽는 것과 이해하는 것에 관계된 정보만을 포함해야 한다.
구현 주석
* /*...*/ 와 // 에 의해 경계가 정해지는 C++과 동일
* 각각의 구현에 대한 추가적인 설명이 필요할 때 쓰인다.
문서화 주석
* /**...*/에 의해 경계가 결정됨.
* 소스 코드가 없는 개발자들도 읽고 이해할 수 있게, 코드의 specification을 포함한다.
<구현 주석>
- 구현 주석은 4가지로 나눌 수 있다.
블록 주석
* 파일, 메서드, 자료구조, 알고리즘에 대한 설명 제공할 때 사용한다.
* 주석이 설명하는 코드와 같은 단위로 들여 쓸 것!
/*
* 여기에 블록 주석을 작성하기
*/
한 줄 주석
* 주석이 충분히 짧다면 한 줄에 넣자.
* 이 경우에도 주석이 설명하는 코드와 같은 단위로 들여쓰자.
if (condition){
/* 이 조건을 만족하면 실행된다. */
...
}
꼬리 주석
* 아주 짧은 주석이 필요하다면 코드와 같은 줄에 넣자
* 대신 멀찌감치 넣어 실제 코드와 구분을 꼭 시켜주자.
if (a==2) {
return TRUE; /* 특별한 경우 */
} else {
return FALSE; /* 그 외의 경우 */
}
줄 끝 주석
* //는 한 줄 모두를 주석 처리하거나, 한 줄의 일부분을 주석 처리해야 할 때 사용 가능
* 어떤 코드의 일부분을 주석 처리할 때, 여러 줄에 걸쳐서 사용하는 경우도 있다.
//출처: https://myeonguni.tistory.com/1596
if (foo > 1) {
// double-flip 실행한다.
...
}
else {
return false; //프로그램을 종료하는 flag
}
//if (bar > 1) {
//
// // double-flip 실행한다.
// ....
//}
//else {
// return false;
//}
<문서화 주석>
- 문서화 주석은 다음 5가지를 설명한다.
* 자바 클래스
* 인터페이스
* 생성자
* 메서드
* 필드
- 각각의 문서화 주석은 /**...*/ 안으로 들어간다.
- 문서화 주석은 선언 바로 전에 나와야 한다.
/**
* Example 클래스는 ...
*/
public class Example { ...
<한 줄 당 선언문의 수>
- 한 줄에 하나의 선언문을 쓰도록 한다.
- 한 줄에 변수 하나를 할당해 주도록 한다.
<클래스와 인터페이스의 선언>
- 자바 클래스와 인터페이스 선언 시, 다음 3가지 원칙을 따르도록 한다.
* 메서드 이름과 그 메서드의 파라미터 리스트의 시작인 "(" 사이에 공백 두지 않는다.
* 여는 중괄호 "{"는 클래스/인터페이스/메서드 선언과 동일한 줄의 끝에 사용한다.
* 닫는 중괄호 "}"는 여는 문장의 들여 쓰기 만큼 들였어 새로운 줄에 작성한다.
* 메서드들을 구분하기 위해서 각 메서드들 사이에는 한 줄을 비우도록 한다.
//출처: https://myeonguni.tistory.com/1596
class Sample extends Object {
int ivar1;
int ivar2;
Sample(int i, int j) {
ivar1 = i;
ivar2 = j;
}
int emptyMethod() {}
....
}
<복합문>
- 복합문은 중괄호 "{ statements }"로 둘러싸인 문들의 리스트를 포함하는 문이다. 다음과 같은 원칙을 따른다.
* 둘러싸인 문들은 복합문보다 한 단계 더 들여 쓰기를 한다.
* 여는 중괄호 "{"는 복합문을 시작하는 줄의 마지막에 위치해야 한다.
* 닫는 중괄호 "}"는 새로운 줄에 써야 하며, 복합문 시작 줄 만큼 들여 쓰기를 해야 한다.
* if-else, for 문 같은 제어 구조의 일부분으로 사용할 때에도, 단 하나의 문일 경우에도 중괄호를 사용한다.
<if-else문>
- if-else문은 다음과 같이 사용한다.
if (condition) {
statements;
} else if (condition) {
statements;
} else {
statements;
}
<for문>
- for문은 다음과 같이 사용한다.
for (initialization; condition; update) {
statements;
}
<while문, do-while문>
- while문, do-while문은 다음과 같이 사용한다.
while (condition) {
statements;
}
do {
statements;
} while (condition);
<switch문>
- switch문은 다음과 같이 사용한다.
- 모든 switch문은 default case를 포함하도록 한다.
switch (condition) {
case ABC:
statements;
case DEF:
statements;
break;
case XYZ:
statements;
break;
default:
statements;
break;
}
<try-catch문>
- try-catch문은 다음과 같이 사용한다.
- try블록이 성공적으로 완료되든, 중간에 에러가 발생하든 상관없이 실행되어야 할 부분은 finally로 작성
try {
statements;
} catch (ExceptionClass e) {
statements;
} finally {
statements;
}
<한 줄 띄우기>
- 한 줄 띄우고 코드 작성해서 코드의 가독성을 높인다.
- 다음의 경우 한 줄 띄도록 한다.
* 메서드들 사이에서
* 메서드 안의 지역 변수와 그 메서드의 첫 문장 사이에서
* 블록 주석 또는 한 줄 주석 이전에
* 가독성을 향상하기 위한 메서드 내부의 논리적인 섹션들 사이에
- 다음의 경우 두 줄 띄도록 한다.
* 소스 파일의 섹션들 사이에서
* 클래스와 인터페이스 정의 사이에서
<명명 규칙>
- 프로그램을 더 읽기 쉽게 만들어준다. 이름으로 어떤 기능을 하는지 정보를 얻게 해 준다.
* Packages
* Classes
* Interfaces
* Methods
* Variables
* Constants
<Packages 명명 규칙>
- 아스키 소문자로 쓴다.
- 조직 내부의 명명 규칙을 따른다. (디렉토리 구조에서 디렉토리 이름으로도 사용됨)
- ex) com.sun.eng / com.apple.quicktime.v2
<Classes 명명 규칙>
- 명사여야 한다. 첫 글자는 대문자로!
- 간단하고 명시적으로 작성한다.
- 약어는 피하도록 한다.
- ex) class Raster;
<Interfaces 명명 규칙>
- 인터페이스 이름도 클래스와 같은 규칙을 적용한다.
- ex) interface RasterDelegate;
<Methods 명명 규칙>
- 동사여야 한다. 첫 글자는 소문자로!
- 복합 단어의 경우, 첫 단어는 소문자로 시작하고 그 이후 단어의 첫 문자는 대문자를 쓴다.
- ex) run(); / runFast();
<Variables 명명 규칙>
- 변수 이름의 첫 문자는 소문자로, 각각 내부 단어의 첫 문자는 대문자로 한다.
- 짧지만 의미가 있어야 한다.
- 임시 변수의 경우 integer: i, j, k, m, n / character: c, d, e를 사용한다.
- ex) int i; / char c; / float myWidth;
<Constant 명명 규칙>
- 클래스 상수로 선언된 변수들과 ANSI 상수들의 이름은 모두 대문자로 쓰고, 각각의 단어는 "_"로 분리한다.
- ex) static final int MIN_WIDTH = 4;
<그 외 신경 쓸 것들>
- 괄호: 복합 연산자에서는 자유롭게 괄호를 사용하자
- 반환 값: 프로그램의 구조와 목적을 일치시키자
//올바른 괄호 사용법
if ((a == b) && (c == d))
//올바르지 않은 반환값 사용법
if (booleanExpression) {
return true;
} else {
return false;
}
//올바른 반환값 사용법
return booleanExpression;
<코드 예제>
- public class를 가지는 소스 파일을 어떻게 수정하는지 보여준다.
- 출처: myeonguni.tistory.com/1596
/*
* @{#}CodeConvention.java 0.82 2020/11/24
*
* [출처: https://myeonguni.tistory.com/1596]
* Copyright (c) 2016 Myeongun Ryu.
* ComputerScience, ProgrammingLanguage, Java, Seould, KOREA
* All rights reserved.
*
* This software is the confidential and proprietary information of Myeongun
* Ryu ("Confidential Information"). You shall not
* disclose such Confidential Information and shall use it only in
* accordance with the terms of the license agreement you entered into
* with Myeongun Ryu.
*/
package myeonguni.codeconvetion;
import myeonguni.*;
/**
* 클래스에 대한 설명을 여기에 작성한다.
*
* @version 1.00 2016년 11월 17일
* @author 류명운
*/
public class CodeConvetion extends Convention {
/* 클래스의 구현 주석을 여기에 작성한다. */
/** 클래스 변수 classVar1에 대한 설명을 여기에 작성한다. (문서 주석) */
public static int classVar1;
/**
* 클래스 변수 classVar2에 대한 설명이 (문서 주석이)
* 한 줄 이상일 경우 이렇게 작성한다. (접근 제어자가 private일 경우 나오지 않는다.)
*/
private static Object classVar2;
/** 인스턴스 변수 instanceVar1에 대한 설명을 여기에 작성한다. (문서 주석) */
public Object instanceVar1;
/** 인스턴스 변수 instanceVar2에 대한 설명을 여기에 작성한다. (문서 주석) */
protected int instanceVar2;
/** 인스턴스 변수 instanceVar3에 대한 설명을 여기에 작성한다. (문서 주석) 접근 제어자가 private일 경우 나오지는 않음. */
private Object[] instanceVar3;
/**
* ... 생성자 CodeConvetion()에 대한 설명을 여기에 작성한다. (문서 주석) ...
*/
public CodeConvention() {
// ... 여기에 실제 코드를 작성한다. ...
}
/**
* ... 메서드 doSomething()에 대한 설명을 여기에 작성한다. (문서 주석)...
*/
public void doSomething() {
// ... 여기에 실제 코드를 작성한다. ...
}
/**
* ... 메서드 doSomethingElse()에 대한 설명을 여기에 작성한다. (문서 주석) ...
* @param someParam 파라미터에 대한 설명
* @return String 리턴값에 대한 설명
* @exception exception 예외사항에 대한 설명
*/
public String doSomethingElse(Object someParam) {
// ... 여기에 설계 코드를 작성한다. ...
}
}
자바로 프로그래밍 경험이 거의 없다시피 한지라 걱정이 되지만, 열심히 해서 좋은 성과 내보리라 다짐한다.
우아한테크코스 한 번 가보도록 하겠습니다. 나 자신 파이팅 🤞
'프로그래밍 언어 > Java' 카테고리의 다른 글
저는 GC가 처음이라니까요? (0) | 2021.10.02 |
---|---|
저는 어노테이션이 처음이라니까요? (2) | 2021.06.11 |
Reflection API (4) | 2021.06.09 |
저는 JVM이 처음이라니까요? (6) | 2021.05.28 |
HashMap/HashSet의 원리 (4) | 2021.03.13 |
댓글