자바 TM 및 JSP TM 코딩 표준

38
1 자자 자자 TM TM JSP JSP TM TM 자자 자자 자자 자자

description

자바 TM 및 JSP TM 코딩 표준. Overview. 자바 코딩 표준 패키지 클래스 메소드 상수 클래스 변수 인스턴스 변수 지역 변수 JSP 코딩 표준 파일 이름과 위치 파일의 구조 공백 참고사항. 들여쓰기 선언문 제어문 공백 주석문 피해야 하는 사항들과 추천하는 사항들. 자바 코딩 표준. 자바 코딩 표준. 클래스 명명 규칙 일반적인 클래스 명은 각 단어의 첫 글자는 대문자 나머지는 소문자로 지정한다 . 영 . 숫자를 제외한 문자는 사용하지 않는다 . - PowerPoint PPT Presentation

Transcript of 자바 TM 및 JSP TM 코딩 표준

Page 1: 자바 TM 및  JSP TM 코딩 표준

1

자바자바 TMTM 및 및 JSPJSPTMTM 코딩 표준코딩 표준

Page 2: 자바 TM 및  JSP TM 코딩 표준

2

OverviewOverview 자바 코딩 표준자바 코딩 표준

패키지클래스메소드상수클래스 변수인스턴스 변수지역 변수

JSP JSP 코딩 표준코딩 표준파일 이름과 위치파일의 구조공백참고사항

들여쓰기선언문제어문공백주석문피해야 하는 사항들과 추천하는 사항들

Page 3: 자바 TM 및  JSP TM 코딩 표준

3

자바 코딩 표준자바 코딩 표준

Page 4: 자바 TM 및  JSP TM 코딩 표준

4

자바 코딩 표준자바 코딩 표준 클래스 명명 규칙클래스 명명 규칙

일반적인 클래스 명은 각 단어의 첫 글자는 대문자 나머지는 소문자로 지정한다 .영 . 숫자를 제외한 문자는 사용하지 않는다 .광범위하게 사용되는 축약어를 제외하고는 되도록 축약어를 사용하지 않는다 .

부득이하게 사용해야 할 경우 축약어는 모두 대문자로 표현한다 .일반적으로 클래스 명은 명사들의 조합 혹은 형용사 + 명사구로 지정한다 .올바른 클래스명의 예

잘못된 클래스명의 예

class LoginAction;class HTTPRequest; : 축약어는 모두 대문자로 사용 (HTTP 는 범용적으로 사용되는 축약어 )abstract class AbstractUserInformation;

class GSL; : 정확하게 약어의 뜻을 유추할 수 없음class my_action; : 클래스 명이 소문자로 시작되어 클래스 명 식별이 쉽지 않고 ,

밑줄을 사용하여 자바 API 와 일관성이 떨어짐class 사용자 ; : 한글을 클래스 명으로 사용할 경우 일부 OS 에서 클래스를 읽을 수 없음class DoIt; : 클래스는 하나의 엔티티 (entity) 를 뜻하므로 , 어떠한 행동을 기술하는

동사를 사용할 경우 , 클래스의 정확한 용도를 유추하기가 어려움

Page 5: 자바 TM 및  JSP TM 코딩 표준

5

자바 코딩 표준자바 코딩 표준 메소드 명명 규칙메소드 명명 규칙

메소드 명은 소문자로 시작하고 , 각 단어의 시작은 대문자로 지정한다 .메소드는 동사 + 명사의 형태로 지정하는 것이 일반적이다 .

클래스 명과 마찬가지로 범용적으로 통하는 경우를 제외하고는 되도록 축약어를 사용하지 않는 것을 원칙으로 하며 , 부득이하게 사용해야 할 경우 축약어는 모두 대문자로 지정한다 .

각 메소드는 하나의 단위 작업 기준별로 작성한다 .메소드의 접근 제한자는 외부에 공개할 메소드가 아닌 이상 public 으로

지정하지 않는다 .클래스의 프로퍼티에 대한 접근 메소드는 get 프로퍼티명 (), set 프로퍼티명 ()

으로 명명하는 것이 일반적이다 . 단 , boolean 형의 프로퍼티의 경우 get프로퍼티명 () 대신 is 프로퍼티명 () 를 권장 한다 .

Customer getCustomer();void drawCircle(int x, int y, int radius);

HTTPHeader getHTTPHeader();void setMessageID(MessageID msgID);

Page 6: 자바 TM 및  JSP TM 코딩 표준

6

자바 코딩 표준자바 코딩 표준 상수의 선언상수의 선언

자바에서는 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";}

Page 7: 자바 TM 및  JSP TM 코딩 표준

7

자바 코딩 표준자바 코딩 표준 클래스 변수의 선언클래스 변수의 선언

클래스 변수는 인스턴스 범위가 아닌 클래스 범위를 가진 변수를 말한다 . 즉 , 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;}

Page 8: 자바 TM 및  JSP TM 코딩 표준

8

자바 코딩 표준자바 코딩 표준 인스턴스 변수의 선언인스턴스 변수의 선언

인스턴스 변수는 각 인스턴스 내에서 전역적으로 사용되는 변수를 말한다 .인스턴스 변수는 각각의 인스턴스를 구분 짓는 특성 값이므로 , 외부에 공개되는 값일 경우

프로퍼티라고 불리기도 한다 .인스턴스 변수는 public, protected, (default), private 순으로 기술한다 .특별한 경우를 제외하고는 인스턴스 변수는 private 로 정의하는 것을 원칙으로 한다 .모든 인스턴스 변수는 지역 변수와 구분하기 위해 소문자 f 를 prefix 로 붙이고 , 각 단어의 첫

글자는 대문자로 나머지는 소문자로 사용한다 .

public class Customer { public static final int MALE = 1; public static final int FEMALE = 2;

private String fName = ""; private String fAddress = ""; private int fAge = 0; private int fGender = MALE;

...}

Page 9: 자바 TM 및  JSP TM 코딩 표준

9

자바 코딩 표준자바 코딩 표준 인스턴스 변수의 선언인스턴스 변수의 선언 (Cont'd)(Cont'd)

인스턴스 변수의 명명 규칙을 따르지 않았을 때 발생할 수 있는 문제점의 예시

public class Example { ... private int value;

public void setValue(int value) { value = value; // 잘못된 부분 } ...}

public class Example { ... private int value;

public void setValue(int value) { this.value = value; } ...}

public class Example { ... private int fValue;

public void setValue(int value) { fValue = value; // 명명 규칙을 따름으로써 코딩상의 실수를 미연에 방지 } ...}

< 오류 케이스 > < 오류 케이스 수정 후 >

< 명명 규칙을 따름으로서 미연에 코딩상 실수를 방지 >

Page 10: 자바 TM 및  JSP TM 코딩 표준

10

자바 코딩 표준자바 코딩 표준 지역 변수의 선언지역 변수의 선언

자바에서 지역 변수란 메소드 내에서 선언 및 사용되는 변수를 말한다 .지역 변수는 인스턴스 변수와 달리 접근 수식자가 존재하지 않는다 .(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; }}

Page 11: 자바 TM 및  JSP TM 코딩 표준

11

자바 코딩 표준자바 코딩 표준 들여쓰기 규칙들여쓰기 규칙 (indentation rule)(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;

Page 12: 자바 TM 및  JSP TM 코딩 표준

12

자바 코딩 표준자바 코딩 표준 들여쓰기 규칙들여쓰기 규칙 (Cont'd)(Cont'd)

분리된 줄은 원래 줄보다 최소 두 개의 탭 문자 이상 들여쓰기를 하며 , 분리된 세 번째 줄부터는 두 번째 줄과 동일한 들여쓰기를 하는 것을 원칙으로 한다 .

메소드 선언시 매개변수의 개수가 너무 많아 80 컬럼을 넘어서게 되면 , 기본적으로 원래 줄의 매개변수가 시작하는 위치까지 들여쓰기를 하는 것을 원칙으로 하되 , 들여쓰기의 깊이가 너무 깊어질 경우 두 개의 탭 문자만큼 들여쓰기를 하는 것으로 한다 .

fInitValue = getArgumentName("c:\\temp", "MESSAGE", 4, getDefaultSecurityPolicy(SecurityPolicy.SYSTEM), ArgumentList.WRITE, "tisweb/common");

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}

Page 13: 자바 TM 및  JSP TM 코딩 표준

13

자바 코딩 표준자바 코딩 표준들여쓰기 규칙들여쓰기 규칙 (Cont'd)(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; // 올바른 예

Page 14: 자바 TM 및  JSP TM 코딩 표준

14

자바 코딩 표준자바 코딩 표준 선언문 코딩 표준선언문 코딩 표준

변수나 상수의 선언은 각각에 대해서 한 줄씩 사용하며 한 줄에 여러 개의 변수나 상수를 선언하지 않는다 .

모든 변수는 가능하다면 선언된 곳에서 명시적으로 초기화 해 주어야 한다 .각각의 변수는 각각의 용도를 가지는 것을 원칙으로 하며 , 절대로 하나의

변수를 여러 가지 용도로 사용해서는 안 된다 .블록이 다르다고 해서 각 지역 변수로 같은 이름의 변수를 사용해서는 안 된다 .

( 반복문 등에서 사용되는 임시 변수는 제외 )지역 변수의 이름은 클래스 변수나 , 인스턴스 변수의 이름과 동일하게 짓지

않는다 .메소드 선언 시 메소드의 이름과 소괄호 사이에는 공백을 넣지 않는다 .선언문에서 여는 중괄호 ({) 는 선언문과 같은 줄의 마지막에 위치 하는 것을

원칙으로 한다 .

Page 15: 자바 TM 및  JSP TM 코딩 표준

15

자바 코딩 표준자바 코딩 표준 선언문 코딩 표준선언문 코딩 표준 (Cont'd)(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; }}

Page 16: 자바 TM 및  JSP TM 코딩 표준

16

자바 코딩 표준자바 코딩 표준 제어문 코딩 표준제어문 코딩 표준

if 문

if 문 안에서 쓰이는 문장이 비록 한 줄이라도 항상 중괄호를 사용해야 한다 . 이는 나중에 해당 부분이 한 줄 이상으로 늘어날 경우 예기치 않게 발생할 수 있는 버그의 가능성을 배제해 준다 .

if ( 조건 ) { // do something...}

if ( 조건 ) { // do something...} else { // do something...}

if ( 조건 1) { // do something...} else if ( 조건 2) { // do something...} else { // do something...}

if (maxValue > 100) fStackOverflow = true; // 잘못된 예 --> 중괄호를 사용 않음

if (maxValue > 100) { fStackOverflow = true; // 올바른 예}

Page 17: 자바 TM 및  JSP TM 코딩 표준

17

자바 코딩 표준자바 코딩 표준 제어문 코딩 표준제어문 코딩 표준 (Cont'd)(Cont'd)

for 문

for 문에서 사용하는 초기화 부분이나 조건 부분 , 갱신 부분에는 세 개 이상의 변수를 사용하지 않는 것을 원칙으로 한다 .

for 문 역시 if 문과 마찬가지 이유로 loop-body 가 단 하나의 문장이라도 중괄호를 항상 사용해야 한다 .

while 문 , do-while 문

while 문 , do-while 문 역시 for 문과 마찬가지 이유로 loop-body 가 단 하나의 문장이라도 중괄호를 항상 사용해야 한다 .

for ( 초기화 ; 조건 ; 갱신 ) { // do something...}

while ( 조건 ) { // do something...}

do { // do something...} while ( 조건 );

Page 18: 자바 TM 및  JSP TM 코딩 표준

18

자바 코딩 표준자바 코딩 표준 제어문 코딩 표준제어문 코딩 표준 (Cont'd)(Cont'd)

switch-case 문

위의 예시에서 case CENTER 부분과 같이 break 문 없이 다음 case 문 (여기에서는 case LEFT 부분 ) 을 실행할 때에는 break 문 없이 지나친다는 것(fall through) 을 반드시 표기해 주어야 한다 .

모든 switch 문에는 위와 같이 default 부분을 제일 뒤쪽에 반드시 적어주어야 한다 .

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;}

Page 19: 자바 TM 및  JSP TM 코딩 표준

19

자바 코딩 표준자바 코딩 표준 제어문 코딩 표준제어문 코딩 표준 (Cont'd)(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) { // 그 외의 예외 처리}

try { // do something} catch (IOException ie) { // IO 예외 처리} catch (Exception e) { // 그 외의 예외 처리} finally { // 이 부분은 항상 실행됨}

Page 20: 자바 TM 및  JSP TM 코딩 표준

20

자바 코딩 표준자바 코딩 표준 공백공백 (white space) (white space) 문자의 사용문자의 사용

모든 키워드 (if, switch, for, while, catch) 다음에 오는 소괄호는 키워드와 한 칸의 공백을 둔다 . 이는 키워드와 메소드 간을 구분하기 위해서 이다 .( 메소드의 경우 소괄호와 메소드 이름을 붙여서 사용 )

모든 콤마 다음에는 한 칸의 공백을 둔다 .대입 연산자 (=) 양 앞뒤로는 각각 한 칸의 공백을 둔다 .증가 연산자 (++) 와 감소 연산자 (--), 음수를 나타내는 데 사용되는 마이너스 ( 예 :

-3) 를 제외한 모든 연산자의 양 앞뒤로 각각 한 칸의 공백을 둔다 .

Page 21: 자바 TM 및  JSP TM 코딩 표준

21

자바 코딩 표준자바 코딩 표준 주석주석 (comment)(comment) 의 기술의 기술

자바는 다음의 세가지 방식의 주석을 지원한다 ./* ... */ 형태의 주석 : 여러 줄에 걸친 설명이 필요할 때 사용// 형태의 주석 : 한 줄에 나타낼 수 있는 주석을 처리할 때 사용/** ... */ 형태의 주석 : JavaDoc 용 주석 ( 모비스 프로젝트에서는

사용하지 않음 )

/* ... */ 형태의 주석메소드의 역할이나 , 비즈니스 로직등을 설명할 떄 사용한다 . /* ... */ 형태의

주석은 /* 이후 한 줄을 띄고 주석을 달아주며 , 주석의 마지막 다음 줄에 */ 로 닫아 준다 . 주석의 각 줄의 들여쓰기는 앞 줄의 주석에 맞추는 것을 원칙으로 한다 .public void validate(int i) { if (i > MAX_VALUE) { /* * 이 메소드에서는 최대값 이상에서는 * 아무런 일도 하지 않는다 . */ return; } else { validateImpl(); }}

Page 22: 자바 TM 및  JSP TM 코딩 표준

22

자바 코딩 표준자바 코딩 표준 주석의 기술주석의 기술 (Cont'd)(Cont'd)

// 형태의 주석 // 형태의 주석은 복잡한 수식의 설명 혹은 한 줄에 나타낼 수 있는 설명을 처리할 때

사용한다 . 단 , 메소드의 설명은 한 줄로 설명을 할 수 있더라도 , 일관성 유지를 위해 /* ... */ 형태의

주석을 사용하는 것을 원칙으로 한다 . // 이후 한 칸을 띄고 설명을 기술 한다 .

public void addItem(Item item) { fItems.addElement(item); // Vector 인 fItems 에 item 을 집어 넣는다 .}

Page 23: 자바 TM 및  JSP TM 코딩 표준

23

자바 코딩 표준자바 코딩 표준 피해야 할 사항과 추천하는 사항들피해야 할 사항과 추천하는 사항들

클래스 변수나 인스턴스 변수에 대한 접근 수식자는 꼭 필요한 경우가 아니라면 절대 public 으로 선언하지 않는다 . 여기에서 꼭 필요한 경우란 프로그램상의 요구에 의해 메소드가 존재하지 않고 , 데이터 구조만 있는 클래스를 사용해야 할 경우 (C 언어의 struct 와 같은 구조가 필요한 경우 ) 로 한정 된다 . 이 경우 앞에서 지정한 클래스 변수의 's' 접두어나 인스턴스 변수의 'f' 접두어와 같은 명명 규칙을 따르지 않는다 .

public class Point { public int x = 0; // 인스턴스 변수는 'f' 접두어를 붙여야 하나 , 데이터 구조만 존재하는 public int y = 0; // 클래스이므로 접두어를 붙이지 않음}

Page 24: 자바 TM 및  JSP TM 코딩 표준

24

자바 코딩 표준자바 코딩 표준 피해야 할 사항과 추천하는 사항들피해야 할 사항과 추천하는 사항들 (Cont'd)(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); // 이하 생략 }}

Page 25: 자바 TM 및  JSP TM 코딩 표준

25

자바 코딩 표준자바 코딩 표준 피해야 할 사항과 추천하는 사항들피해야 할 사항과 추천하는 사항들 (Cont'd)(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); // 이하 생략 }}

Page 26: 자바 TM 및  JSP TM 코딩 표준

26

자바 코딩 표준자바 코딩 표준 피해야 할 사항과 추천하는 사항들피해야 할 사항과 추천하는 사항들 (Cont'd)(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); // 이하 생략 }}

Page 27: 자바 TM 및  JSP TM 코딩 표준

27

자바 코딩 표준자바 코딩 표준 피해야 할 사항과 추천하는 사항들피해야 할 사항과 추천하는 사항들 (Cont'd)(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); // 이하 생략 }}

Page 28: 자바 TM 및  JSP TM 코딩 표준

28

자바 코딩 표준자바 코딩 표준 피해야 할 사항과 추천하는 사항들피해야 할 사항과 추천하는 사항들 (Cont'd)(Cont'd)

대입문은 한번에 하나의 값만 대입해야 한다 . 즉 , 하나의 대입문에서 너무 난해하게 많은 대입은 허용하지 않는다 .

위의 코드는 아래와 같이 수정되어야 한다 .

fNameLocation.x = fValueLocation.x = 300; // 잘못된 예d = (a = b + c) + r; // 잘못된 예

fValueLocation = 300; // 올바른 예fNameLocation = fValueLocation;

a = b + c; // 올바른 예d = a + r;

Page 29: 자바 TM 및  JSP TM 코딩 표준

29

자바 코딩 표준자바 코딩 표준 피해야 할 사항과 추천하는 사항들피해야 할 사항과 추천하는 사항들 (Cont'd)(Cont'd)

조건문은 되도록 간결하게 유지해야 하며 부득이하게 여러 개의 조건들이 복합적으로 연결될 경우 소괄호를 이용하여 이해하기 쉽게 작성해야 한다 . 다시 말하면 연산자의 우선순위 문제가 발생하지 않는 상황에서도 나중에 이해하기 쉽도록 소괄호를 사용하는 것을 권장 한다 .

위의 코드는 아래와 같이 수정되어야 한다 .

if (a == b && c == d) { // do something...}

if ((a == b) && (c == d)) { // do something...}

Page 30: 자바 TM 및  JSP TM 코딩 표준

30

JSP JSP 코딩 표준코딩 표준

Page 31: 자바 TM 및  JSP TM 코딩 표준

31

JSP JSP 코딩 표준코딩 표준 파일 이름과 위치파일 이름과 위치

파일 이름 짓기는 툴 벤더와 웹 컨테이너로 하여금 파일 타입을 인식하고 , 각각에 맞게 해석할 수 있는 방법을 제공한다 . 다음 테이블은 추천하는 방식의 파일 확장자와 위치 목록이다 .

<context-root> 는 웹 어플리케이션 (.war 파일 내의 루트 디렉토리 ) 컨텍스트 루트임

<subsystem path>는 별개로 구분되는 업무군을 뜻함

JSP fragment

Cascading style sheet

JavaScript

HTML

WEB Resource

Tag library descriptor

JSP

파일 종류

.jsp

.css

.js

.html

.gif, .jpg, etc.

.tld

.jsp

파일 확장자

.jspf

<context root>/<subsystem path>/

<context root>/css/

<context root>/js/

<context root>/<subsystem path>/

<context root>/images/

<context root>/WEB-INF/tld/

<context root>/<subsystem path>/

추천 위치

<context root> /WEB-INF/jspf/<subsystem path>/

Page 32: 자바 TM 및  JSP TM 코딩 표준

32

JSP JSP 코딩 표준코딩 표준 파일의 구조파일의 구조

클라이언트측 주석 (client-side comments) JSP 페이지의 변환과정을 거친 후 최종 사용자에게 보여질 주석을 기술한다 .일반적으로 작성자 , 작성일자 , 저작권 관련 정보 등을 기술한다 .

서버측 주석 (server-side comments) JSP 페이지의 변환과정을 거치면 제거되는 주석이다 .일반적으로 최종 사용자를 위한 주석이 아닌 개발자를 위한 주석을 기술한다 .

<!-- - 작성자 : 홍길동 - 작성일자 : YYYY년 MM월 DD 일 - 설명 : 현대모비스 XX 업무 조회화면 -->

<%-- - 최종 수정일 : YYYY 년 MM 월 DD 일 - HISTORY - 0000 년 00 월 00 일 : 1 차 완성 - 1111 년 11 월 11 일 : 1 차 버그 fix --%>

Page 33: 자바 TM 및  JSP TM 코딩 표준

33

JSP JSP 코딩 표준코딩 표준 파일의 구조파일의 구조 (Cont'd)(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.*" %>

Page 34: 자바 TM 및  JSP TM 코딩 표준

34

JSP JSP 코딩 표준코딩 표준 파일의 구조파일의 구조 (Cont'd)(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"%>...

Page 35: 자바 TM 및  JSP TM 코딩 표준

35

JSP JSP 코딩 표준코딩 표준 파일의 구조파일의 구조 (Cont'd)(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; }%>

Page 36: 자바 TM 및  JSP TM 코딩 표준

36

JSP JSP 코딩 표준코딩 표준 공백공백 (white space) (white space) 문자 및 빈 줄의 사용문자 및 빈 줄의 사용

JSP 태그와 몸체 사이에 반드시 하나의 공백 문자를 넣어야 한다 .

JSP 주석 태그와 주석을 분리하기 위해 반드시 하나의 공백 문자를 넣어야 한다 .

<%=customer.getName()%> : 잘못된 예<%= customer.getName() %> : 올바른 예

<%-- - 여러 줄의 주석이 나뉘어지면 , 각각의 줄은 - 한 줄씩 차지한다 . --%> <%-- 짧은 주석 --%>

Page 37: 자바 TM 및  JSP TM 코딩 표준

37

JSP JSP 코딩 표준코딩 표준 공백 문자 및 빈 줄의 사용공백 문자 및 빈 줄의 사용 (Cont'd)(Cont'd)

빈 줄은 출력에 영향을 주지 않는 범위 내에서 JSP 의 가독성을 높이기 위해 사용하는 것을 권장한다 .

빈 줄이 출력에 영향을 주는 경우는 JSP 코드가 <PRE></PRE> 코드 사이에 존재하는 경우이며 , 이 이외의 경우에는 추가적인 빈 줄이 출력에 영향을 미치지 않는다 .

<pre><%= customer.getFirstName() %><%= customer.getLastName() %></pre>

JoeBlock

<pre><%= customer.getFirstName() %>

<%= customer.getLastName() %></pre>

Joe

Block

<%= customer.getFirstName() %><%= customer.getLastName() %>

Joe Block

JSP 구문 클라이언트 HTML 출력

Page 38: 자바 TM 및  JSP TM 코딩 표준

38

JSP JSP 코딩 표준코딩 표준 참고사항참고사항

JSP 스크립틀릿 부분은 자바 코딩 표준을 따른다 .

JSP 의 경우 RAD 에서 개발할 경우 거의 대부분의 코드가 자동생성 되고 , 실제 프리젠테이션 로직 부분만 프로그래밍을 하게 된다 . 따라서 , JSP 코딩 표준은 권고 사안일 뿐 규제력은 없다 .