본문 바로가기
반응형

프로그래밍/C#140

C# readonly 사용시 값 타입 vs 참조 타입 차이점 readonly 사용 시 값 타입 vs 참조 타입readonly 의미값 타입(int, struct 등) : 해당 값 자체를 변경할 수 없음참조 타입(class, List, LinkedList 등) : 참조 자체를 변경할 수 없음 (참조 대상의 내용은 변경 가능) 내부 값 변경값 타입(int, struct 등) : 불가능참조 타입(class, List, LinkedList 등) : 가능 (속성, 메서드 등 사용해서 내부 조작 가능)readonly 값 타입(Value Type) 실제 예제readonly int a = 5;a = 10; // 컴파일 에러a 자체가 값 타입이기 때문에 값 변경 자체가 불가능readonly 참조 타입(Reference Type) 실제 예제readonly List list = new.. 2025. 6. 16.
C# JSON 직렬화/역직렬화 옵션을 설정하는 여러 방법 JSON 직렬화/역직렬화 옵션 설정C#에서 JSON 직렬화/역직렬화 옵션을 설정하는 방법을 다양하게 제공한다. 사용자의 필요와 환경에 맞게 선택해서 사용하면 된다.속성 기반(Attribute-Base)일반 클래스에서 개별로 선언해서 사용전역 Json 옵션 주입속성 기반(Attribute-Base)개별 클래스나 속성 위에 JsonConverter를 붙이는 방식로컬 커스터마이징은 좋지만, 규모가 커지면 매번 붙이기 귀찮고, 전역으로 제어하기가 어려움[JsonConverter(typeof(MyCustomConverter))]public MyType Data { get; set; }일반 클래스에서 개별로 선언해서 사용options을 개별로 선언해서 JsonSerializer.Serialize() 매서드 호출시에.. 2025. 6. 1.
C# 업 캐스팅(Upcasting)에 대해서 알아보자 아래와 같은 코드를 본 적이 있는가?List list = new List { 1, 2, 3 };// IEnumerable에 바로 할당 가능IEnumerable enumerable = list;C#에서 List를 IEnumerable로 바로 받을 수 있다. 이를 업 캐스팅이라고 한다.이는 완전히 정상적이며 아주 흔하게 사용되는 패턴이다.위와 같은 코드가 가능한 이유는, List가 IEnumerable를 구현하고 있기 때문이다.업 캐스팅(Upcasting)이란?상속/구현 관계에서 자식을 부모로 형 변환하는 것명시적 형변환 없이 자연스럽게 가능 (암시적 형변환)void PrintNumbers(IEnumerable numbers){ foreach (var number in numbers) { .. 2025. 5. 19.
C# 얕은 복사, 깊은 복사에 대해서 알아보자 얕은 복사(Shallow Copy) 예시 코드Key와 Value가 그대로 복사됨Value가 만약 참조 타입이면, 복사본과 원본이 같은 인스턴스를 가리킴Dictionary Currencies = new(){ { "USD", new Currency("Dollar", 1.0m) }, { "EUR", new Currency("Euro", 0.9m) }};var shallowCopy = Currencies.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);깊은 복사(Deep Copy) 예시 코드Dictionary Currencies = new(){ { "USD", new Currency("Dollar", 1.0m) }, { "EUR", new Currency.. 2025. 5. 19.
C# EF Core 사용시 DB 상태를 간단하게 체크하는 방법 Database.CanConnectAsync()DB 연결만 확인간단하게 구현이 가능EF Core 내부 방식 사용반환값 > true or false단순 연결 시도로 아주 빠른 성능실패 시 false 반환 (예외 없음)권한 확인 안 됨ExecuteSqlRawAsync("SELECT 1")DB 연결 + 쿼리 수행 가능 여부쿼리 작성 필요SQL 문법에 의존반환값 > 영향받은 행 수 (int 값)SQL 실행을 포함하기 때문에 약간 무거움예외 발생 가능 (try/catch 필요)권한 확인 가능 (SELECT, INSERT 권한 확인 가)CanConnectAsync()가 더 적합한 경우단순히 DB 연결이 가능한가? 만 확인하고 싶을 때앱 시작 시 헬스 체크 또는 초기 상태 점검용운영 중에 주기적 연결 테스트할 때 (.. 2025. 5. 19.
UseForwardedHeaders를 이용해서 클라이언트 실제 IP 얻기 C#에서 클라이언트 실제 IP 얻기UseForwardedHeaders() 메서드는 서버가 Resverse Proxy(역방향 프록시) 뒤에 위치할 때 클라이언트의 실제 IP 주소나 요청 프로토콜(HTTP, HTTPS) 정보를 올바르게 인식하기 위해 설정한다. 프록시(예: Nginx, Envoy, AWS ALB)를 사용할 경우,ASP.NET Core 앱은 기본적으로 프록시의 IP나 프로토콜만 인식실제 클라이언트의 IP 주소나 HTTPS 여부를 알고 싶을 땐 HTTP 헤더 (X-Forwarded-For, X-Forwarded-Proto)를 해석해야 한다.이걸 가능하게 해주는 것이 바로 app.UserForwardedHeaders(...)이다.예제 코드app.UseForwardedHeaders(new Forwa.. 2025. 5. 19.