c# 7

ListBox 사용하기

프로젝트를 진행하다가 보면 목록을 보여줘야 하는 경우가 빈번하게 발생한다. 그럴 때마다 어떤 Control을 사용하는게 좋을 지 고민하게 된다. 필자의 경우에는 Column 정보가 필요할 경우에는 ListView를, 각 Cell 단위의 작업이 필요할 경우에는 DataGrid를 Column 정보없이 하나 하나의 Item이 중요할 때에는 ListBox를 사용한다. 가장 최근에는 ListBox를 이용하여 원하는 목록 UI를 구성했다. 그래서 오늘은 ListBox를 사용하는 방법에 대해 설명하고자 한다. ListBox란? ListBox는 기본적으로 ListBoxItem의 목록을 나타낸다. ListBoxItem에 어떠한 내용이 있던간에 ListBox는 해당 ListBoxItem 목록을 나타내고 이를 사용하는 기능..

[C#] DataGrid로 DataTable 출력시 일부 cell이 없어지는 경우

배경 DataGrid는 ItemsSource로 DataTable을 받아 아주 편리하게 Table을 화면에 나타내준다. 이를 이용하여 파일을 읽고 파일을 DataTable로 만들어 DataGrid를 통해 화면에 나타내는 기능을 개발하고 적용하였다. 잘 적용되었으리라 생각하고 일상을 지내던 와중에 몇몇 cell의 내용이 누락되고 있다는 것을 알게 되었다. 원인 먼저 아래와 같이 원인을 파악하고자 했다. 1. 파일을 읽어서 생성된 데이터가 정상적인가? 2. 정상 데이터를 통해 만들어낸 DataTable의 내용이 정상인가? (Column, Row, Cell) 먼저, 파일을 읽는 모듈을 살펴보았다. 정상적으로 읽어오고 정상적으로 객체를 생성하고 있었다. 그 다음으로 DataTable을 만들어 출력되지 않는 cel..

Lazy<T>

Lazy란? .NET은 4.0 이후 버전에서 Lazy 형식을 제공한다. Lazy을 사용하면 객체 생성에 있어서 초기화 지연이 가능하다. 이게 무슨 말이냐면, T 형식의 객체가 Lazy를 사용하면 최초로 호출되는 시점에 생성된다는 것이다. 예시 아래 Lazy의 사용 예시를 보자. public class LazyCallClass { private Lazy _test; public LazyTest Test => _test.Value; public LazyCallClass() { _test = new Lazy(() => new LazyTest()); Console.WriteLine($"{nameof(LazyCallClass)} is created."); } } public class LazyTest { } st..

[C#] FileNotFoundException 발생

배경 최근 회사에서 여러 제품에서 공통으로 참조해서 사용하기 위해서 유틸리성의 공용 다이얼로그 프로젝트를 만들었다. 별도의 프로젝트로 테스트코드까지 작성하여 완성시킨 뒤, 현재 제품에 적용하는 중에 FileNotFoundException가 발생하였다. 회사에서 업무를 진행하다가 종종 발생하는 Exception이나 그 동안 해결 방법을 기록해두지 않아 10~20분을 구글링을 하게 되었다. 다음에 같은 상황이 발생했을 때 해결 시간을 1~2분으로 축소하기 위해 이렇게 기록해두려 한다. 원인 회사내의 프로젝트간 참조 구조는 간단하게 위와 같이 나타낼 수 있다. ProjectA는 솔루션의 메인 프로젝트로서 실질적인 프로그램의 실행을 담당한다. ProjectB의 경우는 ProjectA에서 호출할 프로그램의 기능들..

[코드규칙] 변수 네이밍 규칙

변수명을 작성할 때에는 아래의 규칙을 반드시 적용한다 본 포스팅의 변수 네이밍 규칙은 필자의 규칙이므로 옳고 틀림의 문제가 아님을 알려드립니다. 특징 가독성을 확보할 수 있다. 변수명만으로 의미를 설명할 수 있다. 협업시 코드에 대한 이해도를 높힐 수 있다. 규칙 const 변수는 모두 대문자로 표기하고 띄어쓰기를 '_'로 구분한다. // 비권장 public const double MaxHeight = 10; // 권장 public const double MAX_HEIGHT = 10; var을 사용하고 변수명을 통해 변수의 데이터 타입을 유추할 수 있도록 한다. // 비권장 string str = ""; // 권장 var str = ""; 복수형의 데이터는 -s를 붙혀 복수의 의미를 부여한다. // 비권..

ReactiveUI

배경 MVVM 패턴을 자주 사용하는데 주로 Prism.MVVM 프레임워크의 BindableBase를 사용해왔다. 큰 불편함을 느끼지 못해서 그냥 사용해왔는데, 어느 날 회사 동료가 소개해준 ReactiveUI를 알게 된 후부터는 계속 ReactiveUI를 사용하고 있다. Prism.MVVM도 물론 굉장히 좋은 프레임워크임은 분명하나 ReactiveUI는 반응형으로 설계되어 있어 보다 직관적인 UI 작업이 가능하다. 또한 코드도 간결해지고 이해하기 쉬워진다. 오늘은 ReactiveUI를 소개해보고자 한다. ReactiveUI란? An advanced, composable, reactive model-view-viewmodel framework Declarative Describe what you want,..

Crawling (Selenium)

Crawling Crawl의 사전적의미는 "기어가다"라는 뜻이다. 개발에서는 웹 사이트의 정보를 긁어오는 것을 의미한다. 아마 웹 사이트를 기어다니면서 정보를 수집하는 행위가 아닐까..? Selenium 셀레늄 (소프트웨어) - 위키백과, 우리 모두의 백과사전 ko.wikipedia.org Selenium은 코드에서 웹 접근과 제어에 대한 기능을 제공해주는 프레임워크이다. 이 프레임워크를 통해 Crawling을 수행할 수 있다. 예제 이론적인 설명은 이 정도까지만 하기로 하고 일단 해보기로 하자. Selenium Nuget Package .NET 환경에서 Crawling을 해보고자 한다. 먼저 Nuget Package에서 아래 항목을 추가해준다. Selenium.WebDriver Selenium.WebD..