처음으로 JSP프로그램을 짜본 기분이 어떠신가요? 일단 환경 구축하고 hello.jsp와 date.jsp 파일을 만들어서 브라우저에서 결과를 보셨으면 잘 따라오셨습니다.
질문 하나, 프로그램이 뭘까요? What is program?
구글신에게 질문해보니 다음과 같은 해석을 보여주네요.
define:program대략 감이 오시나요? 프로그램의 기본은 세 가지입니다.
(computer science) a sequence of instructions that a computer can interpret and execute;
컴퓨터가 이해하고 실행할 수 있는 일련의 지시사항
- 변수 (Variable)
- 제어 (Control)
- 반복 (Loop)
변수란 값을 담아 둘 수 있도록 알아보기 쉽게 이름을 붙인 메모리 공간 이름입니다.
제어란 프로그램의 흐름을 조절하는 것인데, if then else 와 같이 만약 ~라면 ~해라 라고 지정할 수 있습니다.
반복이란 같은 동작을 지정한 조건만큼 수행하도록 합니다.
너무 단순화 시켜서 얘기한 것 같지만 이 세 가지만 터득하면 어떤 언어든 간에 기초는 따고 들어갑니다.
앞서 hello.jsp 파일을 복사해서 hello2.jsp 파일을 만들고, 여기에 변수를 사용해보겠습니다.
<소스 1> hello2.jsp 내용
<% int c = 123 * 7 ; %>
<%= c %>
조금 복잡해졌습니다. 결과는 아까와 동일합니다. 표현식에 있던 것이 스크립틀릿(scriptlet)사이로 옮겨가면서 c라는 정수형 변수를 사용했습니다. 모두 소문자입니다. 자바가 대소왕자, 아니, ^^; 대소문자에 예민하다는 것 잊지 마세요.
스크립틀릿 안에는 자바 문장이 들어갑니다. 자바 문장은 항상 세미콜론(;)으로 끝납니다.
그래서 7 뒤에 ; 이 붙어있는 것이죠. 스크립틀릿과 표현식의 차이는 <% %> 사이의 = 입니다. =은 <%= 처럼 딱 붙어 있어야 됩니다. 스크립틀릿은 <% %>로 구분될 수 있습니다.
만만한 구구단 프로그램을 짜 볼까요?
<소스 2> multiTable.jsp 내용
<%
// i: 단 변수
for (int i = 2; i <= 9; i++) {
// j: 곱수
for (int j = 2; j <= 9; j++) {
int k = i * j;
%>
<%= i + " x " + j + " = " + k %><br />
<%
} // end for j
%><hr />
<%
} // end for i
%>
결과는 여러분들이 옛날에 책받침에서 보았던 구구단 표가 나올 것입니다.
구구단 결과
for 문장은 i라는 int 변수를 선언하고 i가 9보다 작거나 같은 동안 내부 문장을 실행하고 1씩 증가합니다. 곱수인 j 도 비슷한 과정을 겪고 i와j의 곱한 결과를 k에 넣습니다. 꺽쇠와 퍼센트가 많아서 눈이 요란하지만 표현식을 써서 브라우저에 결과를 출력합니다.
이 부분은 문자열 더하기 연산이 일어나는 부분입니다.
표현식 뒤에 <br />을 넣은 이유는 html은 엔터값(줄바꿈문자)을 무시하기 때문이라고 앞서 포인트로 얘기했었습니다. break row의 의미인 것으로 알고 있습니다.
아, 파일명을 multiTable.jsp 이라고 했는데, 가운데 T를 대문자로 쓴 이유가 있습니다. 헝가리안 명명규칙이라고 하는데, 단어와 단어를 붙일 때는 연결부분의 다음 단어 첫자를 대문자로 쓴다는 것입니다. 눈에 더 잘 들어오기 때문이죠. 마치 낙타 등과 같은 표기법이라 하여 camel case 라고도 합니다.
프로그램을 조금 변형해보겠습니다.
<소스 3a> multiTable2.jsp 내용
<%
// i: 단 변수
for (int i = 2; i <= 9; i++) {
// j: 곱수
for (int j = 2; j <= 9; j++) {
int k = i * j;
String row = i + " x " + j + " = " + k + "<br />";
%>
<%= row %>
<%
} // end for j
%><hr />
<%
} // end for i
%>
표현식 부분을 String 변수로 바꾸었습니다. 소스를 보니 k 변수가 없어져도 될 것 같습니다.
다음과 같이 또 바꿉니다.
<소스 3b> multiTable2.jsp 내용
<%
// i: 단 변수
for (int i = 2; i <= 9; i++) {
// j: 곱수
for (int j = 2; j <= 9; j++) {
String row = i + " x " + j + " = " + (i * j) + "<br />";
%>
<%= row %>
<%
} // end for j
%><hr />
<%
} // end for i
%>
k라는 변수를 없앴고, (i * j) 와 같이 대치했습니다.
문자열 연산에서는 숫자의 결과 때문에 괄호로 순서를 명시해주는 것이 필요합니다.
row를 메소드로 뽑아보겠습니다. 메소드(method)? 자바에서는 함수를 메소드라고 합니다.
메소드 이름은 getRow() 이고 인자는 i,j 입니다. 여기서 선언문의 예를 보여드리겠습니다.
<소스 3c> multiTable2.jsp 내용
<%
// i: 단 변수
for (int i = 2; i <= 9; i++) {
// j: 곱수
for (int j = 2; j <= 9; j++) {
String row = getRow(i, j);
%>
<%= row %>
<%
} // end for j
%><hr />
<%
} // end for i
%>
<%!
String getRow(int i, int j) {
return i + " x " + j + " = " + (i * j) + "<br />";
}
%>
선언문은 <%! 로 시작합니다. 메소드나 멤버변수를 선언할 수 있는데, 가능하면 메소드는 클래스로 보내버리고 멤버변수는 공유되기 때문에 함부로 사용하지 않는 것이 좋습니다. 즉 멤버변수의 남발은 원하지 않는 결과를 초래할 수 있습니다. 일단 이 정도만 기억해 두세요.
소스를 보니 row 변수도 for문 안에서 한 번만 쓰이네요. 없애보겠습니다.
<소스 3d> multiTable2.jsp 내용
<%
// i: 단 변수
for (int i = 2; i <= 9; i++) {
// j: 곱수
for (int j = 2; j <= 9; j++) {
%>
<%= getRow(i, j) %>
<%
} // end for j
%><hr />
<%
} // end for i
%>
<%!
String getRow(int i, int j) {
return i + " x " + j + " = " + (i * j) + "<br />";
}
%>
결과는 동일합니다. 같은 것을 표현하기 위해서 다양한 프로그래밍 방법이 있다는 것을 보여드렸습니다.
이 글에서는 표현식, 스크립틀릿, 선언문을 보았습니다.
다음 번에는 jsp 에서 클래스를 사용하는 법을 알아보겠습니다.