달력

122021  이전 다음

  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  

처음으로 JSP프로그램을 짜본 기분이 어떠신가요? 일단 환경 구축하고 hello.jsp와 date.jsp 파일을 만들어서 브라우저에서 결과를 보셨으면 잘 따라오셨습니다.

질문 하나, 프로그램이 뭘까요? What is program?

구글신에게 질문해보니 다음과 같은 해석을 보여주네요.

define:program
(computer science) a sequence of instructions that a computer can interpret and execute;
컴퓨터가 이해하고 실행할 수 있는 일련의 지시사항
대략 감이 오시나요? 프로그램의 기본은 세 가지입니다.
  1. 변수 (Variable)
  2. 제어 (Control)
  3. 반복 (Loop)

변수란 값을 담아 둘 수 있도록 알아보기 쉽게 이름을 붙인 메모리 공간 이름입니다.
제어란 프로그램의 흐름을 조절하는 것인데, if then else 와 같이 만약 ~라면 ~해라 라고 지정할 수 있습니다.
반복이란 같은 동작을 지정한 조건만큼 수행하도록 합니다.
너무 단순화 시켜서 얘기한 것 같지만 이 세 가지만 터득하면 어떤 언어든 간에 기초는 따고 들어갑니다.

앞서 hello.jsp 파일을 복사해서 hello2.jsp 파일을 만들고, 여기에 변수를 사용해보겠습니다.
<소스 1> hello2.jsp 내용

처음 만든 JSP입니다.
<% int c = 123 * 7 ; %>
<%= c %>

조금 복잡해졌습니다. 결과는 아까와 동일합니다. 표현식에 있던 것이 스크립틀릿(scriptlet)사이로 옮겨가면서 c라는 정수형 변수를 사용했습니다. 모두 소문자입니다. 자바가 대소왕자, 아니, ^^; 대소문자에 예민하다는 것 잊지 마세요.
스크립틀릿 안에는 자바 문장이 들어갑니다. 자바 문장은 항상 세미콜론(;)으로 끝납니다.
그래서 7 뒤에 ; 이 붙어있는 것이죠. 스크립틀릿과 표현식의 차이는 <% %> 사이의 = 입니다. =<%= 처럼 딱 붙어 있어야 됩니다. 스크립틀릿은 <% %>로 구분될 수 있습니다.

만만한 구구단 프로그램을 짜 볼까요?
<소스 2> multiTable.jsp 내용

구구단입니다. <br />
<%
   // 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 내용

구구단입니다. <br />
<%
   // 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 내용
구구단입니다. <br />
<%
   // 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 내용
구구단입니다. <br />
<%
   // 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 내용
구구단입니다. <br />
<%
   // 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 에서 클래스를 사용하는 법을 알아보겠습니다.
Posted by 케누 kenu허광남
TAG

댓글을 달아 주세요