반응형

Study/C# 18

파일의 무결성 확인 방법

파일이 잘 기록되었는지 확인해야 할 필요가 있지 않을까? 어떤 파일을 생성하고, 내용을 써넣을(write) 때가 있음 이때 파일에 써넣는 중 문제가 생기면, 다시 이 파일을 읽어야 할 때 문제가 생길 수 있음 예를 들면 1에서 10까지 파일에 써넣는데 8까지만 써넣어지고 9와 10은 작성되지 않거나 이상한 내용이 작성되는 경우가 있을 수 있음 방법 : 기록한 내용에 대한 '확인 해시값' 만들고 비교 하기 이를 대비하여 작성할 파일 내용이 정상인지 확인하는 어떤 문자열을 만들어 같이 작성할 수 있음 먼저 작성할 문자열(위의 경우 '1, 2, 3, ... 9, 10')을 통째로 해시값으로 바꿈 이후 이 해시값을 먼저 파일에 써넣고 나머지 문자열을 써넣음 이후 나머지 문자열을 해시값으로 바꾼 것과 이전에 기록..

Study/C# 2022.05.05

예외가 발생할 코드에 대한 처리와 예외 발생 시 내용 logging

예외가 발생할 수 있는 코드에 대한 대비 소스 코드를 작성하다 보면 다양한 예외(exception)를 만나는 경우가 많음 C#에서는 이러한 예외를 효율적으로 쉽게 처리할 수 있는 코드를 제공함 이러한 예외 처리에 대한 예시로 중요한 파일 입출력이 있음 파일 입출력 중 예외가 발생한 상황에 대한 처리로 프로그램 안정성을 높일 수 있음 예외에 대한 처리를 통해 어떤 예외가 발생했는지 확인하고 디버깅할 수 있음 프로그램 동작의 안정성을 위한 예외 처리는 try-catch 구문을 사용하면 됨 또 추가로 디버깅을 위해 어떤 예외가 발생했는지 기록을 하면 됨 예시 소스코드 이 두 가지 사용법에 대한 예시 소스 코드는 아래와 같음 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ..

Study/C# 2022.05.01

BackgroundWorker를 통해 조금 더 안전하게 이벤트 기반으로 비동기 처리를 진행하는 패턴 사용해보기 (RunWorkerAsync, IsBusy)

BackgroundWorker를 통해 조금 더 안전하게 이벤트 기반으로 비동기 처리를 진행하는 패턴 사용해보기 (RunWorkerAsync, IsBusy) BackgroundWorker를 통해 thread pool에서 worker thread를 할당받아 작업을 실행할 수 있음 이를 사용하여 이벤트 기반으로 비동기 처리를 진행하는 패턴(event-based asynchronous pattern)을 구현할 수 있음 이를 사용하기 위해서는 먼저 BackgroundWorker로부터 객체를 생성함 이후 DoWork 이벤트 핸들러를 통해 실제 작업할 내용을 지정함 마지막으로 RunWorkerAsync() 메서드를 호출하여 작업을 수행시킴 여기서 RunWorkerAsync() 메서드로 동작되는 작업이 수행 중일 때,..

Study/C# 2021.10.13

nameof() 연산자의 활용

nameof() 연산자의 활용 nameof()는 인자로 받은 변수, 형식, 멤버의 이름 등의 다양한 타입을 문자열 자체로 반환하는 연산자 이를 통해 여러 타입을 문자열로 구분하여 사용하는 부분에 있어 도움을 받을 수 있음 여기서 제네릭 타입의 경우 닫힌 제네릭 타입(ex; Dictionary)만 사용할 수 있음 이 nameof() 연산자를 활용하는 예시는 3가지로 아래의 코드와 같음 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 // 1. 파라미터명의 출력 // (여기서 'id'를 Hard coding 하지 않음; 추후에 'id'를 'identify'로 rename하여도 문제가 없음!; Refactoring에서 장점!) throw new ArgumentException("In..

Study/C# 2021.09.29

String.Format()을 보간 문자열로 대체하기

string.Format()을 보간 문자열로 대체하기 C# 6.0부터는 문자열을 생성함에 있어 더 효율적인 기능을 제공 이는 문자열 내부에 몇몇 표현식을 그대로 사용할 수 있게 해주는 기능 이러한 기능을 통해 코드를 작성함에 있어 오류를 줄이고 가독성을 높힐 수 있음 이를 사용하는 방법은 문자열 앞에 '$'를 추가하고 문자열 내부에 '{}'를 추가한 뒤 이 bracket 내부에 표현식을 통해 사용할 수 있음 많이 사용하는 string.Format()의 경우 여러 인자가 있으면 실수 할 수 있음 이를 사용한 예시는 아래와 같음 (이 예시는 인자가 하나라서 실수하기는 어렵다고 생각함) 1 string s = String.Format("The value of pi is {0}", Math.PI); cs 반면 ..

Study/C# 2021.07.29

캐스트보다는 is, as가 더 좋음

변수 타입의 형변환이 필요 C#은 정적 타이핑을 수행하는 언어 타입 불일치가 발생하더라도 컴파일러가 이를 확인해줌 C#은 .NET framework에서 정의해둔 메서드의 원형에 따라 object 타입의 인자를 취하도록 메서드를 정의하는 경우가 있음 (예시 : ThreadPool) 이렇게 전달된 매개변수는 다른 클래스나 인터페이스로 형을 변환한 후 사용 아래는 ThreadPool에서 object 타입의 인자를 받아 형변환 후 사용하는 예시 1 2 3 4 5 6 7 8 9 10 11 12 13 public override void Update(object sender, EventArgs e) { ThreadPool.QueueUserWorkItem(ThreadPoolCallbackUpdate, new obje..

Study/C# 2021.07.28

const보다는 readonly 사용이 권장되는 이유

const보다는 readonly 사용이 권장되는 이유 C#의 상수는 컴파일 타임(compile time) 상수와 런타임(run time) 상수 두 유형이 있음 컴파일 타임 상수는 프로그램이 컴파일될 때 지정되며 동작이 빠른 장점이 있음 런타임 상수는 런타임에 값이 평가되며 유연성이 높다는 장점이 있음 컴파일 타임 상수는 const 키워드로 정의 런타임 상수는 readonly 키워드로 정의 1 2 3 4 5 public class UsefulValues { public static readonly int StartValue = 5; public const int EndValue = 5; } Colored by Color Scripter cs 컴파일 타임 상수는 컴파일 시 변수가 값으로 대체됨 런타임 상수는..

Study/C# 2021.07.27

지역변수를 선언할 때는 var를 사용을 권장하는 이유

지역변수를 선언할 때는 var를 사용을 권장하는 이유 C#은 익명타입(anonymous type)을 지원하기 위해 타입을 암시적(explicit)으로 선언할 수 있음 명시적(explicit)으로 타입을 지정하여 지역변수를 사용할 때, 손해를 볼 수 있는 경우가 있음 var를 사용하여 컴파일러의 도움을 얻어 내부에서 효율적으로 동작할 수 있게 하면 좋음 다만, 내장 숫자 타입(int, float, double, 등)의 경우 명시적으로 타입으로 선언하는 편이 좋음 var를 통해 지역변수를 만드는 경우 변수명을 잘 정의하는 것이 필요함 왜냐하면 var은 명시적으로 타입이 나타나 있지 않아 코드의 가독성을 해칠 수 있기 때문 Reference effective C#; 강력한 C# 코드를 구현하는 50가지 전략과..

Study/C# 2021.07.19

ThreadPool 사용 예시

ThreadPool은 무엇일까? 또 어디에 사용하면 좋을까? 여러 thread를 사용하며 프로그램을 동작시키는 경우 리소스 관리로 인한 문제가 발생할 수 있다. 여기서 리턴 값을 받지 않아도 되는 동작이 있다면 ThreadPool이라는 것을 사용하며 효율적으로 리소스를 관리할 수 있다. ThreadPool은 기존에 있는 thread에 할당하여 사용하는 방법이다. ThreadPool은 새로운 thread가 아닌 기존에 존재하는 thread를 재사용하여 효율적으로 리소스를 관리할 수 있다. 리턴 값을 받을 필요가 없는 예시로는 소프트웨어 동작 로그가 있다. 문제의 정의 하나의 객체에서 어떤 값을 파일로 저장한다. 이때 여러 thread에서 이 객체의 파일 저장을 수행할 수 있다. A라는 동작 이후 저장할 수..

Study/C# 2021.05.28

WPF multi-thread (dispatcher, background worker)

멀티스레드(Multi-thread)란? 컴퓨터에서 프로그램을 사용할 수 있다. 이러한 프로그램을 사용하면 컴퓨터 내부에서는 하나의 프로세스(Process)에 하나의 프로그램을 할당하여 다룬다. 프로그램에서 여러 기능을 동시에 사용할 수 있다. 게임을 예시로 들어보자. 컴퓨터 게임은 하나의 프로그램이다. 이 게임에서는 배경음악이 흘러나온다. 동시에 방향키의 입력을 받아서 게임 상의 캐릭터를 조종할 수 있다. 이와 같은 동작은 하나의 프로세스 내부에서 여러 스레드(thread)가 각각의 기능을 수행할 수 있기 때문이다. 예시로 설명한 게임에서 배경음악을 실행하는 스레드가 동작 중인 동시에 방향키의 입력을 받으면 캐릭터를 조종하는 스레드가 동작 중이라고 볼 수 있다. 이러한 여러 스레드를 사용하는 것을 멀티스..

Study/C# 2021.04.14
반응형