ASP 강의 시리즈(8) 컬렉션 사용
저자:Eve Cole
업데이트 시간:2009-05-30 19:59:11
대부분의 ASP 기본 제공 개체는 컬렉션을 지원합니다. 컬렉션은 문자열, 숫자, 개체 및 기타 값이 저장되는 곳입니다. 컬렉션은 항목이 저장되거나 검색될 때 컬렉션이 자동으로 확장되고 검색된다는 점을 제외하면 배열과 매우 유사합니다. 배열과 달리 컬렉션이 수정되면 항목의 위치가 이동됩니다. 항목은 이름, 인덱스 또는 컬렉션의 모든 항목을 순회하여 액세스할 수 있습니다.
이름 및 색인으로 항목에 액세스 항목 이름을 사용하여 컬렉션의 특정 항목에 액세스할 수 있습니다. 예를 들어, Contents 컬렉션은 Session 개체에 저장된 모든 변수를 보유합니다. 또한 Server.CreateObject에 의해 생성된 모든 개체를 소유합니다. 다음 사용자 정보가 Session 개체에 저장되어 있다고 가정합니다.
<%
Session.Contents("FirstName") = "샘"
Session.Contents("LastName") = "우우"
Session.Contents("나이") = 29
%>
컬렉션에 저장된 항목과 연결된 이름을 사용하여 항목에 액세스할 수 있습니다. 예를 들어 다음 식은 "Sam"이라는 문자열을 반환합니다.
<%= Session.Contents("FirstName") %>
항목과 관련된 색인이나 번호를 사용하여 항목에 액세스할 수도 있습니다. 예를 들어 다음 표현식은 Session 개체의 두 번째 저장소 슬롯에 저장된 정보를 검색하고 "Woo"를 반환합니다.
<%= 세션.컨텐츠(2) %>
ASP 컬렉션에는 1부터 번호가 매겨집니다. 컬렉션에 항목이 추가되거나 제거되면 항목과 관련된 인덱스가 변경됩니다. 따라서 항목의 색인이 변경되지 않은 상태로 유지된다고 가정할 수 없습니다. 다음 항목에서 설명하겠지만 인덱스를 사용한 액세스는 일반적으로 컬렉션을 탐색하거나 읽기 전용 컬렉션의 항목에 액세스하는 데 사용됩니다.
프로젝트는 단축 이름을 사용하여 액세스됩니다. ASP는 특정 순서로 개체와 관련된 컬렉션을 검색합니다. 특정 이름의 항목이 객체 컬렉션에서 한 번만 나타나는 경우 컬렉션 이름을 제거할 수 있습니다.
<%= 세션("이름") %>
Application 또는 Session 개체에 저장된 항목에 액세스할 때 일반적으로 컬렉션 이름을 제거하는 것이 안전합니다. 그러나 요청 개체의 경우 컬렉션에 중복된 이름이 포함될 가능성이 높으므로 컬렉션 이름을 지정하는 것이 좋습니다.
컬렉션 탐색 컬렉션의 모든 항목을 탐색하여 컬렉션에 저장된 항목에 대해 알아보거나 항목을 수정합니다. 컬렉션을 탐색할 때 컬렉션 이름을 제공해야 합니다. 예를 들어 VBScript의 For...Each 문을 사용하여 Session 개체에 저장된 항목에 액세스할 수 있습니다.
<%
'카운터 변수를 선언합니다.
희미한 항목
'컬렉션의 각 항목에 대해 해당 값을 표시합니다.
Session.Contents의 각 항목에 대해
응답.쓰기 세션.컨텐츠(항목) & "<BR>"
다음
%>
VBScript에서 For...Next 문을 사용하여 컬렉션을 반복할 수 있습니다. 예를 들어, 위 예에서 세션에 저장된 세 가지 항목을 나열하려면 다음 문을 사용합니다.
<%
'카운터 변수를 선언합니다.
희미한 항목
'counter 값이 3이 될 때까지 루프를 반복합니다.
항목 = 1 ~ 3
응답.쓰기 세션.컨텐츠(항목) & "<BR>"
다음
%>
컬렉션에 저장된 항목 수는 일반적으로 알려져 있지 않기 때문에 ASP는 컬렉션의 항목 수를 반환하는 컬렉션의 Count 속성을 지원합니다. Count 속성을 사용하여 카운터의 최종 값을 지정할 수 있습니다.
<%
'카운터 변수를 선언합니다.
희미한 항목
'카운터가 항목 수와 같아질 때까지 이 루프를 반복합니다.
'컬렉션에 있어요.
항목 = 1 - Session.Contents.Count
응답.쓰기 세션.컨텐츠(항목) & "<BR>"
다음
%>
스크립트에서 for 문을 사용하여 컬렉션을 반복할 수 있습니다. JScript for 문에서 Count 속성을 사용할 때 더 나은 결과를 얻으려면 Count 값을 지역 변수에 할당하고 해당 변수를 사용하여 최종 카운터 값을 설정해야 합니다. 이런 방식으로 스크립트 엔진은 반복될 때마다 Count 값을 조회할 필요가 없습니다. 다음 예에서는 이 기술을 보여줍니다.
<%
var 항목, 개수;
numitems = Session.Contents.Count;
for (항목 = 1; 항목 <= numitems; 항목++) {
Response.Write(Session.Contents(항목) + "<BR>")
}
%>
Microsoft JScript 3.0에는 Enumerator 개체가 도입되었습니다. 이 개체를 사용하여 ASP 컬렉션을 탐색할 수 있습니다. atEnd 메소드는 컬렉션에 아직 항목이 있는지 여부를 나타냅니다. moveNext 메소드는 컬렉션의 다음 항목으로 이동합니다.
<%
// 열거자 객체 생성
var mycoll = new Enumerator(Session.Contents);
//컬렉션을 반복하고 각 항목을 표시합니다.
동안(!mycoll.atEnd()) {
var x = mycoll.item();
Response.Write(Session.Contents(x) + "<BR>");
mycoll.moveNext();
}
%>
하위 키 모음을 반복하는 스크립트는 단일 쿠키에 관련 값을 포함시켜 브라우저와 웹 서버 간에 전송되는 쿠키 수를 줄입니다. 따라서 요청 및 응답 개체의 쿠키 컬렉션은 단일 항목에 여러 값을 가질 수 있습니다. 이러한 하위 항목 또는 하위 키워드는 개별적으로 액세스할 수 있습니다. Request.Cookies 및 Response.Cookies 컬렉션만 하위 키(Subkeys)를 지원합니다. Request.Cookies는 읽기 작업만 지원하고 Response.Cookies는 쓰기 작업만 지원합니다.
Request.Cookie 컬렉션의 모든 쿠키와 쿠키의 모든 하위 키(하위 키)를 열거할 수 있습니다. 그러나 하위 키가 없는 쿠키의 하위 키를 반복하면 결과가 생성되지 않습니다. .HasKeys 구문을 사용하여 먼저 쿠키에 하위 키가 포함되어 있는지 확인하면 이를 방지할 수 있습니다. 아래 예에서는 이 기술을 보여줍니다.
<%
'카운터 변수 선언
희미한 쿠키, 하위 키
'전체 쿠키 컬렉션을 표시합니다.
Request.Cookies의 각 쿠키에 대해
응답.쓰기 쿠키 & "<BR>"
Request.Cookies(Cookie).HasKeys인 경우
'하위 키 표시
Request.Cookies(쿠키)의 각 하위 키에 대해
Response.Write 하위 키 & "=" & Request.Cookies(쿠키)(하위 키) & "<BR>"
다음
또 다른
Response.Write "이 쿠키에는 하위 키가 없습니다 <BR>"
종료 조건
다음
%>
객체 컬렉션 반복
세션 및 애플리케이션 컬렉션은 정량적 변수 또는 개체 인스턴스를 보유할 수 있습니다. Contents 컬렉션은 Server.CreateObject를 호출하여 생성된 수량 변수와 개체 인스턴스를 보유합니다. StaticObjects 컬렉션은 Global.asa 파일의 HTML <OBJECT> 요소를 사용하여 생성된 개체를 보유합니다.
객체가 포함된 컬렉션을 반복할 때 객체의 식별자나 객체의 메서드 및 속성에 액세스할 수 있습니다. 예를 들어, 애플리케이션이 사용자 계정을 생성하기 위해 여러 개체를 사용하고 각 개체에 초기화 메서드가 있다고 가정하면 StaticObjects 컬렉션을 반복하여 각 초기화 메서드를 호출할 수 있습니다.
<%
Session.StaticObjects의 각 개체에 대해
Session.StaticObjects(객체).InitializeUser
다음
%>
ASP 컬렉션은 어떻게 다릅니까?
이 항목에서 설명하는 ASP 컬렉션은 Visual Basic의 Collection 개체와 매우 유사하지만 몇 가지 차이점이 있습니다. ASP 컬렉션은 Count 속성과 Item 메서드를 지원하지만 Add 및 Remove 메서드는 지원하지 않습니다.