백엔드

[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