Attribute 썸네일형 리스트형 C# Attribute 기반 로깅 시스템 구현 C#에서 Attribute를 활용하면 코드에 메타데이터를 부여해 편리하게 기능을 확장할 수 있습니다. 이번 글에서는 Attribute를 사용해 메서드 호출 시 자동으로 로그를 남기는 간단한 로깅 시스템을 구현하는 방법을 다룹니다.1. Attribute 정의먼저 로깅을 표시할 Attribute 클래스를 만듭니다.[AttributeUsage(AttributeTargets.Method)]public class LogAttribute : Attribute{}2. Proxy를 이용한 메서드 감싸기직접 호출 코드를 바꾸기 어렵기 때문에, DispatchProxy를 활용해 메서드 호출 전후에 로그를 찍도록 구현합니다.using System.Reflection;public class LoggingProxy : Disp.. 더보기 C# Reflection으로 메타데이터 수정하기 Reflection은 주로 메타데이터를 읽고 멤버를 호출하는 용도로 설계되었습니다. 이미 로드된 타입의 메타데이터를 순수 Reflection으로 직접 수정할 수는 없습니다. 그럼에도 불구하고, 실무에서 “수정처럼” 보이게 다루는 방법은 있습니다. 이 글에서는 가능한 3가지 실용 루트를 간단히 정리합니다.1. 현실과 한계핵심 요약입니다.1) 로드된 기존 타입의 특성(Attribute)이나 시그니처를 Reflection으로 교체/추가/삭제할 수 없습니다.2) 대신 다음을 활용할 수 있습니다.- TypeDescriptor: 디자인 타임/컴포넌트 모델 관점의 메타데이터를 런타임에 덧입히기- Reflection.Emit: 새 동적 타입을 만들 때 원하는 메타데이터(특성 등) 정의- 오프라인 리라이팅: Mono.C.. 더보기 C# Attribute 기반 유효성 검증 시스템 만들기 C#에서는 커스텀 어트리뷰트를 활용해 간단한 유효성 검증 시스템을 만들 수 있습니다. 이번 글에서는 기본적인 Attribute 정의부터 적용, 그리고 검증 로직 구현까지 실용적인 예제를 다룹니다.1. 커스텀 Attribute 정의하기유효성 검사 규칙을 명시하는 어트리뷰트를 만들어 봅니다. 예를 들어, 필수값 검사용 RequiredAttribute를 정의합니다.[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]public class RequiredAttribute : Attribute{ public string ErrorMessage { get; set; } = "필수 입력 항목입니다.";}2. 검증 대상 클래스에 Attribute .. 더보기 C# 애트리뷰트 (Attribute) 정의와 활용 애트리뷰트는 타입, 멤버, 매개변수 등에 메타데이터를 부여하는 기능입니다. 컴파일러와 런타임, 프레임워크(예: ASP.NET Core, 데이터 주석)가 이 메타데이터를 해석해 동작을 확장합니다. 직접 애트리뷰트를 정의하고 리플렉션으로 읽어 활용하는 방법을 정리합니다.1. 기본 개념과 문법애트리뷰트는 대괄호로 선언 대상 위에 표시합니다. 클래스명이 Attribute로 끝나더라도 사용 시 접미사는 생략 가능하며, 생성자 인수는 위치 인수, set 가능한 프로퍼티는 명명 인수로 전달합니다.[Serializable] // 접미사 'Attribute' 생략 가능[System.Obsolete("Use NewMethod")] // 전체 이름 사용 가능public class OldType {}2.. 더보기 C# 애트리뷰트 (Attribute) 정의와 활용 애트리뷰트는 타입, 멤버, 매개변수 등에 메타데이터를 부착해 컴파일러, 런타임, 프레임워크가 특별한 처리를 하도록 돕는 수단입니다. 코드 자체의 동작을 바꾸기보다 “의미”를 선언적으로 전달하는 용도에 적합합니다.1. 애트리뷰트란?예를 들어 [Obsolete]는 사용 중단 API 경고를 내고, [Serializable]은 직렬화 대상으로 표시합니다. 애트리뷰트는 실행되지 않으며, 이를 읽는 쪽(컴파일러/리플렉션/도구)이 의미를 해석해 동작합니다.2. 기본 사용 예using System;using System.Diagnostics;public class Basics{ [Obsolete("Use NewApi instead", error: false)] public void OldApi() { } .. 더보기 이전 1 다음