C#(7)
-
Timer 클래스(일정 간격마다 확인하는 기능)
timer.Elapsed += CheckTimeEvent; timer.AutoReset = true; timer.Enabled = true; void CheckTimeEvent(System.Object source, ElapsedEventArgs e){ Console.WriteLine("1초 경과!"); } 참고: https://learn.microsoft.com/ko-kr/dotnet/api/system.timers.timer?view=netstandard-2.1
2023.07.20 -
Apple Login Refresh Token 발급 샘플(C#)
using System.Security.Cryptography; using JWT.Builder; using JWT.Algorithms; string auth_code = "authorization code"; var clientSecret = JwtBuilder.Create() .WithAlgorithm(new ES256Algorithm(ECDsa.Create(), GetPrivateKey())) .AddHeader("kid", "key file id") //.AddHeader("alg", "ES256") // 알고림즘을 사용하면 자동으로 헤더가 생성되는 듯 .AddClaim("iss", "자신의 팀 id") .AddClaim("lat", DateTimeOffset.UtcNow.ToUnixTimeSec..
2023.07.04 -
스택 메모리와 힙 메모리
스택 메모리와 힙 메모리의 속도 비교 스택 메모리는 힙 메모리에 비해 처리속도가 빠르다. 그 이유는 스택 메모리는 CPU에의해 직접 관리되기 때문이며 또한 스택 메모리는 CPU의 L1, L2 캐시와 같은 last-in, first-out 자료구조를 사용하기 때문이다. 하지만 스택 메모리는 그 크기가 한정되어 있다. 힙 메모리는 스택 메모리에 비해 느리지만 용량이 크다. 객체 타입과 메모리 record 또는 class타입을 정의하면 객체 자체는 힙 메모리에 저장되며 객체의 메모리 주소가 스택에 저장된다. struct타입을 정의하면 객체는 스택에 저장된다.
2023.01.29 -
클래스 멤버의 접근 제한자(Access modifiers)
접근 제한자 설명 private 클래스 내부에서만 접근 가능, 접근 제한자를 명시하지 않으면 암묵적으로 private으로 된다. internal 같은 어셈블리에서만 접근 가능 protected 파생 클래스에서만 접근 가능 public 어디에서든지 접근 가능 internal protected 같은 어셈블리이거나 파생 클래스에서만 접근 가능 private protected 같은 어셈블리의 파생 클래스에서만 접근 가능
2023.01.14 -
전처리기 지시어
컴파일하기 이전에 미리 처리 #으로 시작 #define -> 심벌 상수 정의 #define TEST_ENV 작성된 파일 내에서만 사용 가능 프로젝트 설정에서 모든 프로젝트 파일 내에서 사용 가능하게 설정 가능 #region #region 예시 코드 블럭을 영역별로 묶음(예시 코드 블럭) #endregion #warning #define ENTERPRISE_EDITION #if(!ENTERPRIST_EDITION) //엔터프라이즈 에디션이 아닐 경우 경고 #warning This class should be used n ENTERPRISE_EDITION #endif #error #define ENTERPRISE_EDITION #if(!ENTERPRIST_EDITION) //엔터프라이즈 에디션이 아닐 경우 ..
2021.12.30 -
IDisposable 인터페이스와 Dispose() 메서드
Dispose() 메서드를 호출하면 관리되지 않는 리소스를 해제하고, 일반 정리를 수행한다. 또한, 종료자가 있는 경우엔 종료자를 실행할 필요가 없음을 나타내주기도 한다. 관리되는 개체와 관련된 실제 메모리를 해제하는 것은 가비지 수집기의 역할이므로 이런 점에서 가비지 수집기와는 다르다. public void Dispose() { // Dispose of unmanaged resources. Dispose(true); // Suppress finalization. GC.SuppressFinalize(this); } 이런 식으로 구현하는 것이 일반적인데 여기에서 SuppressFinalize 메서드는 가비지 수집기가 종료자를 실행하지 않도록 방지하여 중복으로 가지비 수집이 호출되지 않도록 해준다. 실제 정..
2021.12.29