프로그램 소스의 표준화를 통해서 코딩의 규격화와 효율성 및 가독성을 증대시키고, 유지 보수를 원 활히 하는데 목적이 있다. 소프트웨어 제품 개발에 사용되는 언어가 다양하므로 특정 언어 및 환경에 의존적이지 않는 일반적 인 표준 코드 서술 규범을 먼저 기술하고 특정 언어 및 환경을 위한 서술 규범은 별도로 기술한다. 또한, 이 문서에 기술되지 않았거나 문서의 기준을 적용하기 곤란한 부분에 대해서는 헝가리안 표기 법 및 관습적인 코딩 규약을 사용할 것을 권장한다.
들여쓰기는 코드에서 블록의 시작과 끝을 쉽게 알아볼 수 있게 해준다. 들여쓰기 되었을 때, 더욱 읽기 좋고, 더 많은 단계의 블록이 다른 블록 내부에 포함되어 있을 때, 들여쓰기의 필요성은 더욱 강조된다. 들여쓰기 및 탭 크기는 기본적으로 4 글자로 한다. 탭 문자는 사용하지 않는 것을 원칙으 로 한다. 다음은 들여쓰기 예이다.
1024*768 화면 기준으로 각 라인은 한 화면에 가급적 전부 보이도록 100 컬럼이내로 짧게 작성하며, 코드의 길이가 긴 라인은 두 줄에 걸쳐서 작성한다. 한 줄에 꼭 하나의 명령문만을 기술하여야 한다. 복잡한 수식을 가진 긴 라인이라면 여러 개의 작은 수식으로 분할하여 작성한다.
double length = Math.sqrt( Math.pow(Math.random(),2.0) + Math.pow(Math.randown(),2,0) ) ; 은 아래와 같이 분리한다.
각 코드 블록(code block)간의 여백은 한 줄을 띄우는 것을 원칙으로 하며, 함수 혹은 각 영역(area)간의 간격은 두 줄을 원칙으로 한다.
각각의 생성자 그리고 각각의 메소드와 같은 클래스의 부분들(parts) 사이에 적어도 하나 이상의 빈줄을삽입하라.
메소드 내부에서 지역 변수의 선언 이후에, 그리고 코드의 다른 영역들 사이에 빈 줄을 삽입하라.
연산자( =, /, * 등)의 양 옆에 공백을 삽입하라. 그러나 증가(++), 감소(--), 부정(!) 같은 복합연산자에는 공백을 이용해서는 안된다
for 구문의 부분들을 공백으로 구분하여라. 초기화, 검사, 증가 부분을 구분하는 세미콜론(;) 다음에 공백을 준다.
메소드의 인자(parameter) 목록의 쉼표(comma)와 뒤의 공백은 각각의 인자의 시작과 끝을 명확하게 만들어준다.
클래스의 멤버 함수의 경우에는 첫번째 어절의 첫 문자를 소문자로 기술해야 하며, 개체의 속성 (property)을 나타내는 멤버 함수일 경우에는 get 이라는 접두사를 붙이고, 속성을 지정하는 함수일 경우 set이라는 접두사를 붙인다. (단, MS 계열 개발 언어에서는 메소드의 명칭이 대문자로 시작하는 관습이 통용되고 있다.)
머리말은 모든 소스 파일의 처음 부분에 기술하는 소스에 대한 설명이다. Java 프로그램의 머리말은 다음과 같은 형식으로 작성한다.
/** * <PRE> * 프 로 그 램 명 : UserRegisterBean.java * 작 성 자 : 곽중선 * 작 성 일 : 2001/09/24 * 설 명 : 사용자 관리를 위한 register bean * 수 정 이 력 : 2004/02/22 - 각종 메소드를 가상함수로 전환, SimpleUserRegisterBean 추가 * 2004/05/08 - 가상함수 제거, 일반 클래스로 전환 * ver : 1.1 * 검 토 사 항 : - 사용자 역할 변경 시 관련 문서함 자동 생성 * </PRE> */
private PageContext pageContext; // JSP페이지의 모든 객체를 가지고 있다. private long startTime; // 시스템의 현재의 시간을 가져온다. private String debugType; private ServletContext context;
String str_count; // 전체 행수를 취득 String str_jsql; // 행수 취득 sql int i_boardPage = 1; // 선택 page int i_MAX_list = 3; // 모든 열수 int i_total_row = 0; // 모든 행수 int i_dspTotalPage = 4; // 보여 줄 전체 page
JSP 페이지 지시자는 JSP 변환 시점에 관련된 속성을 정의한다. JSP 스펙은 같은 페이지에 JSP 페이지 지시자의 수량을 제한하지 않는다. 페이지에 사용할 스크립트 언어, 세션 트래킹의 사용 여부, 그리고 오류를 기록할 페이지 정보, JAVA import 경로, file include, 커스텀 태그 라이브러리 등을 선언한다.
① JSP에서 사용하는 언어, 컨텐츠 타입을 정의한다. ② 페이지 내부에서 예외가 발생할 경우, 오류를 처리할 페이지 주소를 나타낸다. ③ 태그 라이브러리 지시자는 JSP 에서 사용하는 커스텀 태그 라이브러리를 선언한다. 짧은 지시자는 하나의 줄에 선언할 수 있다. 여러 개의 태그 라이브러리 지시자들은 한 곳에 같이 모아둔다: ④ import하는 외부 클래스들을 선언한다. 가급적 ".*" 를 이용해 패키지를 import하지 말고, 클래스를 일일이 선언한다.
HTML 페이지에서 머리말(header)에 해당하는 블록이며, 이 부분에는 다음과 같은 내용을 서술한다.
HTML 페이지의 간단한 제목, <TITLE> 태그 CSS(Cascading Stytle Sheet) 기술 CSS를 사용해서 헤딩, 테이블 등의 공통적인 특성을 중앙에서 제어하도록 한다. 이 방법은 사용자들에게 프리젠테이션의 일관성을 향상시키고, 유지보수 노력과 JSP 페이지의 코드 사이즈를 줄여준다. 가급적 아래의 예제 중에서 앞선 방식을 권장한다.
자바 스크립트가 제대로 돌아가기 위해서는 자바스크립트는 브라우저 타입의 특성과 관계없어야 된다. 또한 동작을 한다면, JSP에서 자바스크립트 코드를 독립적인 파일로 분리하고, 다음과 같이 JSP에서 자바스크립트를 불러쓰는 방식을 권장한다. 이렇게 하면 자바스크립트의 재사용성도 향상되고, 여러 JSP 사이에 일관된 습성의 자바스크립트를 유지할 수 있고, JSP 페이지의 복잡성을 줄여준다.
<SCRIPT LANGUAGE="xxJavaScript" SRC="./Lib/jsc/gwMenu.jsc"></SCRIPT> <SCRIPT LANGUAGE="xxJavaScript"> function goSubMenu( url ) { var thisForm = document.forms[0]; thisForm.action = url; thisForm.submit(); } </SCRIPT>
HTML 코드 작성시 HTML 태그 혹은 예약어는 모두 대문자로 서술하는 것을 원칙으로 한다.
JSP 스크립틀릿 JSP Scriptlets
가급적, 태그라이브러리로 동일한 기능을 구현할 수 있으면, JSP 스클립틀릿은 피하기 바란다. 이렇 게 하면 페이지 가독성도 높이고, 유지보수도 쉬워진다. 비지니스 로직을 프리진테이션 로직에서 분 리하는데 일조하며, JSP 2.0 스타일의 페이지로 쉽게 옮겨갈 수 있다. (JSP 2.0도 스크립틀릿을 지원하 지만 덜 강조한다). 다음 예제는 customers 표시 방법이 데이터 형에 따라서 다른 스크립틀릿을 사용 하는 것을 보여준다:
비지니스 로직과 프리젠테이션 층과의 결합도을 줄이기 위한 모델-뷰-컨트롤러(MVC) 디자인 패턴을 적용하려고 한다면, JSP 스크립틀릿은 비지니스 로직을 구현하기 위해서 사용되어서는 안된다. 오히려, JSP 스크립틀릿은 클라이언트의 요청을 처리한 뒤에 나오는 데이터("가치 객체 value objects"로 불리는)를 적절한 클라이언트의 준비된 형식에 전송하기 위해 필요하다면 사용된다. 심지어 그럴 경우에도, 프론트 컨트롤러 서블릿이나 커스텀 태그로 하는 게 더 낫다.
JSP 표현식 JSP Expressions
JSP 표현식은 JSP scriptlet처럼 가능하면 삼가는 것이 좋다. 동일한 작업을 수행하는 다음 3가지 예제가 잘 설명해준다. 가급적 나중에 기술될 코드 스타일을 권장한다.
Example 1 (자바 코드 사용): <%= myBean.getName() %>
Example 2 (JSP 태그 사용): <jsp:getProperty name="myBean" property="name" />
Example 3 (JSTL 태그 사용): <c:out value="${myBean.name}" />
프로그래밍 습관 Programming Practices
일반적으로, 다음과 같은 이유로 JSP 페이지에 자바 코드(선언문, 스크립틀릿, 표현식) 쓰기를 피한다:
JSP 페이지의 자바 코드 문법 에러는 페이지가 배치되기 전까지 발견되지 않는다. 반면에, 태그 라이브러리와 서블릿에 있는 문법 에러는 배치 이전에 발견된다.
JSP 페이지 내의 자바 코드는 디버깅하기 힘들다.
JSP 페이지 내의 자바 코드는 유지보수하기 힘들다.
보통 복잡한 비즈니스 로직과 프리젠테이션 로직을 섞어놓지 않는 것이 납득이 가는 습관이다. JSP는 우선적으로 프리젠테이션 로직을 목적으로 한다.
자바 코드가 포함된 코드와 HTML과 다른 스크립트 명령어가 섞여있다면 읽기 어렵다.
JSP 2.0 은 더 단순한 표현 언어(EL) 덕분에 scriptlet의 중요도를 낮추었다. JSP 에서JSP 2.0 스타일로 쉽게 옮기기 위해서는 자바 코드를 사용하지 않는 것이 좋다.
JSP 내장 객체 JSP Implicit Objects
API 호출을 통해서 객체를 참조하기 보다는 JSP 내장 객체를 직접 사용하는 것이 좋다. 그래서 ServletContext 인스턴스에 의해 제공되는 초기 파라미터에 접근하기 위해 다음을 쓰는 대신에 다음의 코딩 스타일 중 가급적 나중 방식을 권장한다.
이렇게 하면 JSP 컨테이너는 태그 몸체가 무조건 비어야 되며 파싱할 어떤 JSP 문법도 포함하지 않아야 된다고 인식한다. 효과는 빈 몸체를 파싱하기 위해서 불필요하게 자원의 할당이 이뤄지는 것을 제거한다. 빈 태그는, 가독성향상을 위해 열고 닫는 XML 엘리먼트 쌍으로 표시하기보다는, 짧은 XML 엘리먼트로 표시한다. 그래서,
<myTag:hello />
라고 표기하는 것이 아래보다 낫다.
<myTag:hello></myTag:hello>
스크립트 엘리먼트의 들여쓰기 Indentation of Scripting Elements
JSP 스크립트 엘리먼트(선언문, 스크립틀릿, 표현식과 같은)가 한 줄에 맞지 않는 경우, 스크립트 언 어의 들여쓰기 작성요령이 엘리먼트 내에 적용된다. 몸체는 엘리먼트의 여는 기호 <%=와 같은 줄에 서 시작한다. 다음줄의 기준도 여는 기호 <%=가 된다. 몸체의 끝은 다른 줄에 있는 엘리먼트의 닫 는 기호(%>)로 마무리된다. 예제이다:
첫줄과 마지막 줄을 제외한 몸체의 가운데 줄들은 단위 들여쓰기 공백(앞 예제에서 로 보인다)이 앞에 있기 때문에 나머지 JSP 보다 확연히 드러나게 된다.
JSP, HTML, JAVA의 복합 들여쓰기 (Compound Indentation with JSP, HTML and Java)
자바의 스크립트 코드와 템플릿 텍스트(HTML)가 섞여있는 JSP 엘리먼트를 위해서 복합 들여쓰기가 필요한 이유는 JSP 소스를 이해하기 위해 드는 노력을 덜어주기 위해서이다. 기존의 들여쓰기 요령은 JSP 소스파일을 더 알아보기 어렵게 할 수 있기 때문이다. 보편적인 규칙에 따라서, 다른 소스 사이에 끼어 있을 경우마다 보통 들여쓰기에 특별한 단위를 할당한다. 클라이언트에 보여지는 들여쓰기에 영향을 준다. 추가적인 들여쓰기는 (브라우저에 의해) 보통 무시되고, 브라우저에 나타나는 결과는 차이가 없다. 예를 들어, <TABLE> 태그 앞에 공백이 몇개 더 추가된다고 해서, 브라우저에서 보여지는 테이블의 위치가 달라지는 것은 아니다. 그래서 이러한 작성요령을 사용하는 것이 더 좋아 보인다: