본문 바로가기

프로그래밍/C#101

C# 웹 인증(Authentication) & 권한(Authorization) 코드 작성하기 C#으로 웹 인증 코드 작성하기 C# 프로젝트를 진행할 때 인증 관련된 코드를 작성하는 일이 생긴다면 C#이 제공하는 기능을 사용해서 좀 더 쉽게 인증 관련 코드를 작성하고 처리하는 것이 가능하다. 웹 인증을 위해서는 아래의 두 가지를 구현해야 한다. 인증(Authentication) vs 권한(Authorization) 인증(authentication) : 유저가 누구인지에 대해서 검증한다. 보통 토큰이 유효(valid)한 지 검증한다. 권한(authorization) : 유저가 해당 행동을 수행하는 것이 가능한지를 결정하는(determining) 프로세스이다. 사용자 정의 인증 스키마(Custom authentication schemes) 인증 스키마는 반드시 프레임워크 startup 파일에 등록되어.. 2024. 2. 19.
C# Value Type vs Reference Type 값 타입(Value Type) 스택 메모리에 저장 데이터를 직접 가지고 있음 기본 타입들 대부분이 값 타입 (Booleans, Characters, DateTime, TimeSpan, 구조체) 값 타입 변수를 복사하면 완전히 새로운 변수가 생기고 이는 기존 변수와 연관이 없다. 값 타입 예제 int a = 10; int b = a; b = 20; Console.WriteLine(a); // Output : 10 Console.WriteLine(b); // Output : 20 참조 타입(Reference Type) 힙 메모리에 저장 참조 타입 생성 시 힙에 메모리가 할당되며 변수의 메모리 주소가 저장됨 Class, Interfaces, Delegates, 배열 등 참조 타입 변수를 복사하면 같은 데이터를.. 2024. 2. 15.
C# yield return을 이용한 소수 생성기 yield return을 이용한 지연 계산 yield return에 대해서 공부하면서 대량의 데이터를 다루기 편해지고 지연 로딩이 강점이라는 설명글들을 많이 읽었지만 "그래서 이걸 대체 어디에 사용하지?"라는 의문에 계속해서 들고 있었다. 그러다가 피보나치 수열을 만드는 예제를 보고 yield return을 사용해서 소수를 만드는 메서드를 만들면 좋을거 같다는 생각이 들어서 코드를 한번 짜봤다. 사용자는 자기가 필요한만큼 소수를 꺼내쓰기만 하면 된다. 이에 대한 계산은 그때 그때 온-디멘드(OnDemand)로 이루어진다. 예제 public static IEnumerable GeneratePrimeNumber() { int start = 2; while (true) { for (int i = 2; i < .. 2024. 2. 14.
C# yield 이해하기 C# yield 이해하기 yield는 iterator를 포함하는 메서드에서 사용되는 강력한 키워드이다. yield를 사용하면 enumerable 배열을 간단하게 반환할 수 있다. 하나의 요소를 해당 시점에서 반환하기 때문에 기존의 전통적인 반환 방법과는 다르다. 지연 평가(lazy evaluation) 성능 향상(increased perforamance) 대량의 데이터, 복잡한 데이터 구조를 다루는데 효과적 iteration 간의 상태 지속이 가능 기본 구문 public IEnumerable GetNumbers() { for (int i = 0; i < 10; i++) { yield return i; } } 위의 예에서, GetNumbers()는 0에서 9까지의 정수 시퀀스를 생성한다. yield ret.. 2024. 2. 14.
C# 지연 평가(lazy evaluation)에 대해서 지연 평가란 무엇인가? 컬렉션의 단일 요소가 미리 계산되지 않고 호출되는 시점에서 평가가 이루어지고 실행된다. 즉, 호출시점까지 평가가 지연된다. 즉시 평가(eager evaluation) 즉시 평가를 사용하는 경우 모든 값들이 평가되어야지만 수행이 가능하다. 그래서 while(true)로 선언된 경우 끝에 도달하지 못하고 메모리 부족으로 예외가 발생한다. 지연 평가(lazy evaluation) 지연 평가를 사용하는 경우 while(true)로 선언되어 있다 하더라도 모든 값들을 미리 평가하고 시작하지 않는다. 호출되는 시점에서 필요한 부분까지만 평가하기 때문에 Take(10)에 해당하는 부분까지 지연평가되고 정상적으로 프로그램이 실행된다. 예제 코드 using System.Collections.Gen.. 2024. 2. 13.
C# Virtual vs Abstract Virtual vs Abstract 사용자가 선택 가능한 교통수단에 대한 클래스를 작성해 보자. 교통수단으로는 Car, Train, Plane 등이 있을 것이다. 이를 바탕으로 여행시간과 운임을 선택 가능하도록 작성해 보자. 예를 들어, 유저의 선택을 기반으로 적절한 교통수단으로 인스턴스화되는 TransportAgency 클래스를 작성해 보자. public enum TransportModeType { Car, Plane, Train } internal class TransportAgency { public TransportMode CreateTransportMode(TransportModeType modeType) { return modeType switch { TransportModeType.Car =.. 2024. 2. 3.