자바_코딩가이드

Download Report

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