C#/C#에 대한 다양한 공부(19)
-
시작하세요 C# 9.0 프로그래밍
1장 들어가면서 닷넷 프레임워크 : 마이크로소프트에서 발표한 응용 프로그램 개발 환경으로써 프로세스 가상 머신에 속한다. 가상 머신 CLR은 프로세스가 실행되면 메모리에 함께 실행되고 이는 EXE/DLL(1) 의 내부적으로 존재한다. IL(중간언어) 코드의 결과물을 공유하기 때문에 상호 호출이 가능하다. CIL(Common Intermediate Language) : 공통 중간 언어로 속칭 'IL코드'라 한다. '런타임'이 이해할 수 있는 중간 언어 CLI(Common Language Infrastructure) : 공용 언어 기반구조로 MS가 공개한 공개 규약이다. CTS(공용 타입 시스템), CIL, 메타데이터등을 포함하고 있다. CLR(Common Language Runime) : 공용 언어 런타임..
2022.07.06 -
C# 해시테이블 vs 딕셔너리 [hashtable vs dictionary]
C#에서는 key와, value를 사용해서 자료를 저장하는 타입이 2가지가 있다. 해시테이블과 딕셔너리인데 사용법은 거의 동일하지만 내부적으로 처리하는 기술이 다르다. [해쉬테이블 (hashtable)] Non-Generic key와 value 모두 Object를 입력 받는다. 박싱/언박싱을 사용한다. 존재하지 않는 키를 찾으려고 하면 null을 반환한다. 즉, 제네릭을 이용하지 않고 Object를 사용하기 때문에 모든 데이터 타입을 다 받고 처리할 수 있는 장점이 있지만, 자료의 입력에 내부적으로 박싱이 일너라고 사용하는 곳에서도 다시 언박싱을 해줘야 사용이 가능하다. [딕셔너리 (dictionary)] Generic key와 value 모두 선언시 타입을 입력해줘야한다. 박싱/안박싱이 일어나지 않는다..
2022.07.04 -
dll, lib
라이브러리 : 함수, 데이터 타입 등 여러가지 프로그래밍 요소들의 집합을 말한다. 라이브러리를 왜 사용해야하는가? 자주 사용하는 함수들을 쉽게 사용할 수있다. 모든 코드를 직접 만들 수는 없다. dll(Dynamic Link Library) 특징 : 그로 인해 프로그램 로딩 시간이 단축된다. dll파일만 수정해서 dll파일만 배포하면 된다. 메인 실행 파일의 사이즈가 작아진다. lib(Static Link Library) : 특징 : 즉, 라이브러리 파일이 따로 없더라도 실행 파일 자체가 모든 라이브러리를 가지고 다닌다. 만약 어떤 수정사항이 생기면 소스를 수정해서 다시 배포해야한다. 실행 파일의 크기가 커진다. dll을 쓰는 이유는 무엇일까? Lib는 실행파일에 직접 포함되기 때문에 라이브러리에 문제가..
2022.07.01 -
닷넷 프레임 워크 구조
[닷넷 프레임워크의 실행 구조] CIL(Common Intermediate Language) : 공통 중간 언어로 속칭 'IL코드'라 한다. C# 기준으로 C# 컴파일러가 만들어내는 중간 언어로 '런타임'이 이해할 수 있는 언어다. 뿐만 아니라 모든 닷넷 호환 언어는 IL코드로 컴파일이 가능하다. 닷넷 호환 언어 : 어떤 언어의 컴파일러든 결과물로 중간 언어로 생성해 낸다면 CLR이 그것을 실행할 수 있다. 닷넷 호환 언어는 코드의 결과물을 공유하기 때문에 상호 호출이 가능하다. C#에서 F#클래스를 상속받는등 CTS(Common Type System) : 공용 타입 시스템으로 닷넷 호환 언어가 지켜야할 타입의 표준 규격을 정의한것이다. 만약에 새로운 언어를 만든다면 CTS 규약을 만족하는 한도 내에서만..
2022.07.01 -
Static, 싱글톤
[static] static 키워드는 변수나 함수, 클래스에 정적 속성을 부여하는 것으로 클래스로부터 객체를 생성하지 않고 변수나 함수를 호출할 수 있도록 해주는 것이다. 클래스의 일반 멤버 변수는 클래스의 객체가 생성될 때, 각 객체마다 따로 생기지만, 정적 변수는 해당 클래스가 처음으로 사용되는 때에 한번만 초기화되어 계속 동일한 메모리를 사용하게 된다. 도식으로 보면 위의 그림과 같다. 정적 변수를 포함한 클래스 A의 객체를 두 개를 생성하여 각 이름을 object1, object2라고 했을 때, 각 인스턴스에는 정적 변수가 포함되지 않으며, 일반 멤버 변수만 포함된다. 클래스 A의 정적 변수는 클래스 A가 처음 사용되는 시점에 별도의 메모리 공간에 할당된다. -> 생성된 객쳉 정적 변수가 포함되지..
2022.07.01 -
[async/await]
[async/await] *async 컴파일러에게 이 메서드의 내부에 await가 사용되고 있으므로 코드를 비동기 호출 형태로 변환하라는 지시 라고 이해하면 편하다 async메서드는 void 또는 Task 또는 Task를 반환한다. 대부분 Task 혹은 Task를 반환한다. -> void는 await를 하지 않기 때문 보통 비동기 이벤트 핸들러를 만들 때 사용함 *await 비동기 작업의 흐름을 제어하는 키워드라고 할 수 있다. 일반적으로 Task 혹은 Task 객체와 함께 사용된다. -> 내부적으로 타이머를 도는 동안 메인스레드는 block하지 않고 계속해서 실행된다. 만약 Delay앞에 await를 빼면 어떻게 될까? 5초를 기다리지 않고 "TaskTest Done" 이 바로 출력된다. 여기서 알 수..
2022.07.01