C#에 관해 그 동안 익혀왔던 것들을 조금씩이라도 블로그에 정리해보기로 마음 먹었을 때, 가장 먼저 하고 싶으면서도 망설여 졌던 주제가 Await, Async이다. 아무튼 오늘의 포스팅을 통해, 좀 더 개념을 명확히 이해할 수 있게 되길, 다음에 읽었을 때는 더 많이 알게 되었길 바래본다. Go for it! 1. 비동기란 무엇인가? 위 사진은 비동기 프로그래밍에 현실적인 예이다. 우리는 바쁜 아침 시간, 조금이라도 더 풍성하게 먹기위해, 비동기적으로 아침을 차린다. 후라이팬에 불을 올리고, 토스트기에 빵을 넣고, 후라이팬이 데워지면 기름을 두르고 계란을 넣는다. 이 때, 계란을 부치는 일과 빵을 굽는 일은 비동기적으로 일어나도 괜찮다. 나중에 이를 합쳐서 샌드위치를 만들어 먹겠다고 하면 동기화가 필요하..
함수를 정의 하다보면, 여러개의 변수를 반환하고 싶을 때가 있다. 또는 여러개의 연관된 변수를 묶어 사용하고 싶기도 하다. 그러나 새로운 타입의 객체를 생성하기 부담스러운 경우(객체 너무 많아...한번 쓰고 버릴건데..) 튜플을 사용해볼 수 있다. 1. Tuple 사용하기 public void Example() { var colorInfo = GetColor(); Console.WriteLine($"name: {colorInfo.Item1} " + $"r:{colorInfo.Item2} " + $"g:{colorInfo.Item3} " + $"b:{colorInfo.Item4}"); // Output // name: red r:255 g:0 b:0 } public Tuple GetColor() { ret..
개요 프로그래밍에서 Copy에는 Deep Copy(깊은 복사)와 Shallow Copy(얕은 복사) 두가지가 있다. Shallow Copy object class에 MemberwiseClone을 이용하여 Shallow Copy(얕은 복사)를 진행하였다.(Coffee의 Copy 함수는 는 더 아래 참고.) class Program { static void Main(string[] args) { var coffee1 = new Coffee() { Shot = 2, CoffeeBean = new CoffeeBean { Origin = "Brazil"} }; var coffee2 = coffee1.Copy(); coffee2.Shot = 1; coffee2.CoffeeBean.Origin = "Kenya"; C..
주석의 코드화 코딩을 하다보면, 단순히 코드 말고 주석 등과 같은 정보를 추가하고 싶을 때가 있다. 그런데 이러한 정보를 주석과 달리 컴퓨터도 읽을 수 있게 하고 싶다고 하면 어떨까? 그 중 한가지가 바로 Attribute 이다. Attribute에 대한 내용은 우리의 친구 MSDN에 잘 설명 되어 있다. https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/attributes Tutorial: Use attributes - C# Learn how attributes work in C#. docs.microsoft.com Obsolete 아마 나를 포함하여 많은 사람들이 맨 처음 Attribute를 접한 경로이지 않을까 싶다. 가장 대표적인 Attribut..
코딩을 하다보면 문자열 처리를 하는 경우가 많다. StringBuilder보다는 string이 가벼울거 같은 느낌적인 느낌에 (string.join 좋아, 짜릿해) string을 많이 사용하지만, 메모리 낭비의 발생으로 인해 사용시 주의가 필요하다. 예건데, csv 파일을 만들면서 string += ",what" 을 사용하면 개체 생성과 관련한 오버헤드 비용이 증가한다고 할수 있다. string과 StringBuilder string * 네임스페이스: System * 문자열 개체의 불변성 : string는 생성된 후에 변경할 수 없다. 즉, 문자열 수정은 새로운 string을 반환한다. * 문자열 개체의 불변성으로 인하여 참조시 주의 해야 한다. // 예제1) string s1 = "Hello "; st..
보통은 Visual Studio를 이용하여 C# 프로젝트를 만들지만, 최근 VScode를 쓰다보니 C#도 사용할 수 있을까 싶어서 테스트 해보았다. C# 콘솔 어플리케이션 만들기 1. 프로젝트를 생성할 폴더 만들기 2. VScode 실행 3. C# 확장 설치 4. .NET SDK 설치. * 이것을 설치해야 아래 --framework 지정 옵션이 사용가능하다. 안그러면 .netcore로만 생성할 수 있다. * 나는 맨 아래 Reference를 참고하여 SDK 6.0.201을 설치하였다. https://dotnet.microsoft.com/en-us/download/dotnet/6.0 Download .NET 6.0 (Linux, macOS, and Windows) .NET 6.0 downloads for ..
일을 시작한지 1년쯤 되었을 때인가.. 나한테 이것에 관해 질문한 신입사원이 있었다. 그때는 나도 사원이었기에 여차저차 내가 경험한 대로 설명을 했던 것 같은데 오늘에서야 글로 정리해본다. Call by value vs Call by reference 처음 프로그래밍을 접하면, 헷갈리기 쉬운 내용이다. 먼저, 설명할 내용을 요약하자면, Call by value와 Call by reference는 함수 호출 방식에 따른 구분이고, 우리가 사용하는 변수는 Value type variable(int, string 등) 과 Reference type variable(객체)로 구분된다. 참조 타입 변수의 경우, 변수를 새롭게 set하지 않고, 그 안에 내용만 변경하는 경우에는 Call by value 방식으로도 ..
오늘은 WPF / Dependency Property에 대해서 포스팅 해보려고 한다. WPF를 사용하다보면, Button, ListBoxItem, UserControl 등 이미 정의되어 있는 컨트롤을 상속받아 커스텀화된 새로운 컨트롤을 만드는 경우가 심심치 않게 있다. 이 때 "커스텀"할때 반드시 필요하게 되는 것이 Dependency Property 이다. 이를 잘 쓰면, UIElment의 재사용성이 올라가고, 일관성 있는 프로젝트를 만드는데 도움이 된다. 이걸 만들다 보면 결국에는 내가 데이터를 바인딩 해놓은 아주 많은 속성들이 Dependency Property와 연결 되어 있다는 사실을 깨닫게 되는데....! https://docs.microsoft.com/en-us/dotnet/desktop/w..
큰 규모의 소프트웨어를 개발하다 보면, 구조적으로 SW를 어떻게 설계할 것인가는 중요한 문제이다. 그중에서도 잘 알려진 구조 패턴을 이용하여 프로그램을 설계하면, 일반적으로 알려진 문제를 해결하고 프로그램의 모듈화 재사용성 등을 높이는데 크게 도움을 준다. 아주 뻔한 듯 하지만, 당연한 이야기다. C#/WPF 개발 분야에서는 위와 같은 구조적인 문제해결을 위해 Prism를 사용한다. Prism의 모든 쓰임을 알지는 못하지만, 그 중에서도 MVVM 패턴과 DI를 구현할 때 유용하다. UI와 Model를 분리하는 방식의 구조 패턴인데,MVC와 비슷한 면이 있다. 기회가 된다면 다음 기회에 더 잘 다루어 보기로 하자. 한가지 의문인 것은 프리즘이 라이브러리냐 프레임워크이냐 하는 문제이다. Prism 사이트의 ..
.NET Framework Microsoft는 .Net Framework를 아주 간단 명료한 한문장으로 다음과 같이 설명하고 있다. ".NET Framework is a software development framework for building and running applications on Windows." "윈도우에서 빌드하고 실행하는 어플리케이션을 위한 SW 개발 프레임워크이다." ".NET Framework is part of the .NET platform, a collection of technologies for building apps for Linux, macOS, Windows, iOS, Android, and more" ".NET 프레임워크는 .NET 플랫폼에 일부인데, .NET..