Creative Commons License

Microsoft .NET

닷넷!시작하기
닷넷! Ver 2.0~
닷넷!스킬업
웹개발
윈폼개발
실용모듈개발
Tip & Tech
하루 한 문법

Microsoft .NET 개발자들을 위한 공간입니다. 기초강의에서 부터 고급 기술 정보 및 팁등을 다루도록 하겠습니다.

.

닷넷!스킬업

닷넷 기술을 조금 더 깊이 다루고자 합니다. 특정 주제를 정하지 않고 이슈 발생 시 마다 체계적으로 정리하여 공유하겠습니다. 이전 자료를 옮겨온 곳이기도 합니다.

[Attribute] - 사용자정의 Attribute (개요)

작성자 : 박종명
최초 작성일 : 2008-05-30 (금요일)
최종 수정일 : 2008-05-30 (금요일)
조회 수 : 3051

지금까지 닷넷 내장 어트리뷰트에 대해 알아 보았다.
 
어트리뷰트 역시 필요에 의해 프로그래머가 직접 구현하여 사용할 수 있다.
사용자 정의 어트리뷰트를 어떻게 작성하느냐 보다 중요한 것은 어떤 목적으로 어트리뷰트를 정의해서 사용하는지, 어떻게 디자인 하는지 일 것이다.

이번 글에서는 사용자 정의 어트리뷰트의 작성법과 간단한 데모를 알아보자.
 
* 개요
대부분은 직접 정의한 어트리뷰트를 사용하지 않을지도 모른다.
하지만 직접 비지니스 프레임워크를 개발한다던지, 엔트프라이즈급 프로젝트에 특수한 목적의 공용모듈을 만들때 적절히 사용할만 할 것이다.

사용자 정의 어트리뷰트의 사용 목적과 디자인은 수행하는 프로젝트의 성격과 개발경험, 그리고 잘 짜여진 닷넷 내장 어트리뷰트의 내면을 보다 상세히 들여다 봄으로써 그 필요성을 느끼게 될 것이다.
 
사용자 정의 어트리뷰트를 만든다는 것은 결국 하나의 클래스를 만드는 것이다.
(결국 어트리뷰트가 사용되는 것은 그 어트리뷰트 객체의 생성자가 호출되는 것이다.)

이 클래스와 어트리뷰트를 선언한 엔티티(클래스,메서드,속성등) 와의 유기적인 결합으로 특수한 목적을 달성하게 하는 것이다.
 
* 사용자 정의 어트리뷰트 작성시 반드시 지켜야 할 사항

1) System.Attribute 를 상속하는 클래스를 만든다

2) 이 클래스의 생성자 매개변수는 반드시 컴파일 시점에 결정될 수 있는 형식이어야 한다.
    : 어트리뷰트는 어셈블리의 메타데이터에 함께 저장되기 때문에 런타임에 결정되는 인스턴스와 같은 것은 매개변
      수로 전달될 수 없다.
 

* 사용자 정의 어트리뷰트를 위한 어트리뷰트
사용자 정의 어트리뷰트를 만들때에도 닷넷 내장 어트리뷰트를 사용해야 한다. 
 

AttributeUsageAttribute 
 
어트리뷰트의 다음과 같은 용도를 지정한다.

  1) 어트리뷰트 적용 범위(적용 대상 정의) , ex: [AttributeUsage(AttributeTargets.Class)]
      - 어트리뷰트는 클래스,메서드,속성,이벤트 등등에 적용할 수 있다. 이 것을 어트리뷰트의 적용 범위라 할 수
        있는데 이에 대한 제약(적용 대상)을 설정한다.
      - AttributeTargets 열거형으로 그 범위를 지정한다. 다음 표는 AttributeTargets  열거형 값을 보여준다          

멤버 이름

설명

All

특성은 모든 응용 프로그램 요소에 적용할 수 있습니다.

Assembly

특성은 어셈블리에 적용할 수 있습니다.

Class

특성은 클래스에 적용할 수 있습니다.

Constructor

특성은 생성자에 적용할 수 있습니다.

Delegate

특성은 대리자에 적용할 수 있습니다.

Enum

특성은 열거형에 적용할 수 있습니다.

Event

특성은 이벤트에 적용할 수 있습니다.

Field

특성은 필드에 적용할 수 있습니다.

Interface

특성은 인터페이스에 적용할 수 있습니다.

Method

특성은 메서드에 적용할 수 있습니다.

Module

특성은 모듈에 적용할 수 있습니다.

참고    Module은 이식 가능한 실행 파일(.dll 또는 .exe)을 참조하며 Visual Basic 표준 모듈이 아닙니다.

Parameter

특성은 매개 변수에 적용할 수 있습니다.

Property

특성은 속성에 적용할 수 있습니다.

ReturnValue

특성은 반환 값에 적용할 수 있습니다.

Struct

특성은 구조체 즉, 값 형식에 적용할 수 있습니다.


 
2) 어트리뷰트의 중복 적용 가능 여부 , ex) [AttributeUsage(Attribute.Class),AllowMultiple=true)]
     - AttributeUsageAttribute 클래스의 AllowMultiple 속성을 이용하여 해당 어트리뷰트가 중복해서 적용가능하지를
       설정한다. 만일 중복을 허용한다면 아래와 같은 형태로 사용되어 질 것이다.
       [Test("parm")]
       [Test("parm")]
       public class ...
 
  3) 선언된 어트리뷰트가 상속될지에 대한 여부, ex) [AttributeUsage(Attribute.Class),Inherited=true)]
     - AttributeUsageAttribute 클래스의 Inherited 속성을 이용하여 이 어트리뷰트를 사용하는 클래스의 자식 클래스
       에게 어트리뷰트도 같이 상속되도록 설정할 수 있다

 

이름
비밀번호
홈페이지
UJ <- 왼쪽의 문자를 오른쪽 박스에 똑같이 입력해 주세요