C#에서 속성(Attribute)은 무엇인가요?
_____A1: 속성(Attribute는 메타데이터 형태로, 코드의 클래스, 메서드, 속성, 필드 등에 추가 정보를 제공하는 기능입니다. 이를 통해 컴파일러나 런타임, 도구가 해당 요소에 대한 추가 동작이나 정보를 참고할 수 있게 합니다.
Q2: 속성(Attribute)은 어떻게 사용하나요?
A2: 속성은 대괄호 `[ ]` 안에 속성 이름을 적어 적용합니다. 예를 들어, `[Serializable]`을 클래스 선언문 위에 붙이면 해당 클래스가 직렬화 가능하다는 의미입니다.
```csharp
[Serializable]
public class Person
{
public string Name { get; set; }
}
```
Q3: 속성은 언제 주로 사용되나요?
A3: 다음과 같은 경우에 많이 사용됩니다.
- 코드 요소에 대한 추가 정보를 제공할 때
- 런타임에 리플렉션을 통해 정보를 읽을 때
- 특정 동작을 컴파일러나 프레임워크에 지시하고자 할 때 (예: 직렬화, 권한 검사 등)
- 코드 생성, 문서화 도구에서 메타데이터 활용 시
Q4: 사용자 정의 속성은 어떻게 만드나요?
A4: `System.Attribute` 클래스를 상속해서 새 속성 클래스를 만듭니다. 이름은 보통 `Attribute` 접미사로 끝나며, 사용 시에는 접미사 생략 가능하다.
```csharp
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MyCustomAttribute : Attribute
{
public string Info { get; }
public MyCustomAttribute(string info)
{
Info = info;
}
}
```
사용 예:
```csharp
public void DoSomething() { }
```
Q5: `AttributeUsage` 속성은 무엇인가요?
A5: 사용자 지정 속성이 적용 가능한 대상(클래스, 메서드, 속성 등)과 허용 횟수, 상속 여부 등을 제한하는 데 사용됩니다.
```csharp
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
```
Q6: 런타임에서 속성 정보를 어떻게 읽나요?
A6: 리플렉션을 사용해 속성이 붙은 요소에서 정보를 읽을 수 있습니다.
```csharp
var methodInfo = typeof(MyClass).GetMethod("MyMethod");
var attrs = methodInfo.GetCustomAttributes(typeof(MyCustomAttribute), false);
if (attrs.Length > 0)
{
var myAttr = (MyCustomAttribute)attrs[0];
Console.WriteLine(myAttr.Info);
}
```
Q7: C 내장 주요 속성에는 어떤 것들이 있나요?
A7: 대표적으로 다음과 같습니다.
- `[Serializable]`: 클래스가 직렬화 가능함을 표시
- `[Obsolete]`: 더 이상 사용되지 않는 멤버임을 경고
- `[DllImport]`: 외부 DLL 함수를 호출할 때 사용
- `[DebuggerStepThrough]`: 디버거에서 내부 코드 단계를 건너뛰도록 지정
Q8: 속성을 사용하는 주의점은 무엇인가요?
A8:
- 속성은 메타데이터로 동작하므로, 너무 남발 시 코드 가독성이나 유지보수에 방해가 될 수 있습니다.
- 런타임에 리플렉션 비용이 있으므로 빈번한 호출 시 성능 영향을 고려해야 합니다.
- 적절한 대상과 옵션으로 속성을 제한하는 것이 권장됩니다.
---
요약하자면, C 의 속성(Attribute)은 코드에 부가적인 정보를 메타데이터 형태로 제공하여 컴파일러, 런타임, 분석 도구 등이 코드 요소를 이해하고 처리하는 데 도움을 주는 강력한 기능입니다. 사용자 정의를 통해 자신의 요구에 맞는 맞춤형 메타데이터를 만들 수도 있습니다.
작성자:
최윤재 [비회원]
| 작성일자: 1년 전
2024-09-09 08:39:13
조회수: 177 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 177 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.