Transcript 자바_코딩가이드
자바TM 및 JSPTM 코딩 표준
1
Overview
자바 코딩 표준
패키지
클래스
메소드
상수
클래스 변수
인스턴스 변수
지역 변수
들여쓰기
선언문
제어문
공백
주석문
피해야 하는 사항들과 추천하는 사항
들
JSP 코딩 표준
파일 이름과 위치
파일의 구조
공백
참고사항
2
자바 코딩 표준
3
자바 코딩 표준
클래스 명명 규칙
일반적인 클래스 명은 각 단어의 첫 글자는 대문자 나머지는 소문자로 지정한
다.
영.숫자를 제외한 문자는 사용하지 않는다.
광범위하게 사용되는 축약어를 제외하고는 되도록 축약어를 사용하지 않는다.
부득이하게 사용해야 할 경우 축약어는 모두 대문자로 표현한다.
일반적으로 클래스 명은 명사들의 조합 혹은 형용사 + 명사구로 지정한다.
올바른
클래스명의 예
class LoginAction;
class HTTPRequest; : 축약어는 모두 대문자로 사용(HTTP는 범용적으로 사용되는 축약어)
abstract class AbstractUserInformation;
잘못된
클래스명의 :예정확하게
class GSL;
class my_action;
class 사용자;
class DoIt;
약어의 뜻을 유추할 수 없음
: 클래스 명이 소문자로 시작되어 클래스 명 식별이 쉽지 않고,
밑줄을 사용하여 자바 API와 일관성이 떨어짐
: 한글을 클래스 명으로 사용할 경우 일부 OS에서 클래스를 읽을 수 없음
: 클래스는 하나의 엔티티(entity)를 뜻하므로, 어떠한 행동을 기술하는
동사를 사용할 경우, 클래스의 정확한 용도를 유추하기가 어려움
4
자바 코딩 표준
메소드 명명 규칙
메소드 명은 소문자로 시작하고, 각 단어의 시작은 대문자로 지정한다.
메소드는 동사 + 명사의 형태로 지정하는 것이 일반적이다.
Customer getCustomer();
void drawCircle(int x, int y, int radius);
클래스 명과 마찬가지로 범용적으로 통하는 경우를 제외하고는 되도록 축약어
를 사용하지 않는 것을 원칙으로 하며, 부득이하게 사용해야 할 경우 축약어는
모두 대문자로 지정한다.
HTTPHeader getHTTPHeader();
void setMessageID(MessageID msgID);
각 메소드는 하나의 단위 작업 기준별로 작성한다.
메소드의 접근 제한자는 외부에 공개할 메소드가 아닌 이상 public으로 지정하
지 않는다.
클래스의 프로퍼티에 대한 접근 메소드는 get프로퍼티명(), set프로퍼티명()으
로 명명하는 것이 일반적이다. 단, boolean 형의 프로퍼티의 경우 get프로퍼티
명() 대신 is프로퍼티명()를 권장 한다.
5
자바 코딩 표준
상수의 선언
자바에서는 C++ 언어와 달리 const 와 같은 상수선언을 위한 키워드가 존재하지 않는다.
자바에서의 상수는 static final 수식자(modifier)를 갖는 클래스 변수를 의미한다.
상수는 클래스 선언문 다음에 바로 기술한다.
상수의 선언 순서는 public, protected, (default), private 순으로 기술한다.
상수는 전부 대문자로만 기술하며, 각 단어의 사이는 밑줄문자로 구분한다.
public class ConstantExample {
public static final int MAX_VALUE = 10;
public static final int MIN_VALUE = 20;
protected static final int SPAN_STRING = 1;
protected static final int CUT_OFF_STRING = 2;
static final int CENTER = 0;
static final int LEFT = 1;
private static final int ENTERED = 1;
private static int sInitialScope = 20;
protected String fName = "Example Applet";
}
6
자바 코딩 표준
클래스 변수의 선언
클래스 변수는 인스턴스 범위가 아닌 클래스 범위를 가진 변수를 말한다. 즉, C++ 언어
등의 전역변수와 동일하다.
자바에서 클래스 변수란 static 수식자를 가진 변수를 말한다.
클래스 변수는 상수 선언 바로 아래에 기술한다.
클래스 변수도 상수와 동일하게 public, protected, (default), private 순으로 기술한다.
상수 선언부와 클래스 변수 선언부 사이에는 구분을 위하여 비어있는 한 줄을 넣는다.
클래스 변수는 상수나 인스턴스 변수, 지역 변수등과 구분하기 위해 prefix로 소문자 s로
시작하며, 각 단어는 첫 글자를 대문자로 나머지는 소문자로 사용한다.
클래스 변수는 쓰레드(thread)에 안전하지 않은 경우가 대부분이므로, 되도록 사용하지
않는 것이 좋다.
public class ClassVariableExample {
public static final int MAX_VALUE = 10;
public static final int MIN_VALUE = 20;
public static int sInitialScope = 20;
private static int sInstanceCounter = 0;
}
7
자바 코딩 표준
인스턴스 변수의 선언
인스턴스 변수는 각 인스턴스 내에서 전역적으로 사용되는 변수를 말한다.
인스턴스 변수는 각각의 인스턴스를 구분 짓는 특성 값이므로, 외부에 공개되는 값일 경
우 프로퍼티라고 불리기도 한다.
인스턴스 변수는 public, protected, (default), private 순으로 기술한다.
특별한 경우를 제외하고는 인스턴스 변수는 private로 정의하는 것을 원칙으로 한다.
모든 인스턴스 변수는 지역 변수와 구분하기 위해 소문자 f를 prefix로 붙이고, 각 단어의
첫 글자는 대문자로 나머지는 소문자로 사용한다.
public class Customer {
public static final int MALE = 1;
public static final int FEMALE = 2;
private
private
private
private
String fName = "";
String fAddress = "";
int fAge = 0;
int fGender = MALE;
...
}
8
자바 코딩 표준
인스턴스 변수의 선언(Cont'd)
인스턴스 변수의 명명 규칙을 따르지 않았을 때 발생할 수 있는 문제점의 예시
<오류 케이스>
<오류 케이스 수정 후>
public class Example {
...
private int value;
public class Example {
...
private int value;
public void setValue(int value) {
value = value; // 잘못된 부분
}
...
public void setValue(int value) {
this.value = value;
}
...
}
}
<명명 규칙을 따름으로서 미연에 코딩상 실수를 방지>
public class Example {
...
private int fValue;
public void setValue(int value) {
fValue = value; // 명명 규칙을 따름으로써 코딩상의 실수를 미연에 방지
}
...
}
9
자바 코딩 표준
지역 변수의 선언
자바에서 지역 변수란 메소드 내에서 선언 및 사용되는 변수를 말한다.
지역 변수는 인스턴스 변수와 달리 접근 수식자가 존재하지 않는다.(final은 사
용할 수 있으나 실제 업무 개발 시 사용빈도가 0에 가깝다.)
지역 변수는 기본적인 자바의 명명 규칙(첫 글자는 소문자로 시작하고, 각 단어
의 시작은 대문자로 나머지는 소문자로 한다)을 따른다.
public class Example {
private int fValue;
public Example() {
fValue = 10;
}
public int getCalculatedValue() {
int minValue = 30000;
int maxValue = 20000;
int gap = maxValue - minValue;
int caculatedValue = ((gap - fValue) / 10) + 25;
return caculatedValue;
}
}
10
자바 코딩 표준
들여쓰기 규칙(indentation rule)
기본적으로 한 줄은 80자를 넘기지 않도록 하여, 한 눈에 볼 수 있도록 한다.
단항 연산자를 제외한 모든 연산자는 앞뒤로 한 칸씩 공백 문자를 넣는 것을 원
칙으로 한다.
들여쓰기는 탭 문자(공백 문자 4개만큼의 크기)만을 이용한다. 4칸의 공백 문자
를 사용하는 것은 권장하지 않는다.
한 줄의 길이가 부득이하게 80자를 넘어가게 되면, 다음과 같은 규칙을 기준으
로 둘 이상의 줄로 나누어야 한다.
콤마(,)다음을 나눈다.
public String getArgumentName(String path, String type, int attributes,
boolean securityCheck, int commonRule,
String databaseName);
연산자(+,-,/,*,||,|,&&,&) 앞에서 나눈다.
fMaxValue = getField(CENTER) + getField(LEFT) + getField(RIGHT)
+ getField(UP) + getField(DOWN) + INIT_VALUE;
11
자바 코딩 표준
들여쓰기 규칙(Cont'd)
분리된 줄은 원래 줄보다 최소 두 개의 탭 문자 이상 들여쓰기를 하며, 분리된 세 번
째 줄부터는 두 번째 줄과 동일한 들여쓰기를 하는 것을 원칙으로 한다.
fInitValue = getArgumentName("c:\\temp", "MESSAGE", 4,
getDefaultSecurityPolicy(SecurityPolicy.SYSTEM),
ArgumentList.WRITE, "tisweb/common");
메소드 선언시 매개변수의 개수가 너무 많아 80컬럼을 넘어서게 되면, 기본적으로
원래 줄의 매개변수가 시작하는 위치까지 들여쓰기를 하는 것을 원칙으로 하되, 들여
쓰기의 깊이가 너무 깊어질 경우 두 개의 탭 문자만큼 들여쓰기를 하는 것으로 한다.
void addActionComponent(Component actionComponent, int index, String text
int type, String name, Frame parent) {
// 메소드 Body
}
public static synchronized getClasspathRepository(Repository oldRepository,
Repository newRepository, String classpath) {
// 메소드 Body
}
12
자바 코딩 표준
들여쓰기 규칙(Cont'd)
if 문의 경우 나누어진 줄은 두 개의 탭 문자만큼 들여쓰기를 한다.
if ((useInternalDevice && useCache)
|| (useHardDisk && useMemory)
|| !(useMoniter && useCDROM)) {
formatDisk();
} // 잘못된 예 – if 블록의 몸체와 비교분의 구분이 용이하지 않다.
// 위의 예는 잘못 들여쓰기 된 경우이다. 위의 경우를 다음과 같이 바꾸어야 한다.
if ((useInternalDevice && useCache)
|| (useHardDisk && useMemory)
|| !(useMoniter && useCD_ROM)) {
formatDisk();
} // 올바른 예
중괄호나 소괄호와 같이 묶여있는 부분은 될 수 있으면 나누지 않는다.
위 규칙들이 오히려 가독성을 해칠 경우 나누어진 줄의 들여쓰기는 두 개의 탭 문자
만큼 하는 것으로 한다.
fValue = verticalAlignment - horizontalAlignment + (leftInset - rightInset
+ upInset - downInset) + width; // 잘못된 예
// 위의 예는 잘못 들여쓰기 된 경우이다. 위의 경우는 다음과 같이 바꾸어야 한다.
fValue = verticalAlignment - horizontalAlignment
+ (leftInset - rightInset + upInset - downInset) + width; // 올바른 예
13
자바 코딩 표준
선언문 코딩 표준
변수나 상수의 선언은 각각에 대해서 한 줄씩 사용하며 한 줄에 여러 개의 변수
나 상수를 선언하지 않는다.
모든 변수는 가능하다면 선언된 곳에서 명시적으로 초기화 해 주어야 한다.
각각의 변수는 각각의 용도를 가지는 것을 원칙으로 하며, 절대로 하나의 변수
를 여러 가지 용도로 사용해서는 안 된다.
블록이 다르다고 해서 각 지역 변수로 같은 이름의 변수를 사용해서는 안 된
다.(반복문 등에서 사용되는 임시 변수는 제외)
지역 변수의 이름은 클래스 변수나, 인스턴스 변수의 이름과 동일하게 짓지 않
는다.
메소드 선언 시 메소드의 이름과 소괄호 사이에는 공백을 넣지 않는다.
선언문에서 여는 중괄호({)는 선언문과 같은 줄의 마지막에 위치 하는 것을 원
칙으로 한다.
14
자바 코딩 표준
선언문 코딩 표준(Cont'd)
실제 표준의 적용 예시
class ExampleApplet extends Applet {
private static final int ENTERED = 1;
private static final int EXITED = 2;
// 선언문과 같은 줄에 여는 중괄호 위치
// 각각의 상수는 한 줄씩 위치
public String fName = "Example Applet"; // 각각의 변수는 한 줄씩 위치
protected Label fNameLabel = new Label("이름");
Button fExitButton = new Button("종료");
private long fTimeStamp = 0L;
private long fID, fStartPosition;
// 한 줄에 두 개의 변수를 선언 --> 잘못된 예
public void setName(String name) {
fName = name;
}
}
15
// 메소드 이름과 소괄호 사이에는 공백이 없음
자바 코딩 표준
제어문 코딩 표준
if 문
if (조건) {
// do something...
}
if (조건) {
// do something...
} else {
// do something...
}
if (조건1)
// do
} else if
// do
} else {
// do
}
{
something...
(조건2) {
something...
something...
if 문 안에서 쓰이는 문장이 비록 한 줄이라도 항상 중괄호를 사용해야 한다. 이
는 나중에 해당 부분이 한 줄 이상으로 늘어날 경우 예기치 않게 발생할 수 있는
버그의 가능성을 배제해 준다.
if (maxValue > 100)
fStackOverflow = true; // 잘못된 예 --> 중괄호를 사용 않음
if (maxValue > 100) {
fStackOverflow = true; // 올바른 예
}
16
자바 코딩 표준
제어문 코딩 표준(Cont'd)
for 문
for (초기화; 조건; 갱신) {
// do something...
}
for 문에서 사용하는 초기화 부분이나 조건 부분, 갱신 부분에는 세 개 이상의
변수를 사용하지 않는 것을 원칙으로 한다.
for 문 역시 if 문과 마찬가지 이유로 loop-body가 단 하나의 문장이라도 중괄
호를 항상 사용해야 한다.
while 문, do-while 문
do {
while (조건) {
// do something...
}
// do something...
} while (조건);
while 문, do-while 문 역시 for 문과 마찬가지 이유로 loop-body가 단 하나의
문장이라도 중괄호를 항상 사용해야 한다.
17
자바 코딩 표준
제어문 코딩 표준(Cont'd)
switch-case 문
switch (horizontalAlignment) {
case CENTER:
processHorizontalAlignment(Alignment.CENTER);
// fall through
case LEFT:
processHorizontalAlignment(Alignment.LEFT);
break;
case RIGHT:
processHorizontalAlignment(Alignment.CENTER);
break;
default:
throw new IllegalArgumentException("잘못된 수평 정렬 상태");
break;
}
위의 예시에서 case CENTER 부분과 같이 break 문 없이 다음 case 문(여기에
서는 case LEFT부분)을 실행할 때에는 break 문 없이 지나친다는 것(fall
through)을 반드시 표기해 주어야 한다.
모든 switch 문에는 위와 같이 default 부분을 제일 뒤쪽에 반드시 적어주어야
한다.
18
자바 코딩 표준
제어문 코딩 표준(Cont'd)
case 문과 case 문 사이에는 반드시 한 줄을 띄어 주는 것을 원칙으로 한다.
앞의 default 부분에서는 break 문이 필요하지 않지만, 일관성 측면에서 break
문을 붙여 주도록 한다.
try-catch, try-catch-finally 문
try {
// do something
} catch (Exception e) {
// 예외 처리
}
try {
// do something
} catch (IOException ie) {
// IO예외 처리
} catch (Exception e) {
// 그 외의 예외 처리
}
19
try {
// do something
} catch (IOException ie) {
// IO예외 처리
} catch (Exception e) {
// 그 외의 예외 처리
} finally {
// 이 부분은 항상 실행됨
}
자바 코딩 표준
공백(white space) 문자의 사용
모든 키워드(if, switch, for, while, catch) 다음에 오는 소괄호는 키워드와 한
칸의 공백을 둔다. 이는 키워드와 메소드 간을 구분하기 위해서 이다.(메소드의
경우 소괄호와 메소드 이름을 붙여서 사용)
모든 콤마 다음에는 한 칸의 공백을 둔다.
대입 연산자(=) 양 앞뒤로는 각각 한 칸의 공백을 둔다.
증가 연산자(++)와 감소 연산자(--), 음수를 나타내는 데 사용되는 마이너스(예:
-3)를 제외한 모든 연산자의 양 앞뒤로 각각 한 칸의 공백을 둔다.
20
자바 코딩 표준
주석(comment)의 기술
자바는 다음의 세가지 방식의 주석을 지원한다.
/* ... */
//
/** ... */
형태의 주석 : 여러 줄에 걸친 설명이 필요할 때 사용
형태의 주석 : 한 줄에 나타낼 수 있는 주석을 처리할 때 사용
형태의 주석 : JavaDoc 용 주석 (모비스 프로젝트에서는 사용하지 않음)
/* ... */ 형태의 주석
메소드의 역할이나, 비즈니스 로직등을 설명할 떄 사용한다. /* ... */ 형태의 주석은 /*
이후 한 줄을 띄고 주석을 달아주며, 주석의 마지막 다음 줄에 */ 로 닫아 준다. 주석
의 각 줄의 들여쓰기는 앞 줄의 주석에 맞추는 것을 원칙으로 한다.
public void validate(int i) {
if (i > MAX_VALUE) {
/*
* 이 메소드에서는 최대값 이상에서는
* 아무런 일도 하지 않는다.
*/
return;
} else {
validateImpl();
}
}
21
자바 코딩 표준
주석의 기술(Cont'd)
// 형태의 주석
// 형태의 주석은 복잡한 수식의 설명 혹은 한 줄에 나타낼 수 있는 설명을 처리할 때
사용한다.
단, 메소드의 설명은 한 줄로 설명을 할 수 있더라도, 일관성 유지를 위해 /* ... */ 형태
의 주석을 사용하는 것을 원칙으로 한다.
// 이후 한 칸을 띄고 설명을 기술 한다.
public void addItem(Item item) {
fItems.addElement(item); // Vector인 fItems에 item을 집어 넣는다.
}
22
자바 코딩 표준
피해야 할 사항과 추천하는 사항들
클래스 변수나 인스턴스 변수에 대한 접근 수식자는 꼭 필요한 경우가 아니라
면 절대 public 으로 선언하지 않는다. 여기에서 꼭 필요한 경우란 프로그램상
의 요구에 의해 메소드가 존재하지 않고, 데이터 구조만 있는 클래스를 사용해
야 할 경우(C 언어의 struct와 같은 구조가 필요한 경우)로 한정 된다. 이 경우
앞에서 지정한 클래스 변수의 's' 접두어나 인스턴스 변수의 'f' 접두어와 같은
명명 규칙을 따르지 않는다.
public class Point {
public int x = 0; // 인스턴스 변수는 'f' 접두어를 붙여야 하나, 데이터 구조만 존재하는
public int y = 0; // 클래스이므로 접두어를 붙이지 않음
}
23
자바 코딩 표준
피해야 할 사항과 추천하는 사항들(Cont'd)
상수로 설정된 값을 직접 숫자 혹은 리터럴로 입력하지 말아야 한다.
class NameLabel extends Label {
public static int CENTER = 0;
public static int LEFT = 1;
public static int RIGHT = 2;
private int fHorizontalAlignment = 0; // 잘못된 부분
public void setHorizontalAlignment(int alignment) {
fAlignment = alignment;
}
}
class NameApplet extends Applet {
private NameLabel fNameLabel = new NameLabel();
public void start() {
showNameLabel("이름표", 2); // 잘못된 부분
}
protected void showNameLabel(String name, int alignment) {
fNameLabel.setHorizontalAlignment(alignment);
// 이하 생략
}
}
24
자바 코딩 표준
피해야 할 사항과 추천하는 사항들(Cont'd)
앞의 코드는 아래와 같이 수정되어야 한다.
class NameLabel extends Label {
public static int CENTER = 0;
public static int LEFT = 1;
public static int RIGHT = 2;
private int fHorizontalAlignment = CENTER; // 바르게 고친 부분
public void setHorizontalAlignment(int alignment) {
fAlignment = alignment;
}
}
class NameApplet extends Applet {
private NameLabel fNameLabel = new NameLabel();
public void start() {
showNameLabel("이름표", NameLabel.RIGHT); // 바르게 고친 부분
}
protected void showNameLabel(String name, int alignment) {
fNameLabel.setHorizontalAlignment(alignment);
// 이하 생략
}
}
25
자바 코딩 표준
피해야 할 사항과 추천하는 사항들(Cont'd)
클래스 변수나 클래스 메소드는 인스턴스가 아닌 클래스를 통하여 참조해야 한
다.
class NameLabel extends Label {
public static int CENTER = 0;
public static int LEFT = 1;
public static int RIGHT = 2;
private int fHorizontalAlignment = CENTER;
public void setHorizontalAlignment(int alignment) {
fAlignment = alignment;
}
}
class NameApplet extends Applet {
private NameLabel fNameLabel = new NameLabel();
public void start() {
showNameLabel("이름표", fNameLabel.RIGHT); // 잘못된 부분
}
protected void showNameLabel(String name, int alignment) {
fNameLabel.setHorizontalAlignment(alignment);
// 이하 생략
}
}
26
자바 코딩 표준
피해야 할 사항과 추천하는 사항들(Cont'd)
앞의 코드는 아래와 같이 수정되어야 한다.
class NameLabel extends Label {
public static int CENTER = 0;
public static int LEFT = 1;
public static int RIGHT = 2;
private int fHorizontalAlignment = CENTER;
public void setHorizontalAlignment(int alignment) {
fAlignment = alignment;
}
}
class NameApplet extends Applet {
private NameLabel fNameLabel = new NameLabel();
public void start() {
showNameLabel("이름표", NameLabel.RIGHT); // 바르게 고친 부분
}
protected void showNameLabel(String name, int alignment) {
fNameLabel.setHorizontalAlignment(alignment);
// 이하 생략
}
}
27
자바 코딩 표준
피해야 할 사항과 추천하는 사항들(Cont'd)
대입문은 한번에 하나의 값만 대입해야 한다. 즉, 하나의 대입문에서 너무 난해
하게 많은 대입은 허용하지 않는다.
fNameLocation.x = fValueLocation.x = 300; // 잘못된 예
d = (a = b + c) + r;
// 잘못된 예
위의 코드는 아래와 같이 수정되어야 한다.
fValueLocation = 300;
fNameLocation = fValueLocation;
// 올바른 예
a = b + c;
d = a + r;
// 올바른 예
28
자바 코딩 표준
피해야 할 사항과 추천하는 사항들(Cont'd)
조건문은 되도록 간결하게 유지해야 하며 부득이하게 여러 개의 조건들이 복합
적으로 연결될 경우 소괄호를 이용하여 이해하기 쉽게 작성해야 한다. 다시 말
하면 연산자의 우선순위 문제가 발생하지 않는 상황에서도 나중에 이해하기 쉽
도록 소괄호를 사용하는 것을 권장 한다.
if (a == b && c == d) {
// do something...
}
위의 코드는 아래와 같이 수정되어야 한다.
if ((a == b) && (c == d)) {
// do something...
}
29
JSP 코딩 표준
30
JSP 코딩 표준
파일 이름과 위치
파일 이름 짓기는 툴 벤더와 웹 컨테이너로 하여금 파일 타입을 인식하고, 각각
에 맞게 해석할 수 있는 방법을 제공한다. 다음 테이블은 추천하는 방식의 파일
확장자와
파일위치
종류목록이다.
파일 확장자
추천 위치
JSP
.jsp
<context root>/<subsystem path>/
.jsp
<context root>/<subsystem path>/
.jspf
<context root> /WEB-INF/jspf/<subsystem path>/
Cascading style sheet
.css
<context root>/css/
JavaScript
.js
<context root>/js/
HTML
.html
<context root>/<subsystem path>/
WEB Resource
.gif, .jpg, etc.
<context root>/images/
Tag library descriptor
.tld
<context root>/WEB-INF/tld/
JSP fragment
<context-root>는 웹 어플리케이션(.war 파일 내의 루트 디렉토리) 컨텍스트
루트임
<subsystem path>는 별개로 구분되는 업무군을 뜻함
31
JSP 코딩 표준
파일의 구조
클라이언트측 주석(client-side comments)
JSP 페이지의 변환과정을 거친 후 최종 사용자에게 보여질 주석을 기술한다.
일반적으로 작성자, 작성일자, 저작권 관련 정보 등을 기술한다.
<!-- 작성자: 홍길동
- 작성일자: YYYY년 MM월 DD일
- 설명: 현대모비스 XX업무 조회화면
-->
서버측 주석(server-side comments)
JSP 페이지의 변환과정을 거치면 제거되는 주석이다.
일반적으로 최종 사용자를 위한 주석이 아닌 개발자를 위한 주석을 기술한다.
<%-- 최종 수정일: YYYY년 MM월 DD일
- HISTORY
0000년 00월 00일: 1차 완성
1111년 11월 11일: 1차 버그 fix
--%>
32
JSP 코딩 표준
파일의 구조(Cont'd)
JSP 페이지 지시자(JSP page directives)
JSP 페이지 지시자는 JSP 변환 시점에 관련된 속성을 정의하는데 사용한다.
JSP 페이지 지시자의 길이는 80자를 넘지 않도록 작성하고, 부득이하게 80자를 넘어
설 경우 여러 줄로 나누어서 기술하도록 한다.
import 지시자를 사용할 경우 한 패키지에서 3개 이상의 클래스를 참조할 때 '*' 표시
를 사용하고, 그렇지 않다면 직접 클래스 명을 명시하는 것을 원칙으로 한다.
Import 지시자를 사용할 경우 한번에 하나씩 클래스나 패키지를 지정하는 것을 원칙
으로 한다.
<%-- import를 제외한 모든 속성 --%>
<%@ page
...
%>
<%-- import 속성들은 여기부터 시작 --%>
<@ page import="java.util.ArrayList" %>
<@ page import="java.text.*" %>
33
JSP 코딩 표준
파일의 구조(Cont'd)
선택적 태그 라이브러리 지시자
태그 라이브러리 지시자는 JSP에서 사용하는 커스텀 태그 라이브러리를 선언한다.
짧은 태그 라이브러리 지시자는 하나의 줄에 표현하고, 80자가 넘는다면 페이지 지
시자와 마찬가지로 여러 줄로 나누어 기술하도록 한다.
태그 라이브러리 지시자를 여러 개 사용할 경우 JSP 페이지 지시자 바로 다음에 같
이 모아두는 것을 원칙으로 한다.
<%-- import를 제외한 모든 속성 --%>
<%@ page
...
%>
<%-- import 속성들은 여기부터 시작 --%>
<@ page import="java.util.ArrayList" %>
<@ page import="java.text.*" %>
...
<%-- 태그 라이브러리 선언 --%>
<%@ taglib uri="URI1" prefix="tagPrefix1" %>
<%@ taglib uri="URI2" prefix="tagPrefix2" %>
<%@ taglib
uri="URI3"
prefix="tagPrefix3"
%>
...
34
JSP 코딩 표준
파일의 구조(Cont'd)
선택적 JSP 선언문
JSP 선언문은 JSP에 속한 메소드와 변수를 정의하는데 사용한다.
JSP 는 자바로 변환되므로 변수나 메소드 선언 자체는 자바 코딩 표준과 다르지 않
다.
JSP 선언문은 <%! ... %> JSP 선언문 블록 하나에 모두 몰아 한 곳에 집중시키는 것
<%!
이 private
좋다. int hitCount; %>
<%! private Date today; %>
...
<%! public int getHitCount() {
return hitCount;
}
%>
<%!
위의 코드 보다는 아래의 코드가 가독성이 더 좋다.
private int hitCount;
private Date today;
public int getHitCount() {
return hitCount;
}
%>
35
JSP 코딩 표준
공백(white space) 문자 및 빈 줄의 사용
JSP 태그와 몸체 사이에 반드시 하나의 공백 문자를 넣어야 한다.
<%=customer.getName()%>
<%= customer.getName() %>
: 잘못된 예
: 올바른 예
JSP 주석 태그와 주석을 분리하기 위해 반드시 하나의 공백 문자를 넣어야 한
다.
<%-- 여러 줄의 주석이 나뉘어지면, 각각의 줄은
- 한 줄씩 차지한다.
--%>
<%-- 짧은 주석 --%>
36
JSP 코딩 표준
공백 문자 및 빈 줄의 사용(Cont'd)
빈 줄은 출력에 영향을 주지 않는 범위 내에서 JSP의 가독성을 높이기 위해 사
용하는 것을 권장한다.
빈 줄이 출력에 영향을 주는 경우는 JSP 코드가 <PRE></PRE> 코드 사이에
존재하는 경우이며, 이 이외의 경우에는 추가적인 빈 줄이 출력에 영향을 미치
지 않는다.
JSP 구문
클라이언트 HTML 출력
<pre>
<%= customer.getFirstName() %>
<%= customer.getLastName() %>
</pre>
Joe
Block
<pre>
<%= customer.getFirstName() %>
Joe
Block
<%= customer.getLastName() %>
</pre>
<%= customer.getFirstName() %>
<%= customer.getLastName() %>
Joe Block
37
JSP 코딩 표준
참고사항
JSP 스크립틀릿 부분은 자바 코딩 표준을 따른다.
JSP의 경우 RAD에서 개발할 경우 거의 대부분의 코드가 자동생성 되고, 실제
프리젠테이션 로직 부분만 프로그래밍을 하게 된다. 따라서, JSP 코딩 표준은
권고 사안일 뿐 규제력은 없다.
38