coyojo10의 개발블로그!
servlet 정리 멤버변수와 지역변수 본문
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 객체를 공유해서 쓰기 때문이다.
즉 서블릿 객체 내에서 멤버변수를 쓰면 무결성을 보장할 수 없다.
반면에 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 |