백엔드
[JSP] 스크립트릿(<% %>) 과 선언(<%! %>) 차이
음그냥
2024. 10. 16. 02:34
728x90
반응형
SMALL
스크립트릿(<% %>)
스크립트릿(<% %>)으로 선언한 변수는 해당 블록 내에서만 유효
<%
String name = "Alice"; // 스크립트릿 내에서만 유효
%>
<%
// 이 블록 안에서는 name 변수를 사용할 수 있지만,
// 다른 메서드에서는 사용할 수 없음
out.println("이름: " + name);
%>
<%
// 새로운 스크립트릿 블록
// name 변수를 여기서는 사용할 수 없음
// out.println("이름: " + name); // 이 줄은 에러를 발생
%>
이 경우, 두 번째 스크립트릿 블록에서 name 변수를 사용하려고 하면 에러가 발생함
변수는 첫 번째 스크립트릿 블록 내에서만 유효하기 때문임
<%
// 메서드 정의 (이 블록 내에서만 유효)
String greet(String name) {
return "안녕하세요, " + name + "님!";
}
// 메서드 호출
String message = greet("Alice");
%>
<p><%= message %></p> <!-- 첫 번째 블록에서의 메서드 호출 성공 -->
<%
// 새로운 스크립트릿 블록
// greet 메서드를 여기서 호출하려고 하면 오류 발생
String anotherMessage = greet("Bob"); // 여기서 오류 발생
%>
메서드를 한번만 호출할거면 상관없음, But 여러번 호출할경우 스크립트릿으로 작성하면 첫번째 호출만 유효하고, 두번째호출부터는 오류가 발생하기때문에 선언<%! %> 으로 메서드를 선언해주는게 좋음
선언(<%! %>)
반면에, 선언(<%! %>)을 사용하면 클래스의 멤버 변수로 선언되어 여러 메서드에서 접근가능
<%!
String name; // 클래스 멤버 변수 선언
%>
<%
name = "Bob"; // 메서드 내에서 값 할당
%>
<p>이름: <%= name %></p> <!-- 여기서 사용 가능 -->
<%
// 또 다른 스크립트릿 블록
out.println("이름: " + name); // 여기서도 사용 가능
%>
name 변수는 클래스 멤버로 선언되어 있기 때문에 여러 메서드에서 접근할 수 있다. 따라서 같은 JSP 페이지 내에서 어떤 블록에서도 name 변수를 사용할 수 있다
<%!
String name; // 클래스 멤버 변수 선언
// 메서드 정의
public void setName(String newName) {
this.name = newName;
}
public String getName() {
return this.name;
}
%>
<%
setName("Charlie"); // 메서드 호출로 name 변수 설정
%>
<p>이름: <%= getName() %></p> <!-- 메서드를 통해 변수 사용 -->
728x90
반응형
LIST