대리자
delegate : 메서드를 안전하게 캡슐화하는 형식
Func : 반환값이 있는 메서드 캡슐화 : 제네릭이 들어가며, 마지막 매개변수는 반환값
Action : 반환값이 없는 메서드 캡슐화 : 제네릭에 대리하려는 메서드 매개변수 할당
Predicate : 조건에 따라 bool 값을 반환하는 메서드 캡슐화
Comparison : 두 값을 비교하고 정렬순서를 나타내는 int 반환
Event : 이벤트의 추가(+=) 및 제거(-=)만 가능하다. 할당이 불가능하다.(= 으로 이벤트 할당 불가), 클래스 외부에서 직접 이벤트를 호출할 수 없다.
virtual
부모 클래스에서 virtual 키워드를 사용하여 함수를 만들면, 자식 클래스에서 이 함수를 재정의 할 수 있도록 허용
Critical Section (임계영역):
다중 쓰레드 환경에서 여러 쓰레드가 동시에 접근하면 문제가 발생할 수 있는 공유 자원이나 코드 블록
이를 잘 관리하지 않으면 Race Condition (경합상태) 발생
lock
monitor
Pulse: 대기중 스레드에 알림
Wait: 신호대기
mutex
WaitOne() : 뮤텍스 점유 기다림
semaphore
Task:
Run() : 무거운 연산처리 작업 : 가벼운 쓰레드풀 사용
Factory.StartNew() : Task.Run에서 더 다양한 지원
TaskCreationOptions:
LongRunning : 새로운 쓰레드를 생성해서 작업
AttachedToParent : 부모작업 동기적 대기
WhenAll(Task1, Task2) : 여러 개의 `Task` 객체가 모두 완료될 때까지 기다리고자 할 때
Context swiching 이 일어나지 않고 남는 쓰레드 풀에서 실행
CancelationTokenSource:
cancel() : 비동기 중지
Dispose() : 자원 삭제
token : 비동기 상태 토큰
ThrowIfCancelationRequested() : 취소요청시 예외처리 발생 (OperationCanceledException)
IsCannellationRequested() : 취소시 true 반환
Reflection :
Assembly의 내용을 확인(메서드, 속성, 생성자 등)의 내용을 확인하거나 검사하려는 경우 사용, 인스턴스의 데이터 타입에 대한 정보 확인
애플리케이션을 개발할 때, 디버깅 또는 런타임에 알 수 없는 객체의 동작을 분석하기 위해 사용하거나 외부 라이브러리에 존재하는 클래스 및 메서드를 분석
GetType() : 객체의 데이터 타입 반환
Property() :
GetCustomAttributes() : 속성에 추가된 어트리뷰트 가져오기
OfType<T> : 해당 어트리뷰트를 추가한 프로퍼티 가져오기
Attribute :
코드 요소(클래스, 메서드, 속성 등) 추가적인 정보를 제공하는 메타데이터
이를 통해 컴파일러를 수행하거나 코드에 대한 추가정보를 활용할 수 있다.
*메타데이터 제공: 코드에 대한 추가정보 제공
*컴파일러 지시: 컴파일러 동작을 제어
*런타임 정보
*재사용 가능
메소드
[Obsolete] 선언시: 더이상 사용하지 않는다 표기
[Conditional(환경)] 선언시: 해당 환경일때만 실행
매개변수: 반드시 선택적 매개변수로 선언
[CallerMemeberName] : 호출한 메서드 반환
[CallerFilePath]: 호출한 메서드의 파일 위치
[CallerLineNumber]: 호출된 메서드의 라인넘버
Attribute 만들떄
AttributeUsage(AttributeTargets.범위) : 어트리뷰트 범위설정
Interceptor :
Nuget Package -> Castle.core 설치
Interceptor 상속 : Invocation.Proceed()
ProxyGenerator
CreateClassProxyWithTarget(서비스, 인터셉터)
서비스 클래스에 virtual 키워드 사용
Dependency Injection
Nuget Package에서 Microsoft.Extensions.DependencyInjection 설치
컨테이너 생성
IServiceCollection
AddTransient<> : 의존성 주입할때 매번 새로운 인스턴스 생성
AddSingleton : 어플리케이션 전체에서 하나만 생성
AddScoped : 스코프 내에서 인스턴스 생성
컨테이너 빌드
IServiceProvider
= service.BuildServiceProvider()
.getRequiredService
API 통신
HttpClient() : API 통신을 위한 함수
.GetAsync("url") : Get방식 호출
Response.ReadAsStringAsync(): 리스펀스 값 읽기
{이름}Controller : 컨트롤러 경로{이름}으로 됨
HttpGet("{PathParameter:int}") : 패스파라미터 설정
리턴형식을 ActionResult<타입> 으로 설정시 오류코드(ex: NotFound()) 반환가능