반응형 프로그래밍/C#117 C# nameof Expression nameof() nameof 식은 변수, 형식 또는 멤버의 이름을 문자열 상수로 생성한다. nameof 식은 컴파일 타임에 계산되며 런타임에는 영향을 주지 않는다. 예제 코드 nameof 식을 사용하여 인수 검사 코드를 더 쉽게 유지 관리할 수 있다. nameof() vs ToString()의 차이점 ToString()은 런타임에서 평가된다. 그리고 포멧 변경이 가능하다. nameof()은 컴파일 타임에서 평가된다. 그래서 런타임에서 영향을 받지 않는다. 2023. 5. 26. C# 명명된 인자(Named Arguments)와 선택적 인자(Optical Arguments) 명명된 인자를 사용하면 인자를 매개 변수 목록 내의 해당 위치가 아닌 해당 이름과 일치시켜 인자를 지정하여 전달할 수 있다. 선택적 인자를 사용하면 일부 매개 변수에 대한 인자를 생략할 수 있다. 두 기법 모두 메서드, 인덱서, 생성자 및 대리자에 사용할 수 있다. 명명된 인자(Named Arguments) 명명된 인자를 사용하면 호출된 메서드의 매개 변수 목록에 있는 매개 변수 순서와 인자 순서를 일치시키지 않아도 된다. PrintOrderDetails("Gift Shop", 31, "Red Mug"); 매개 변수의 순서를 기억하지 못하지만 해당 이름을 알고 있는 경우 임의의 순서로 인자를 보낼 수 있다. PrintOrderDetails(orderNum: 31, productName: "Red Mug".. 2023. 5. 25. C# 스레딩 스레드(thread)는 명령어를 실행하기 위한 스케줄링 단위이며 프로세스 내부에서 생성할 수 있다. 이는 운영체제에서 멀티 스레딩을 지원한다면 하나의 프로세스가 여러 개의 스레드 자원을 가질 수 있음을 의미한다. 윈도우는 프로세스를 생성할 때 기본적으로 한 개의 스레드를 함께 생성하며, 이를 주 스레드(main thread, primary thread)라고 한다. 스레드는 CPU의 명령어 실행과 관련된 정보를 보관하고 있는데, 이를 스레드 문맥(thread context)이라고 한다. 운영체제의 스케줄러는 실행돼야 할 적절한 스레드를 골라서 CPU로 하여금 실행되게 만드는데, 이때 두 가지 동작을 수행한다. CPU는 현재 실행 중인 스레드를 다음에 다시 이어서 실행할 수 있게 CPU의 환경 정보를 스레드.. 2023. 5. 24. C# 컬렉션 - System.Collections.Hashtable Hashtable 컬렉션은 값(value)뿐만 아니라 해시에 사용되는 키(Key)가 추가되어 빠른 검색 속도를 자랑한다. 따라서 검색 속도의 중요도에 따라 ArrayList 또는 Hashtable을 선택할지 결정한다. Hashtable의 검색속도가 ArrayList에 비해 어떻게 빨라질 수 있는지 2개의 컬렉션에서 함께 제공하는 Remove 메서드를 예로 들어보자. ArrayList.Remove의 경우 0번째 요소의 값과 Remove 인자의 값을 비교한다. 같으면 삭제하고 return 문을 수행한다. 1번째 단계에서 값을 찾기 못하면 그다음 요소의 값과 비교한다. 값이 같으면 삭제하고 return 문을 수행한다. 값을 찾을 때까지 위의 동작을 반복한다. 값이 ArrayList에 존재하지 않는 경우 전체 .. 2023. 5. 23. C# 컬렉션 - System.Collections.ArrayList ArrayList에 대해서 ArrayList는 object 타입 및 그와 형변환할 수 있는 모든 타입을 인자로 받아 컬렉션에 추가/삭제/변경/조회할 수 있는 기능을 구현한 타입이다. 간단하게 생각해서 크기가 자유롭게 변할 수 있는 배열이라고 보면 된다. ArrayList는 object를 인자로 갖기 때문에 닷넷의 모든 타입을 담을 수 있다는 장점이 있지만 반대로 이로 인해 박싱이 발생한다는 단점이 있다. 따라서 System.ValueType을 상속받는 값 형식을 위한 컬렉션으로는 적당하지 않다. 이를 해결하기 위해서는 닷넷 2.0부터 지원되는 제네릭(Generic)이 적용된 List 타입을 사용하는 것이 권장된다. (ArrayList는 deprecated되었다. 특수한 경우가 아니라면 List를 사용하도.. 2023. 5. 22. P/Invoke란 무엇인가? P/Invoke란? C# / ,NET에서 Native DLL (Unmanaged DLL)에 있는 함수를 호출하는 것을 Plaform Invoke 혹은 줄여서 P/Invoke라고 부른다. 예를 들어, C#에서 윈도우즈 운영체제의 Win32 API를 호출한다던가, C/C++로 작성된 Native DLL의 함수를 호출할 필요가 있을때, P/Invoke 방식을 사용한다. P/Invoke를 사용하기 위해서는 System.Runtime.InteropServices 네임스페이스에 있는 DllImport를 사용하여 어떤 DLL에서 함수를 가져올지를 지정한다. 해당 함수의 원형을 C# 메서드 원형으로 정의해 준다. 이때 C# 메서드는 static extern으로 지정한다. 예제 코드 using System; using .. 2023. 5. 19. 이전 1 ··· 11 12 13 14 15 16 17 ··· 20 다음