728x90
728x90

씨샾 14

C#] Dispose 호출해야 하는 경우와 그렇지 않아야 하는 경우

Dispose를 호출해야 하는 경우 '의심 스럽다면 처분 하는 원칙'에 따름. Windows Forms의 컨트롤들, 파일 및 네트워크 스트림, 네트워크 소켓, GDI+의 펜/브러시/비트맵 등이 이에 해당. Dispose를 호출하지 말아야 하는 경우 현재 코드가 객체를 소유한 것이 아니고, 정적 필드나 속성을 통해 공유 객체를 얻은 경우 System.Drawing namespace의 형식에서 정적 필드 및 속성을 통해 얻은 GDI+ 객체 - 응용 프로그램 종료 시점까지 사용 Dispose 메서드가 현재 상황에 맞지 않는 경우 System.IO namespace와 System.Data namespace의 형식들 MemoryStream - 차후 스트림을 다시 쓰는 경우 StreamReader, StreamWr..

[WPF] Grid 레이아웃과 Col, Row를 이용해서 WPF의 윈도우 레이아웃 짜기

개인적으로 WPF를 이용해서 간단한 윈도우 응용 프로그램을 만들어 보고 있는데, 여기서는 레이아웃을 XAML로 작성한다. 국내에는 WPF 관련한 자료가 많은 편은 아니고, 닷넷은 아무래도 MSDN 문서가 많은 걸 알려주어서 애용하는 편이다. https://docs.microsoft.com/ko-kr/dotnet/framework/wpf/controls/how-to-create-a-grid-element? Grid 레이아웃을 다루는 기초적인 방법으로, Grid.RowDefinitons, Grid.ColDefinitions을 이용해서 행과 열의 개념을 가진 표(Table)처럼 레이아웃을 다루는 방법이 있다. 픽셀(px)를 이용하는 절대적인 크기가 아니라 상대적인 크기 비율만 조정하고 싶을 때는 *을 이용한다..

C#] Parallel 클래스를 이용한 병렬 프로그래밍

2010년 이후로 줄곧 멀티 코어 보급률이 빠르게 늘어, 현 시점에서는 보급형 라인업에도 기본적으로 듀얼 코어가 탑재되는 시점에서, 다수의 코어를 활용하기 위해 .NET Framework 4.0에 추가된 개념. 병렬 루프에 관련한 메서드들을 제공한다. 이것을 이용해서 다수의 데이터를 병렬 처리하거나, 방대한 작업을 병렬 처리하는 것이 가능하다. Parallel.For(), Parallel.Foreach()를 이용해서 병렬로 분할 처리하는 기능을 사용할 수 있으며 병렬 처리를 하는 경우 두 가지 특징이 있다. 단일 스레드로 처리하는 경우보다 더 빠른 처리가 가능함.방대한 양의 데이터를 처리하는 경우, 다른 스레드에서 변경되는 값에 영향을 받지 않는다면 이 방법을 쓰는게 순차 처리하는 경우보다 빠른 시간 내..

C#] 파일의 MD5 해쉬값 얻어내기

파일의 MD5 해쉬를 얻어내는 코드는 간단하다. private FileInfo item; private byte[] hashcode; item = new FileInfo(filePath); hashcode = MD5.Create().ComputeHash(item.OpenRead()); using System.Security.Cryptography;를 별도로 추가해주면 정상적으로 작동한다. 다만, 해당 코드는 파일의 용량에 따라 해쉬값 연산 속도가 천차 만별이다. 용량이 작은 텍스트 파일 같은 경우는 ms 단위로 처리하고, 용량이 큰 영상 파일 같은 이진 파일은 10초(약 1.5~2GB)가 넘게 걸린다.

[WPF] Keyboard 클래스

Keyboard 클래스에서 키보드 관련 이벤트와 메서드, 키보드에 관련된 속성을 제공. 아래 이벤트를 적절히 이용해서 키보드 관련 처리를 하는 것이 좋음. 컨트롤이 포커스를 받았을 때PreviewGotKeyboardFocusGotKeyboardFocus 컨트롤이 포커스를 잃었을 때PreviewLostKeyboardFocus,LostKeyboardFocus 컨트롤이 논리적 포커스를 받았을 때GotFocus 컨트롤이 논리적 포커스를 잃었을 때LostFocus 키가 눌렸을 때PreviewKeyDownKeyDown 키가 눌렸다 떼어졌을 때PreviewKeyUpKeyUp 컨트롤이 텍스트 입력을 받았을 때PreviewTextInputTextInput

[WPF] 다른 스레드에서 UI 스레드 쪽에 접근하기

1. 많은 UI 구성 요소에서 호출 스레드가 필요하므로 해당 스레드는 STA여야 합니다. 2. "다른 스레드가 소유하고 있는 오브젝트에 현재 스레드가 접근할 수 없다"(The calling thread cannot access this object because a different thread owns it.) 최근 윈폼 프로그램을 WPF로 바꾸는 과정에서 주기적으로 창을 호출하는 과정에서 위 오류가 발생했다.윈폼에서는 이런 일이 없었지만 WPF에서는 UI 스레드와 그렇지 않은 스레드로 나누고 있어 이런 오류가 발생한다.이럴 때는 Dispatcher.Invoke를 이용하여 해결해야 한다. Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate..

C#] C# 6.0 요약

컴파일러를 C#으로 완벽히 재작성했으며 이를 오픈소스로 공개(Roslyn).컴파일러 파이프라인을 라이브러리를 통해 외부로 노출하여 누구든지 소스에 대해 분석이 가능함. Elvis 연산자 ; 널 상태 연산자해당 연산자 이용 시, 메서드 호출, 형식 멤버 접근 전에 명시적인 널을 확인할 필요가 없어, Null Reference Exception을 마주하지 않아도 됨. Expression-bodied Function ; 표현식 본문 함수표현식 하나로 메서드, 속성, 연산자, 인덱서를 람다로 작성 Property Initializer ; 속성 초기자자동 속성에 초기값을 배정하여 초기화되는 속성을 read-only로 만들 수가 있음.read-only 속성은 생성자에서 설정이 가능하며 이는 불변이 형식 작성 시에 ..

[Android] Xamarin으로 카메라 플래시 사용하기

우리나라에는 아직까지(혹은 앞으로도) 자마린 관련한 한글 가이드가 없다.앞으로는 어떻게 될지 모르겠지만, 이런저런 이유로 국내에서는 자마린 활용도가 떨어지는 편인데, 그럼에도 불구하고 C#과 Visual Studio를 포기할 수 없다면서 자마린을 시도하려는 사람들에게 작은 도움이 되고자 계속 글을 올리고 있다. 나 또한 배우고 있는 입장이고, 이런저런 자투리 정보들을 끌어모은 결과물을 바탕으로 글을 쓰고 있다. 앞으로 선 보일 예제 등에서도 파워포인트로 도형 그리기를 해서 자작한 버튼으로, 디자인 쪽에서의 퀄리티가 다소 떨어질 수 있으나, 예제에 사용할 목적으로 만들었으니 신경쓰지 않았으면 한다. 제목에 적혀 있듯, 오늘 만들어 볼 예제용 앱은 카메라 플래시를 켜고 끄는 앱(속칭 손전등 앱)이다. 아래처..

C#] 디렉토리(폴더) 내 파일 조회 프로그램

Delegate 사용 연습을 하려고 간단하게 만들어본 프로그램이다.디렉토리 내 무슨 파일들이 있는지에 대해서 조회하는 프로그램이다.숨김 파일도 검색해내며, 이와 관련하여 FileAttribute와 FileInfo를 사용했다.과거에 만든 프로그램이라서 아이콘은 적용시켜놓은 게 없고, 파일도 없어서 수정도 불가능하다.시간 나면 다시 만들어보겠지만, 별 기능도 없는 것이고 이와 관련된 유사 프로그램을 이미 만들어서 다시 만들어 재배포할 일은 없을 것 같다.

[Android] 자마린 안드로이드 가이드 따라가기 #2

지금까지 애플리케이션을 구동시키는 소스를 작성했다.이것이 정상적으로 작동하게 하기 위해서는 한 가지 해줘야 하는 작업이 있는데, 바로 '퍼미션 설정'이다.앱 개발을 해본 사람들은 알겠지만, 스마트폰의 어떤 것에 접근하기 위해 권한 요청을 하는 작업이다. 참고로, 접근 권한에 대해서 좀 더 엄격해졌다. 과거에는 앱이 설치되는 즉시 명시해놓은 접근 권한에 대해서는 암묵적으로 동의하는 것으로 간주하고 앱 설치 이후에는 명시해놓은 정보들에 무차별 접근했으나, 최근 법이 바뀌어, 사용자가 설치하더라도 해당 권한에 접근하려는 경우 반드시 거기에 따른 권한 허가를 받아야만 한다. 퍼미션에 대한 것은 안드로이드 스튜디오에서와 마찬가지로 AndroidManifest.xml에서 관리한다. 이외에도 xml에 직접 코드를 넣..

728x90