표준 입출력
- Console.Read() : 한 글자
- Console.ReadLine() : 한 줄
- Console.Write(), Console.WriteLine()
텍스트
- String.Format ::= {N[, W][: formatCharacter]}
- N : 매개 변수 위치 지정. 0부터 시작
- W : 출력될 자릿수 폭. '-'를 붙이면 왼쪽 정렬
- formatCharacter : d(10진수, DateTime), n(천 단위 구분 10진수), e(지수 표기), f(소수), g(e, f중 간략한 형태), p(백분율), x(16진수)
- String Interpolation : "C# 시작하기 - 문법 - 기본 자료형 - 문자열 리터럴" 참고
- System.Text.StringBuilder
- System.Text.Encoding : Encoding.UTF8.GetBytes()
- System.Text.RegularExpressions.Regex
시간
- System.DateTime : 닷넷 시간 기준은 1년 1월 1일. Tick 간격은 천만 분의 일초
- System.TimeSpan : DateTime의 - 연산 결과
- System.Diagnostics.Stopwatch
직렬화
- System.BitConverter
- System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
- new BinaryFormatter().Serialize()
- [Serializable] 특성 표기한 사용자 정의 클래스 직렬화
- 직렬화에 배제할 요소는 [NonSerialized] 특성 표기
- System.Xml.Serialization.XmlSerializer
- new XmlSerializer(typeof(ClassName)).Serialize()
- 기본 생성자가 있는 public 클래스의 public 필드에 대해 직렬화 제공
- System.Runtime.Serialization.Json.DataContractJsonSerializer
기본 타입의 직렬화/역직렬화 제공. 리틀/빅 엔디언 구분 필요
↓ cs
스트림
- System.IO.MemoryStream : 바이트 단위 스트림
- System.IO.StreamWriter, StreamReader
- System.IO.BinaryWriter, BinaryReader
- System.IO.FileStream : 비동기 메서드 BeginRead, EndRead, BeginWrite, EndWrite
파일
- System.IO.File, System.IO.Directory : 클래스 메서드
- System.IO.FileInfo, System.IO.DirectoryInfo : 인스턴스 메서드
- System.IO.Path
- Path.Combine() : 경로 접합 시에 디렉터리 구분 문자를 넣어야 되는지 알아서 판단해서 처리해준다
- 임시 폴더/파일에 관한 기능 제공
Collection
- System.Collections.ArrayList : Object에 대한 동적 배열은 List
- System.Collections.Hashtable : Object 키-값 쌍 저장은 Dictionary
- System.Collections.SortedList + SortedDictionary
- System.Collections.Stack + Queue
- 컬렉션 초기화 구문
- ICollection<T> 타입은 {}로 초기화 가능
- Since C# 6.0 : 확장 메서드로 Add()가 정의됐으면 {} 초기화 가능
Hashtable과 유사. 삽입과 동시에 키를 기준으로 정렬이 이루어진다
↓ cs
스레딩
- System.Threading.Thread
- thread.Start(obj) : 인자 하나를 받고 스레드 시작
- thread.Abort() : 스레드 강제 종료
- thread.Join() : 스레드 종료 대기
- thread.Interrupt() : 스레드가 WaitJoinSleep 상태일 때 종료
- System.Threading.ThreadPool
- System.Threading.EventWaitHandle
- EventWaitHandle은 대기중인 스레드를 깨울 수 있다
- EventWaitHandle 인스턴스는 Signal, Non-signal 두 가지 상태를 가지며, 상태 전이 메서드도 Set(→ Signal), Reset(→ Non-signal) 2가지가 있다
- 스레드가 WaitOne 메서드를 호출하면 이벤트가 Signal 상태가 될 때까지 대기한다
- EventResetMode : 자동(Set 호출 뒤 자동으로 Non-signal 상태로 전이), 수동(Reset 직접 호출)
- System.Threading.Interlocked : int, long에 대한 원자 연산 제공
- System.Threading.Monitor 스레드 간 동기화
- Monitor 구문과 동치인 lock 블록
- lock 블록과 Monitor를 혼용하여 대기 스레드들을 직접 관리
- 비동기 처리 System.Threading.Tasks.Task
- await Task.Delay() : 입력시간 후 태스크 반환
- Task.WaitAll(t1, t2, ...)
- await Task.WhenAll(t1, t2, ...)
- Task.Factory.StartNew()
- Task.Factory.StartNew<TResult>()
- 비동기 실행 결과 취합 Task<TResult>:
- 병렬 처리 System.Threading.Tasks.Parallel
자동 리셋의 경우 대기하는 스레드 중 하나만 깨우고 상태를 변경한다
↓ cs
↓ cs
↓ cs
↓ cs
↓ cs
↓ cs
↓ cs
↓ cs
네트워킹
- System.Net.IPAddress
- System.Net.IPEndPoint : IPAddress + port
- System.Net.Dns : Dns.GetHostEntry()
- System.Net.Sockets.Socket
- System.Net.HttpWebRequest : WebRequest.Create() as HttpWebRequest
- System.Net.WebClient
Socket(IPv4/6, Stream, Tcp) or Socket(IPv4/6, Dgram, Udp)
DB : ADO.NET
- ADO.NET : DBMS 통신 닷넷 구현 라이브러리. 각 DBMS마다 만들어진 걸 이용하면 된다. 아래의 공통 인터페이스를 구현한다
- System.Data.IDbConnection
- 트랜잭션 1
- 트랜잭션 2
- System.Data.IDbCommand : DB 서버로 쿼리 전달
- ExecuteNonQuery : INSERT, UPDATE, DELETE → 영향 받은 행의 수 반환
- ExecuteScalar : SELECT → 단일값 반환
- ExecuteReader : SELECT → 다중 레코드 반환
- System.Data.IDataReader : 쿼리 결과 해석
- System.Data.IDbDataParameter : Parameterized command에 사용될 매개변수
- System.Data.IDbDataAdapter
- ORM
- MS SQL 서버 또는 Azure와 연결하여 자동으로 모델을 구성할 수 있다
- 추가 - 새 항목 - [데이터] ADO.NET 엔터티 데이터 모델
- MySQL, PostgreSQL도 확장을 설치하거나 하면 된다는 것 같은데...
- https://dev.mysql.com/downloads/windows/visualstudio/
- https://dev.mysql.com/doc/visual-studio/en/visual-studio-entity-framework.html
- https://stackoverflow.com/q/32045852/7369515
↓ cs
↓ cs
↓ cs
System.Data.DataTable ↔ 닷넷 클래스(POCO; 자바의 POJO와 유사한 개념) 사이의 어댑터
↓ cs
윈도우 레지스트리
↓ cs
- © Donggi Kim. MIT License
- w3css : No license
- highlight.js : BSD-3-Clause License
- MathJax : Apache License 2.0
- qrcodejs : MIT License