무효 클릭 IP 추적 중...
c#

[c#] Attribute(어트리뷰트) 란?

꼬예 2022. 5. 16.

c#에서 Attribute코드에 대한 부가정보를 기록하는것입니다.

 

부가정보? 그냥 주석으로 적으면 되지 않나? 라는 의문이 드시는 분도 있을건데요.

주석인간만 읽을 수 있지만, 이 Attribute컴퓨터도 읽을 수 있습니다.

 

이게 무슨말인지는 차차 설명드리겠습니다.

 

 

 

Obsolete 어트리뷰트 사용 예시

우선 어트리뷰트의 예시로 c#의 빌트인(내장) 어트리뷰트 중 하나인 Obsolete를 소개하겠습니다. 

함수 위 대괄호 내부에 Obsolete라는 것이 보이실텐데요.

 

생긴게 조금 낯설어 보이지만, 이것도 사실 함수입니다. 

"NewMethod()를 사용해주세요"첫번째 인자로 들어 간것입니다. 

 

Obsolete 어트리뷰트는 더이상 사용하지 않는 클래스나 함수, 필드앞에 붙히는데요,

일반적으로 사용하는 코드를 아예 없애기보다 남겨 놓되 쓰지 않도록 하기 위함입니다.

그냥 없애버리면 그 코드를 이용한 기존 코드 전체가 망가질 위험이 있기 때문이죠.

 

실제로 Obsolete 어트리뷰트를 붙힌 해당 메소드를 그대로 실행해버리면 아래와 같은 경고 문자가 뜨고 실행은 정상적으로 됩니다. 

 

앞서 제가 컴퓨터가 부가정보를 읽는다는 말이 이제 이해가 되시나요?

컴퓨터가 대신 해당 정보를 읽어서 부가정보를 보여주니, 해당 코드를 처음 접하는 사람도 쓰면 안되는구나 라는거 알게 되는거죠.

 

 

그렇다면 해당 코드를 아예 사용 못하게 하려면 어떻게 할까요?

물론 아예 지우는 방법도 있지만 좀더 fancy한 방법을 알아보죠.

 

해당 메소드 강제 사용금지(with Obsolete 어트리뷰트) 

방법은 간단합니다. Obsolete 어트리뷰트의 두번째 인자에 true값을 넣어주면 됩니다. 

 

output :

보시는것처럼 아예 컴파일 에러가 나면서 실행자체가 되지 않습니다. 

 

 

 

Conditional 어트리뷰트 예시

두번째로 소개 해드리고 싶은 빌트인(내장) 어트리뷰트는 Conditional 입니다. 

 

이 어트리뷰트는 내가 실행하는 조건에 맞춰 어떤 함수를 실행할지 말지를 결정하는건데요.

 

가령 아래와같이 인자로 "DEBUG"를 넣어주면,

Debug 모드일때만 해당 함수가 실행이 되는 것입니다. 

 

반대로 말하면, Release모드로 실행하면 해당함수는 실행이 안되겠죠?

(Release모드란 앱이 완성되어 이제 컴파일 시점에 에러가 없다고 생각하고 바로 실행하는 모드입니다. 더 빠른 실행 방법이겠죠?)

 

참고로 어트리뷰트는 함수는 위에도 적지만 앞에도 적을 수 있습니다. 

 

 

역으로 RELEASE를 인자로 넣으면 디버그 모드일때 실행이 안되는걸 이제는 눈치 채셨을 겁니다. 

 

 

사실 이외에도 많은 어트리뷰트가 존재하니 해당 공식문서를 통해 참조해보시기 바랍니다. 

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/attributes/

 

Attributes (C#)

Learn how to use attributes to associate metadata or declarative information with code in C#. An attribute can be queried at run time by using reflection.

docs.microsoft.com

 

  • 트위터 공유하기
  • 페이스북 공유하기
  • 카카오톡 공유하기
이 컨텐츠가 마음에 드셨다면 커피 한잔(후원) ☕

댓글