'Register'에 해당되는 글 2건

Programming/.NET
ASP.NET 지시문은 기본적으로 컴파일러가 페이지를 컴파일시 사용하는 것으로 페이지 처리를 제어하는데 사용합니다.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
위는 Page 지시문의 예로서 보시는 바와 같이 <%@로 시작해 %>로 끝나며 해당 지시문이 페이지안에 어디에 있건 상관이 없으나 통상 페이지의 상단에 위치합니다.

아래 표 1-1은 사용가능한 지시문의 목록과 용도를 나열한 것입니다.

 Assembly  어셈블리를 페이지나 사용자 정의 컨트롤과 연결 접근할 수 있도록 합니다.
 Control  사용자 정의 컨트롤에서 사용
 Implements  닷넷 프레임워크 인터페이스 구현
 Import  페이지나 컨트롤에 네임스페이스 참조추가
 Master  마스터 페이지에서 사용
 MasterType  마스터 페이지에서 사용 - 페이지 파싱및 컴파일시
 OutputCache  페이지나 컨트롤의 캐시정책 제어
 Page  페이지 파싱및 컴파일시 특정 속성 지정
 PreviousPageType  다른 페이지와의 포스트백 수행시 사용하며 포스팅되어 오는 페이지를 지정합니다.
 Reference  페이지나 컨트롤을 현재 페이지나 컨트롤에서 사용할 수 있도록 연결
 Register  사용자 지정컨트롤 연결및 접두사 지정하는 것으로 사용자 정의 컨트롤 등록시 지정된 별칭을 통해 해당 컨트롤에 접근할 수 있도록 합니다.
<표 1-1>

예를 들어 OutputCache 의 경우 다음과 같이 지시문을 작성할 수 있으며
<%@ OutputCache Duration="10" VaryByParam="None" %>
이 지시문은 10초동안 서버의 메모리에 페이지를 캐시하도록 합니다. 해당 지시문을 사용하는 페이지가 마스터페이지를 사용하는 경우라면 마스터페이지까지도 캐시정책에 포함되는데 참고로 마스터는 OutputCache 를 지정할 수 없습니다.

1. Page 주요 속성

(1) AspCompat

페이지를 STA(Sing-Threaded Apartment)로 실행할지를 지정합니다.

(2) Async

페이지의 동기/비동기 처리여부를 지정합니다.

(3) AsyncTimeout

Async가 비동기로 설정된 경우 처리완료대기 시간을 설정합니다. 기본값은 45초입니다.

(4) AutoEventWireup

다중속성이 아닌 단독속성으로 설정해야 하며 이 값을 false로 지정하는 경우 페이지내에서 이벤트를 정의하면 인라인형태로 이벤트가 연결됩니다.

(5) Buffer

HTTP응답 버퍼링을 설정합니다.

(6) ClientIDMode

페이지내에서 사용된 서버컨트롤의 ID지정 모드를 설정합니다. 기본값은 AutoID입니다.

(7) CompilationMode

페이지의 컴파일처리를 설정합니다. 기본값은 Auto입니다.(컴파일이 필요한 경우가 아니면 컴파일 하지 않습니다.)

(8) Description

페이지에 설명을 추가합니다. 컴파일설정과는 관련이 없으며 개발자 임의의 메모부분입니다.

(9) EnableEventValidation

포스트백및 콜백시 이벤트의 유효성을 검사할지 여부를 설정합니다.

(10) EnableSessionState

페이지에서 세션상태기능을 사용할지 지정합니다. 기본값은 true입니다.

(11) EnableTheming

페이지의 테마기능을 사용할지 지정합니다. 기본값은 false입니다.

(12) EnableViewState

페이지간의 뷰상태를 유지할지 지정합니다. 기본값은 true입니다.

(13) EnableViewStateMac

페이지간에 포스트백 발생시 뷰 상태에 대해 MAC(Machine Authentication Check)를 확인해야 하는지를 지정합니다. 기본값은 false입니다.

(14) ErrorPage

해당 페이지에서 오류발생시 표시할 페이지를 지정합니다.

(15) MaintainScrollPosttionOnPostback

페이지에서 포스트백이 발생된 이 후 페이지를 이전 스크롤상태에 위치시킬지 지정합니다.

(16) MetaDescription

검색엔진 최적화용으로 페이지의 설명을 설정합니다.

(17) MetaKeywords

검색엔진 최적화용으로 페이지의 키워드를 설정합니다.

(18) StylesheetTheme

페이지의 테마기능 사용시 해당 테마의 디자인이 정의된 Stylesheet 파일을 지정합니다. StylesheetTheme속성은 페이지의 서버컨트롤에 이미 정의된 스타일이 존재하는 경우에는 적용되지 않습니다.

(19) Theme

페이지의 테마기능 사용시 해당 테마의 디자인이 정의된 테마파일을 지정합니다. Theme속성은 페이지의 서버컨트롤에 이미 정의된 스타일이 존재하는 경우 기존 스타일을 무시하고 새롭게 스타일을 정의하도록 합니다.

(20) Title

페이지의 제목을 지정합니다. html에서 <title></title>과 같습니다.

(21) Trace

페이지 디버깅및 성능을 위한 페이지 추적기능을 사용할 수 있도록 설정합니다. 이 속성을 true로 하고 페이지를 실행하면 다음과 같은 추적결과가 표시됩니다.

 


(22) TraceMode

Trace를 사용할 경우 어떤 형태로 항목을 표시할지 설정합니다.

(23) Transaction

페이지에 트랜잭션 사용여부를 설정합니다.

(24) ValidateRequest

페이지안에 폼입력 데이터의 위험성 여부를 검증할지 지정합니다. 이 기능을 켜면 javascript등의 잠재적 위험이 있는 입력값이 존재하는 경우 요청을 처리하지 않도록 합니다.

(25) ViewStateEncryptionMode

페이지에서 뷰상태 암호화 방법을 지정합니다.

(26) WarningLevel

페이지 컴파일시 경고표시 수준을 지정합니다.

2. Master 주요 속성

(1) CompilerOptions

마스터 페이지 컴파일시 특정 옵션내용을 지정합니다.

(2) Inherits

마스터 페이지의 코드숨김 파일을 지정합니다.

(3) MasterPageFile

마스터 페이지에서 또 다른 마스터페이지를 사용하는 경우 해당 마스터페이지를 지정합니다.

3. Import 주요 속성

(1) Namespace

네임스페이스 참조를 지정합니다. Import 지시자는 Namespace 속성을 하나만 가질 수 있으며 여러 네임스페이스를 지정해야 하는 경우 Import 지시문을 다음과 같이 필요한 만큼 작성해야 합니다.
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Web" %>
C:\Windows\Microsoft.NET\Framework\v4~~~\Config 에 위치해 있는 web.config에는 이미 기본적으로 여러개의 네임스페이가 정의되어 있으며 필요하면 추가하거나 삭제할 수 있습니다. 물론 프로젝트의 Web.config에도 다음과 같이 system.web안에 설정이 가능합니다.
<pages>
    <namespaces>
        <add namespace="System.Data"/>
     </namespaces> 
</pages>
4. Register 주요 속성
<%@ Register TagPrefix="clt" Namespace="clt.myClass" Assembly="cltLib" %>
(1) TagPrefix

별칭을 지정합니다.

(2) Assembly

TagPrefix와 연결되는 컨트롤의 어셈블리를 지정합니다.

(3) Namespace

TagPrefix와 연결된 컨트롤의 네임스페이스를 지정합니다.

(4) Src

컨트롤의 위치지정를 지정합니다.

(5) TagName

컨트롤의 클래스와 연결되는 별칭을 지정합니다.

5. Assembly

(1) Name

어셈블리 이름입니다. 이때 어셈블리 이름이 aaa.dll 인 경우 .dll의 확장명은 지정하지 않습니다.

(2) Src

어셈블리 파일 위치를 지정합니다.

6. PreviousPageType

(1) TypeName

포스트백이 일어나는 클래스 이름입니다.

(2) VirtualPath

포스트백을 전달받을 페이지 위치를 지정합니다.

7. MasterType

(1) TypeName

연결될 마스터페이지의 클래스 이름을 지정합니다.

(2) VirtualPath

연결할 해당 마스터페이지의 위치를 지정합니다.

10. OutputCache

(1) CacheProfile

web.config 에서 캐시관련 정책을 설정하고 해당 프로필의 이름을 이 속성에 설정하면 web.config에서 프로젝트 웹사이트 전체캐시관련 설정을 제어할 수 있게 됩니다.

(2) Duration

캐시 지속시간을 초단위로 설정합니다.

(3) NoStore

페이지에 no-store 헤더 전송 여부를 설정합니다.

(4) SqlDependency

SQL 서버 캐시 무효화 기능 사용여부를 설정합니다.

8. Reference

(1) VirtualPath

컴파일 대상인 페이지나 컨트롤의 위치를 설정합니다.

'Programming > .NET' 카테고리의 다른 글

[ASP.NET] 폴더 구조  (1) 2013.12.12
[ASP.NET] Label  (0) 2013.12.11
[ASP.NET] 빌드공급자  (0) 2013.12.10
[ASP.NET] 페이지 구조  (0) 2013.12.09
[ASP.NET] 지시문  (0) 2013.12.07
[ASP.NET] 포스트백(PostBack)  (0) 2013.12.05
0 0
Programming/C C++

1. 지역변수

함수안에서 정의되고 함수안에서 사용되는 변수를 지역변수라고 합니다. Program내에서 함수가 여러개 존재할 경우 각 함수내부에 쓰인 변수는 다른 함수에서 쓰인 지역변수와 이름이 같다 하더라도 충돌하지 않으며 가장 일반적인 변수형이라고 할 수 있습니다.

#include <stdio.h>

main()
{
  int i = 100;
 
  printf("main함수의 지역변수 i값 : %d\n", i);
 
  myfunc();
}

myfunc()
{
  int i = 200;
 
  printf("myfunc함수의 지역변수 i값 : %d\n", i);
}


main과 exfunc에서 i라는 같은 이름의 변수를 사용했지만 충돌하지 않고 정상적으로 실행됩니다.


또한 지역변수는 함수내부에서만 사용되어야 하므로 다른 함수에서 쓰인 지역변수를 가져올 수는 없습니다.(예를 들면 main함수에서 exfunc함수안에 쓰인 지역변수 i를 가져오지 못합니다.)

참고:
함수안에서 지역변수를 선언하려면 원래는 auto i; 처럼 auto를 붙여야 하지만 생략하는 것이 관례화 되었습니다.

2. 전역변수

Program내에서 하나의 변수를 각각 다른 함수에서 공유하고자 한다면 전역변수를 써야합니다. 전역변수는 특정함수가 아닌 함수외부에 선언되며 이렇게 선언된 변수를 전역변수로 인식하게 됩니다.

선언된 전역변수는 각 함수에서 얼마든지 접근이 가능합니다. 이때 어떤 함수에서 전역변수의 값을 변경하면 다른함수에서 해당 전역변수를 사용시에도 이전에 설정되었던 값이 그대로 유지될 수 있습니다.

#include <stdio.h>

int i;

main()
{
  i = 100;
 
  printf("main함수의 전역변수 i값 : %d\n", i);
 
  myfunc();
}

myfunc()
{
  i += 200;
 
  printf("myfunc함수의 전역변수 i값 : %d\n", i);
}


변수i는 Program내에서 함수외부에 선언되었으므로 전역변수로 인식합니다. 또한 선언된 전역변수는 이름이 특정 함수안에서 선언된 지역변수와 이름이 같다 하더라도 충돌하지 않습니다. 다만 전역변수와 지역변수의 이름을 동일하게 쓰는것은 권장하지 않습니다.(지역변수와 전역변수의 이름이 같은경우 함수안에서 접근된 변수는 지역변수로 인식됩니다.)


전역변수는 Program자체가 종료되어야 Memory상에서 제거되므로 각 함수에서 설정된 값이 그대로 유지되고 있습니다.

이때 만일 다른 Module에서 전역변수 불러오려면 Extern을 사용합니다.

#include <stdio.h>

int i;

main()
{
  i = 100;
 
  printf("main함수에서의 전역변수 i값 : %d\n", i);
 
  myfunc();
}위 Program을 test.c 라는 이름으로 저장합니다.
#include <stdio.h>

extern int i;

myfunc()
{
  i += 100;
 
  printf("extern함수에서 불러온 전역변수 i값 : %d\n", i);
}


위 Program을 test2.c 라는 이름으로 저장합니다.(이 Program에서는 extern int i;라는 이름으로 main에서 쓰인 전역변수 i를 참조하려고 합니다.)


test.c와 test2.c를 Compile합니다.


Compile된 Program은 test.exe라는 이름으로 생성되었습니다.

Program은 main함수에서 전역변수 i의 값을 100으로 설정하고 다른 Module에서 작성된 myfunc함수에서 i값을 다시 100만큼 더하여 그 결과를 나타내고 있습니다. 이런형태의 변수는 extern로 선언한다하여 외부변수라고 합니다.

단, 전역변수의 참조는 함수밖에서 extern을 통해 선언하고 참조하는데 만일 함수내부에서 extern을 사용한다면 그 변수는 해당 함수안에서만 사용할 수 있게 됩니다.

#include <stdio.h>

myfunc()
{
  extern int i;
  i += 100;
 
  printf("extern함수에서 불러온 전역변수 i값 : %d\n", i);
}

exfunc()
{
  i = 300;
}


전역변수 i가 myfunc함수안에서 선언되었습니다. 따라서 전역변수 i는 myfunc안에서만 쓸 수 있습니다. exfunc함수에서 i에 300값을 저장하려고 하지만 실제 이렇게 사용될 수는 없는 것입니다.

3. 정적변수

지역변수는 함수안에서 쓰이고 해당 함수가 종료되면 그 안에서 쓰이던 전역변수도 Memory상에서 제거됩니다. 반면 전역변수는 함수 외부에서 선언되는 변수로서 함수가 아닌 Program전체가 종료되어야 Memory상에서 제거됩니다.

C에서는 이 지역변수와 전역변수의 특징을 모두 가지는 정적변수라는 것이 있습니다. 즉, 특정 함수안에서 선언되고 그 함수안에서 쓰이지만 함수의 동작이 종료되어도 해당 변수는 제거되지 않고 그대로 유지되는 특징을 가지고 있는 것입니다.

정적변수는 정적변수를 쓰고자 하는 함수안에서 static으로 선언됩니다.

#include <stdio.h>

main()
{
  printf("myfunc함수 호출 - 1\n");
  myfunc();
  printf("myfunc함수 호출 - 2\n");
  myfunc();
}

myfunc()
{
  static i = 0;
 
  i += 100;
 
  printf("myfunc함수의 정적변수 i값 : %d\n", i);
}


main함수에서 myfunc함수를 두번 호출하여 정적변수 i값을 확인하고 있습니다. myfunt함수에서는 변수 i를 static으로선언하였습니다. 따라서 변수i는 정적변수가 됩니다.


정적 변수로 선언된 i는 myfunc함수의 사용이 종료되어도 Memory에서 제거되지 않고 그 값이 그대로 유지되고 있습니다. 정적변수도 전역변수와 마찬가지로 Program자체가 종료되어야 Memory에서 제거됩니다.

4. block내에서의 변수 선언

C언어는 원래 Program의 처음 부분에 변수를 선언하고 사용해 합니다. 다시 말해 Program중간에 변수를 선언하는것은 불가능하다는 것입니다.

#include <stdio.h>

main()
{
  int a;
 
  a = 100;
 
  printf("a값 %d\n", a);
 
  int b;
  b = 100;
}


Program중간에 int형 변수 b를 선언하지만 C에서 이러한 방법은 허용하지 않습니다.


하지만 예외적으로 새로운 변수를 Program중간에 허용하는 경우도 있습니다. 특정 Block안의 '{}'범위안에서 선언되는 변수가 그것입니다.

#include <stdio.h>

main()
{
  int a;
 
  for(a = 10; a > 0; a--){
    int b;
    b = 20;
   
    printf("일반 변수 a의 값 : %d\n", a);
    printf("{}범위안의 변수 b의 값 : %d\n", b);
  }
}


for문을 작성하고 {와 }로 for의 범위를 block화 하였습니다. 그리고 이 범위안에 새로운 변수인 b를 선언하였습니다.


단, blcok변수는 해당 block안에서만 유효합니다. 즉, block밖에서는 해당 변수에 접근할 수 없습니다.

만일 block안에 선언한 변수와 외부의 일반변수의 이름이 같은 상황이 되면 block안에서 사용하는 변수에 우선권이 주어지게 됩니다.

#include <stdio.h>

main()
{
  int a;
 
  for(a = 10; a > 0; a--){
    int a;
    a = 20;
   
    printf("일반 변수 a의 값 : %d\n", a);
  }
}


일반변수와 block변수를 같은 이름으로 선언하고 for문의 block안에서 a변수를 사용하고 있습니다. 이런 경우 block안에서 선언한 변수에 접근하는 것이 됩니다.


일반 변수가 아닌 block안에서의 변수값이 출력되고 있습니다.

5. 전역변수의 정적(static)화

전역변수를 선언하면 해당 변수는 다른 Module에서도 extern을 통해 볼러 올 수 있다고 하였습니다. 그런데 만일 두개의 서로 다른 Module에서 같은 이름의 전역변수를 사용하게 되면 어떻게 될까요?

#include <stdio.h>

int a;

main()
{
  a = 100;
 
  printf("a의 값%d\n", a);
}


전역변수 a를 선언하고 test.c라는 이름으로 저장합니다.

#include <stdio.h>

int a;

myfunc()
{
  i = 200;
  printf("i의 값 %d\n");
}


전역변수 a를 선언하고 test2.c라는 이름으로 저장합니다.

test.c와 test2.c에 전역변수 a가 같은 이름으로 선언되었습니다. 이렇게 하는 원래의 목적은 외부(다른 Module)에서 참조할 필요는 없고 해당 Module안에서만 쓰이도록 하고자 하였는데 위 예제에서는 이름이 같아져서 혼란을 줄 우려가 생긴 것입니다.

이 문제를 해결하려면 전역변수 앞에 static을 붙여야 합니다. 그러면 다른 Module끼리 해당 전역변수가 공유되지 않고 해당 변수가 선언된 Module안에서만 사용한다는 것을 명시해 주게 됩니다.


참고:
실제 Microsoft C로 위 Source를 Compile해본결과 static이 있든 없든 별다른 오류는 발생하지 않았습니다. 하지만 그렇다고 각 Module간에 아무런 제약없이 같은 이름의 전역변수를 쓰는건 그리 권장할 만한 방법이 아닙니다. 같은 이름을 써야 한다면 static붙여 각 Module끼리 서로 공유하지 않는다라는 것을 명시해 주는것이 유지보수에 도움이 될것입니다.

6. register변수

지역, 전역, 정적 변수모두 선언하는 즉시 선언된 변수의 Data형 만큼 Memory공간을 확보하게 됩니다.

그런데 변수 선언시 register를 사용하면 해당 변수는 Memory가 아닌 CPU의 Register에 그 영역이 확보됩니다.

잘알고 계시겠지만 Memory와 Register는 속도면에서 상당한 차이가 있으며 일반적으로 Memory는 빠른 속도의 Register를 따라오지 못합니다. 결국 일반적인 변수보다 register변수가 더 빨리 처리될 수 있는 것입니다.

#include <stdio.h>

main()
{
  register i = 0;
 
  for (i = 0;i <= 1000; i++)
    printf("변수 i값 : %d\n", i);
}


변수i를 register로 선언하였습니다.


참고:
만일 register로 선언된 변수가 너무 많거나 Data형이 커서 해당 Computer의 Register가 감당할 수 없는 경우에는 auto(지역변수)로 처리하게 됩니다.

'Programming > C C++' 카테고리의 다른 글

[C, C++] Microsoft C, C++ Compiler  (0) 2010.01.22
[C, C++] Class 상속  (0) 2010.01.13
[C, C++] 함수작성및 Data전달  (0) 2010.01.07
C언어 함수사용 예제 Souce  (0) 2010.01.06
[C, C++] Pointer  (0) 2010.01.05
[C, C++] 변수통용범위(변수의 기억 Class)  (0) 2010.01.04
0 0
1
블로그 이미지

클리엘