자바(JAVA)/JSP 웹 프로그래밍 공부 (성낙현의 JSP 자바 웹 프로그래밍 참고)

JAVA/JSP 7. 내장 객체의 영역(Scope) - 정의, 데이터 전송 객체(DTO) 준비

개발학생 2023. 4. 15. 00:26
반응형

1. 내장 객체의 영역이란?

  • 내장 객체 중 4개는 ‘영역’ 개념을 갖고 있음 - 데이터를 저장하고 공유할 수 있는데, 각 영역에 저장된 데이터는 공유 범위가 서로 다름 → page 영역, request 영역, session 영역, application 영역이 있음
  • 각 내장 객체가 저장되는 메모리의 유효기간
  • 웹 애플리케이션은 페이지 단위로 구성되는데, 그래서 A페이지에서 선언한 변수에 B페이지로 이동한 후에도 접근하려면, 클래스 단위인 자바와는 조금 다르게 접근해야 함 → JSP에서는 영역을 통해 내장 객체에 저장된 속성 값을 공유할 수 있도록 함 (범위의 크기는 아래와 같음)

 

  • 사용법(API): 모두 같음-영역이 제공하는 주요 메소드 3가지 있음

void setAttribute(String name, Object value) Object getAttribute(String name) void removeAttribute(String name)

void setAttribute
(String name, Object value) 
Object getAttribute
(String name) 
void removeAttribute
(String name)
각 영역에 속성 저장
(첫 번째 인수는 속성 명,
두 번째 인수는 저장할 값)
영역에 저장된 속성 값을 얻어 옴 영역에 저장된 속성 삭제
값의 타입은 Object이므로
모든 타입의 객체 저장 가능
Object로 자동 형변환되어 저장되므로,      
원래 타입으로 형변환 후 사용
삭제할 속성명이 존재하지 않아도
에러 발생 X

 

  • 관련 학습 순서

 

2. 데이터 전송 객체(DTO) 준비

1) 데이터 전송 객체(DTO)란?

  • 주로 데이터를 저장하거나 전송하는 데 쓰이는 객체(다른 로직 없이 순수하게 데이터만을 담고 있음)
  • 데이터만 가지고 있는 객체라 하여, ‘값 객체’라고도 함
  • 자바로 작성한 소프트웨어 컴포넌트인 ‘자바빈즈(JavaBeans)’ 규약에 따르는 자바 클래스 [*JSP 파일이 아님!]
    (1) 자바빈즈는 기본(default) 패키지 이외의 패키지에 속해야 함
    (2) 멤버 변수(속성)의 접근 지정자는 private로 선언
    (3) 기본 생성자가 있어야 함
    (4) 멤버 변수에 접근할 수 있는 getter/setter 메소드가 있어야 함
    (5) getter/setter 메소드의 접근 지정자는 public으로 선언

 

2) ‘Person’이란 이름의 DTO 작성

(1) Person 클래스 생성

  • HelloJSP 프로젝트의 디렉토리 Java Resources → 디렉토리 src에서 마우스 우클릭 → [New] 클릭 → [Class] 클릭
  • 패키지명(Package) “common” 클래스명(Name) “Person”입력 후 [Finish] 클릭

(2) 자바빈즈 규약 1~3번 적용한 코드 작성

  • String 타입의 이름(name)과 int 타입의 나이(age) 멤버 변수를 private으로 선언 [규약 1~2번]
  • 기본 생성자 정의 [규약 3번]
  • 여기서 각 멤버 변수의 Getter와 Setter 메소드를 public으로 선언해주면 됨
//Person 클래스(규약 1~3번 적용한 버전)
package common;           // 기본 패키지 이외의 패키지(규약 1번)

public class Person {
    private String name;  // private 멤버 변수(규약 2번)
    private int age;      // private 멤버 변수(규약 2번)

    public Person() {}    // 기본 생성자(규약 3번)
    
}

(3) 자바빈즈 규약 1~5번 모두 만족하는 코드 작성(이클립스 자동 생성 기능)

  • 편집창에서 마우스 우클릭 → [Source] → [Generate Getters and Setters…] 선택
  • 다음 화면에서 [Select All] → [Generate] 클릭
  • +인수들을 받아 모든 속성을 한 번에 초기화해주는 생성자 추가
    • 편집창에서 마우스 우클릭 → [Source] → [Generate Constructor using Fields…] 선택
    • 다음 화면에서 [Select All] → [Generate] 클릭
//Person 클래스(완성 후, 코드는 보기 좋게 정리한 버전)
package common;           // 기본 패키지 이외의 패키지(규약 1번)

public class Person {
    private String name;  // private 멤버 변수(규약 2번)
    private int age;      // private 멤버 변수(규약 2번)

    public Person() {}    // 기본 생성자(규약 3번)
    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    // public 게터/세터 메서드들(규약 4번, 5번)
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

 

반응형