Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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
Archives
Today
Total
관리 메뉴

coyojo10의 개발블로그!

servlet 정리 멤버변수와 지역변수 본문

백엔드

servlet 정리 멤버변수와 지역변수

coyojo 2022. 12. 3. 18:20

Servlet클래스에 선언되는 멤버변수는 메모리에 공유가되고 

 

여러 브라우저에서 요청이 전달되면 하나의 Servlet 객체를 공유하여 수행합니다.

 

< 예시 >

package basic;
@WebServlet("/member")
public class MemberTestServlet extends HttpServlet{
   String str;  //=> method안에 안쓰고 클래스 블럭에 선언했으니 멤버변수
                      //멤버변수로 선언하면 메모리에 공유하게 된다! 
   

protected void doGet(HttpServletRequest req,HttpServletResponse res)
           throws ServletException,IOException{

                 //  메소드 내부인 이곳에 선언하면 지역변수 

          }

 

 

위 이미지에서 실행결과를 보면 두개의 브라우저에 각각 sendmessage로 kim과 lee를 전달했는데

 

먼저 실행한 kim이 실행되다가 뒤에 실행된 lee가 같이 실행되면서

 

kim을 요청한 쪽에서 갑자기  lee가 계속 출력되는 것을 볼 수 있다

.

하나의 servlet 객체를 공유해서 쓰기 때문이다. 

 

즉 서블릿 객체 내에서 멤버변수를 쓰면 무결성을 보장할 수 없다. 

 

(왼쪽) spring을 sendmessage로 전달     (오른쪽)  java를 sendmessage로 전달

 

반면에 Servlet클래스내에 메소드 내부에 지역변수로 선언한 경우에는 

 

각 브라우저 요청에 대하여 메모리 영역을 개별적으로 할당하여 사용하므로

 

결과값이 일정하게 나온다.

 

다시말해 ,

멤버변수는 힙(heap)이라는 메모리 영역에 할당하고

 

지역변수는 메서드가 호출되어 수행하는 동안 스택(stack)이라는 메모리 영역에 할당하고

 

메서드 호출이 끝나면 해제된다.

'백엔드' 카테고리의 다른 글

JSP - forward, include 정리  (1) 2022.12.10
JSP 정리  (0) 2022.12.06
Servlet 정리 2  (0) 2022.11.30
Servlet 정리  (0) 2022.11.29
JDBC - Connection 관리를 위한 클래스 작성 실습  (0) 2022.11.29