C# 솔루션을 가지고 어느 정도 프로젝트를 완성해 가고 있다면 프로그램 배포를 위한 설치 프로젝트를 작성할 필요가 있습니다. 특히 프로그램의 사용자가 다수라면 설치 프로그램은 꼭 있어야 할 필수 요소일 것입니다. 물론 설치 프로그램을 만드는 다양한 도구가 있기는 하지만 이왕에 정식 버전의 비주얼스튜디오를 사용하고 있다면 설치 프로젝트를 활용하는 것이 작업의 효율성을 높이는 방법일 것입니다. 무료인 익스프레스 버전의 비주얼스튜디오를 사용하는 경우는 지원하지 않을 수 있는데 이런 경우에는 압축 프로그램의 Self-Extracting 프로그램 생성 기능을 활용하거나 기타 오픈소스 패키징 도구를 활용하면 됩니다. 다시 비주얼스튜디오로 돌아와서 프로그램의 사용자들이 사내망에 국한되고 항상 네트워크에 연결될 수 있..
위의 그래프에서 좌측은 C# 및 .Net 데이터 타입별 메모리 크기이고 우측은 표현 가능한 값의 범위입니다. float, Single, double, Double, decimal, Decimal 타입을 부동소수점(Floating point) 타입이라고 하고 byte, int 등의 나머지 타입을 고정소수점(Fixed point) 타입이라 하는데 부동소수점은 소수점을 고정시키지 않고 유효숫자를 나타내는 가수(假數) 부분과 소수점의 위치를 나타내는 지수(指數) 부분으로 실수를 저장하는 방식입니다. 근사값을 표현하기 때문에 표현 가능한 값의 범위가 고정 소수점에 비해서 비교가 되지 않을 정도로 넓습니다. 특이한 것은 Decimal 타입인데 float나 double 타입에 비해서 메모리 크기가 4배 및 2배에 이..
업무의 자동화가 점점 진행되는 과정에서 프로그래머의 역할이 일자리를 줄이기 보다는 보다 생산적이고 창의적인 일을 만드는 것에 기여 했으면 하는 바램입니다. 오늘 글은 C#에서 엑셀 파일을 직접 읽고, 수정하고, 저장하는 과정을 다룰까 합니다. 저의 경우 지금까지는 혹시 엑셀 파일을 생성해야만 하는 경우라 하더라도 왠만하면 CSV 파일 형태로 제작해서 파일을 엑셀로 읽을 수 있을 뿐만 아니라 리브레 오피스와 같은 무료 오피스로도 활용할 수 있게 했는데, 이번 경우에는 미리 준비된 엑셀 양식 파일에 데이터를 반영해서 새로운 엑셀 파일을 생성해야 하는 필요를 해결할까 합니다. 물론 프로그램 실행 과정에 엑셀을 활용하기 때문에 시스템에는 엑셀이 설치되어 있어야 합니다. C#에서 엑셀 파일의 셀 단위로 직접 읽고..
시리얼 통신이나 인터넷을 비롯한 네트워크 기반으로 프로그램을 제작하다보면 송수신 API가 파라미터로 byte[] 배열을 요구하는 경우가 있습니다. 또는 응용 프로그램에서 바이트 단위로 읽거나 쓰는 버퍼링을 수행하거나 다양한 타입을 스트림(Stream)으로 송수신하는 경우에는 바이트 배열을 사용하는 경우가 많습니다. 이러한 경우 내부적으로 byte[] 배열과 다른 타입 간의 변환이 필요합니다. ■ byte[] 배열을 다른 타입으로 변환이 경우는 BitConverter.ToInt32(배열, 시작 위치)를 사용하면 편리합니다. 배열에 byte[] 배열의 이름을 기술하고 시작위치는 배열중에 어디를 시작 위치로 간주할 것인지를 지정합니다. 변환 대상 길이는 변환될 타입에 따라서 ToInt32면 4 바이트, ToI..
디지털 카메라나 스마프폰 카메라로 사진을 찍어 컴퓨터로 옮기는 경우 많은 경우 각 사진의 파일명은 년-월-일_시-분-초.jpg 처럼 파일명에 사진 촬영한 시각을 담는 것이 보통입니다. 물론 디카나 스마트폰의 시각이 잘못 되어 있는 경우는 파일명의 시간 또한 시스템 시간을 따라갈테니 잘못되는 것은 당연합니다. 그런데 한국과 시차가 다른 해외에 여행을 다녀오는 경우 현지 시간에 스마트폰 시간이 자동 조정되는 경우도 있고 시차가 있는 상태로 한국 시간대가 그대로 유지되는 경우도 있습니다. 문제는 사진을 정리하면서 어떤 분은 현지 시간대로 사진을 정리하고 싶을 수 있고, 어떤 사람은 현지 시간과 관계없이 한국 시간대로 정리하고 싶은 경우도 있을 수 있는데 사진 파일의 시간이 원하는 시간대와 다른 경우입니다. 이..
QT 응용을 개발하다보면 아래와 같은 메시지가 경고로 나오는 경우가 있습니다. PNG 이미지 파일은 투명 배경을 지원하기 때문에 GIF와 함께 투명 배경이 필요한 경우에 많이 사용합니다. 최근 처럼 스마트폰이 일반화된 환경에서 PNG 이미지 파일의 인기는 지속적으로 올라갈 것 같습니다. 위와 같이 "libpng warning: iCCP: known incorrect sRGB profile"와 같은 메시지가 나오더라도 수행하는데는 크게 문제가 없지만 그래도 찝찝한 기분이므로 이 문제를 정리하고 넘어갈까 합니다. 원인을 분석해 보니 근본 원인은 이미지 편집 도구로 포토숍을 사용한 이유 때문이었습니다. 포토숍에서 PNG 파일을 저장하면서 나름의 색상 프로파일 저장하는데 이것이 표준이 아니라네요. 이 문제를 해..
윈도우, 리눅스, 맥 뿐만아니라 임베디드 시스템에서도 실행할 수 있는 크로스 플랫폼 응용 개발에 많이 채용하는 QT응용 개발을 위해서 어떤 개발 환경을 준비할까 하다가 QT Creator만으로도 이클립스나 비주얼스튜디오 없이도 충분한 개발이 가능함을 알게 되었습니다. QT 라이브러리만 제공한다는 오해를 하고 있었던 것이지요. QT 다운로드 사이트(https://www.qt.io/download/)에서 몇가지 선택을 하면 윈도우 시스템용 QT를 다운로드 받을 수 있는데 저의 경우에는 MinGW(Minimalist GNU for Windows)를 채용한 패키지를 다운로드 받았습니다. 프로그램 빌드 및 디버깅, 디자인등의 과정을 MinGW 라이브러리를 통해 수행한다는 의미입니다. 다운로드 받은 설치 파일을 실..
이번 문제는 약간의 난이도가 있는 문제 입니다. C언어를 어렵다고 느끼는 사람들이 싫어하는 구조체와 포인터를 사용해야 하고 메모리 할당과 재귀형(Recursive) 함수를 사용해야 하는등 알고리즘 뿐만아니라 주요 라이브러리 함수 사용에 대한 이해도 필요합니다. 도전적 과제이기는 하지만 개발에 성공하면 실제적으로도 도움이 될만한 프로그램 문제입니다. 설계부터 차분히 도전해 보세요. ■ 문제# 지정 아규먼트와 옵션에 따라 디렉토리의 용량을 분석하는 콘솔 프로그램을 작성합니다.- dirana [디렉토리] [-n]과 같은 아규먼트를 입력 받습니다. 디렉토리는 분석 대상인 디렉토리로 생략시 현재 디렉토리(.)를 분석합니다. -n는 분석후 출력할 하위 디렉토리의 깊이로 생략시 -1로 간주하며 -1은 현재 디렉토리만..
JRE 또는 JDK를 설치하여 자바 가상 머신(JVM, Java Virtual Machine)이 준비되어야 실행 가능한 자바(Java) 프로그램은 기본적으로는 특정 프로세서의 기계어(Machine)로 제작된 실행 파일이나 라이브러리를 사용할 수 없습니다. 자바 프로그램은 컴파일하면 특정 프로세서가 인식할 수 있는 기계어가 아닌 p-code 또는 바이트 코드라 불리는 중간 코드 형태로 만들어 지기 때문입니다. 닷넷 플랫폼에서 C#이나 VB.NET으로 프로그램을 개발하면 CIL(Common Intermediate Language)이라는 중간코드로 제작되는 것과 같은 이치입니다. 그렇지만, 서드파티에서 제공하는 모듈과 연동해야 되거나 코드 재개발이 난해한 기존 라이브러리를 활용해야 하는 경우가 있기 때문에 이..
Note: Some input files use unchecked or unsafe operations.Note: Recompile with -Xlint:unchecked for details. 개발자의 성향에 따라 경고 메시지에 대처하는 태도에도 차이가 있습니다. 어떤 개발자의 경우에는 경고 메시지가 수두룩하게 쏟아져도 프로그램만 정상적으로 빌드 된다면 별로 개의치 않고 개발을 진행하기도 합니다. 많은 경우 그냥 두어도 별 문제가 되지 않는 경우도 있지만 어떤 경우에는 문법 오류로 걸러지지 않았지만 프로그램 로직에 치명적인 영향을 주는 요소가 되기도 합니다. 그래서 왠만하면 하나의 경고 메시지도 없도록 개발자가 명시적인 처리를 해주는 좋지 않은가! 하는 것이 필자의 생각입니다. 어떤분은 컴파일 옵션을 ..
넷빈즈에서 클래스의 Serial version UID를 간편하게 생성할 수 있도록 돕는 플러그인을 설치하는 과정과 간단한 사용법을 메모해 둡니다. 각 클래스에 long 타입의 고유값으로 정의 하도록 Java 1.5 부터 권고하고 있습니다. 정의하지 않아도 빌드하는데는 문제가 없지만 경고 메시지를 출력합니다. 개발자 입장에서는 고유값을 명시하는 것이 귀챦을 수도 있으므로 도구나 플러그인의 도움을 받는 것이 좋습니다. 몇가지 방법이 있는데 첫번째는 JDK에 포함되어 있는 serialver 라는 도구를 사용해서 만드는 방법인데 많이 번거로운 측면이 있죠. 통합 개발 환경(IDE)에서 지원하면 딱인데 이클립스 3.3이후 버전에도 이런 기능이 포함되어 있다고 합니다. 넷빈즈에서도 플러그인을 통해서 간편하게 설치하..
Note: Recompile with -Xlint:deprecation for details.자바 빌드 과정에서 위와 같은 메시지를 만났다면 대부분 최근 프로젝트는 아니고 시간이 경과된 프로젝트일 경우일 것입니다. 자바 버전이 업그레이드 되면서 보안이나 기타 이유로 없어진(deprecated API) 기능이기 때문입니다. 컴파일도 정상적으로 수행되고 실행과정에도 문제가 없을 수 있지만 건강한 코드를 위해서는 실행 기준이 자바 버전에 맞도록 코드를 보완해 주는 것이 좋습니다.어떤 코드에 이런 문제가 있는지 구체적으로 확인하고 싶다면 프로젝트의 컨텍스트 메뉴>properties를 선택하고 Build>Compiling에서 "Report Uses of Deprecated APIs"를 체크한다음 코드를 다시 컴파..
C# 닷넷으로 응용 프로그램을 개발하다 보면 프로그램의 효용성은 프로그램 외부와 얼마나 자연스러운 소통을 할 수 있는가와 직결되는 경우가 많습니다. 그 중의 하나가 이메일 전송입니다. 작업 과정의 내용을 자동으로 또는 요구 즉시 바로 이메일로 전송해준다면 사용자 입장에서는 매우 유용한 기능일 것입니다. 닷넷 시스템에서는 이런 기능이 내장되어 있어서 동기식 또는 비동기식으로 메일을 전송할 수 있습니다. 메일이 전송되는 과정을 살펴보면 응용 프로그램에서는 개발자가 설정한 송신측 메일 서버에 메일 전송 서비스로 접속해서 메일 내용과 송신 메일 주소와 수신 메일 주소등을 보안 기반(SSL)으로 전송하는 것으로 전송 작업은 끝납니다. 물론 메일 전송 서비스를 사용하려면 해당 서버에 아이디와 비밀번호가 있어야 합니..
C#으로 응용 프로그램을 제작하는 과정에서 모든 라이브러리가 C# 닷넷 라이브러리로 제작되어 있다면 사용도 디버깅도 편리한 장점이 있지만 현실은 아직 언어들 예를들어 C++이나 기타 언어로 만들어진 DLL을 사용해야 되는 경우가 종종 발생합니다.PInvokeStackImbalance' 관리 디버깅 도우미가 '.........vshost.exe'에서 문제를 발견했습니다.추가 정보: PInvoke 함수 '..........::SMSUnitSend'에 대한 호출 결과 스택이 불안정하게 되었습니다. 관리되는 PInvoke 시그니처와 관리되지 않는 대상 시그니처가 일치하지 않기 때문인 것 같습니다. 호출 규칙 및 PInvoke 시그니처의 매개 변수와 관리되지 않는 대상 시그니처가 일치하는지 확인하십시오.예전에는 ..
이번 문제는 그리 어려운 문제는 아닙니다. 다만 쉽고 단순한 알고리즘으로 풀 수 있는 문제라 하더라도 함수명, 변수명을 가독성(Readability)이 좋도록 명명하고 들여쓰기(Indentation)에 유의하면서 최적의 알고리즘을 적용하려는 노력을 기울여야 할 것입니다. 간단한 프로그램이지만 효율적인 프로그램 수행을 위한 다양한 기법을 익힐 수 있습니다. ■ 문제# 지정 옵션에 따라 다양한 형태의 ASCII 테이블을 출력하는 콘솔 프로그램을(asciitbl) 작성하세요.https://en.wikipedia.org/wiki/ASCII 를 참고합니다.화면 출력은 고정 화면폭(80자)을 기준으로 합니다.옵션을 지정하지 않으면 제어문자를 제외한(printable) 문자들만 출력합니다./a 옵션은 모든 문자를 출..
프로그래밍은 환상적인 "코딩" 보다는 완벽한 "문제 해결"에 마음을 두어야 할 것입니다. 요구사항(문제)을 잘 분석해서 핵심을 파악하는 것이 시간과 노력을 아끼는 첩경입니다. 초보 개발자 일수록 빨리 끝내려는 조급함이 오히려 함정에 빠지는 기폭제가 될 수 있으므로 "어떻게 문제를 풀 것인가?" 하는 설계가 잘 나오도록 마음을 두어야 합니다. 이번 문제는 간단하지만 방심하면 곳곳에 빈틈이 생길 수 있습니다. 완성도를 높일 수 있도록 노력해야 할 것입니다. ■ 문제 1. 프로그램 형태 및 규칙 - 콘솔 프로그램 형태이며 프로그램 아규먼트로 년도 및 월을 입력받아 해당 월의 달력을 표준 출력(화면)으로 출력합니다. - 1년 1월 1일은 월요일. 4년마다 윤년으로 2월을 29로 처리 - 4년마다 윤년이지만 10..
비주얼스튜디오로 Web API나 MVC 프레임웍을 사용한 응용을 개발하다보면 웹 응용임에도 불구하고 데스크탑용 닷넷 프로그램을 실행시키는 것처럼 간편하게 응용을 테스트해 볼수 있습니다. 비주얼스튜디오에서 테스트 및 디버깅을 위한 자체 웹서버를 띄우고 실제 실행 환경의 한 축인 웹 브라우저도 가동시키기 때문입니다. 이러한 과정은 로컬 호스트(127.0.0.1)에 대해서만 서비스하도록 되어 있기 때문에 스마트폰이나 다른 컴퓨터에서는 테스트하기 어렵거나 불가능한 환경입니다. 그렇지만, 프로그램을 완성하기 이전에 다양한 환경에 대한 테스트를 위해서는 비주얼스튜디오를 통한 내부 테스트를 벗어나 실제 웹서버(IIS)를 통한 테스트를 수행할 필요가 있습니다. 이번 포스팅에서는 배포 패키지를 통해서 간단하게 웹서버(I..
※ LINQ 연관글 모음 LINQ는 무엇인가?LINQ 배우기를 위한 최적의 환경 LINQ to ObjectsLINQ 질의의 기본과 사전 타입LINQ 정렬 기능 사용하기LINQ 사용법 - 그룹과 집합 연산LINQ 조인 구문 사용하기LINQ 필터링 다루기LINQ 특정 항목 추출하기LINQ 사용법 - 변환 및 생성LINQ 집합 연산 다루기 SQL을 통해서 질의문을 작성하다보면 여러개의 SELECT문을 집합 연산을 통해서 통합 시킬 필요가 있는 경우가 있습니다. 여러 질의를 각각 수행한다음 통합하는 것 보다는 DBMS에게 해당 연산을 모두 맡기는 방법입니다. LINQ에서도 질의 결과에 대한 집합 연산을 메소드를 통해서 수행할 수 있습니다. List userinfo = new List() { new Userinf..
※ LINQ 연관글 모음 LINQ는 무엇인가?LINQ 배우기를 위한 최적의 환경 LINQ to ObjectsLINQ 질의의 기본과 사전 타입LINQ 정렬 기능 사용하기LINQ 사용법 - 그룹과 집합 연산LINQ 조인 구문 사용하기LINQ 필터링 다루기LINQ 특정 항목 추출하기LINQ 사용법 - 변환 및 생성LINQ 집합 연산 다루기 "LINQ 질의의 기본과 사전 타입"에서 다룬것과 같이 LINQ 질의의 수행시점에 따라 즉시 실행(Immediate Execution)과 지연 실행으로 나뉘어 질 수 있습니다. 질의를 선언만 하고 이후에 foreach 문장에서 실질적으로 실행하는 일반적인 지연 실행과 달리 질의 결과를 직접 받는 경우는 대부분 질의에 ToList(), First(), FirstOrDefaul..
"ASP.NET Web API 시작하기"에서 다룬 ASP.NET Web API 예제는 Visual Studio 2015 Community 버전으로 수행한 것입니다. 최신 버전의 비주얼스튜디오를 사용하고 있다면 문제될 것이 없지만 협업이나 기타 이유로 Visual Studio 2010을 사용하는 개발자의 경우에는 Web API 템플릿이 기본 제공되지 않기 때문에 간편하게 Web API 응용을 개발하는 유익을 누릴 수 없다는 한계가 있습니다. 이런 경우에는 마이크로소프트에서 제공하는 "Microsoft ASP.NET MVC 4" 패키지를 설치하면 최근 버전처럼 간편하게 Web API 응용을 개발할 수 있습니다.https://www.microsoft.com/ko-KR/download/details.aspx?i..
C언어에서 문자열 처리는 자주 사용할 뿐만아니라 반드시 익숙해져 할 만큼 매우 중요한 요소입니다. memcpy, strcpy, strncpy 등의 함수로 단순히 문자열을 복사하기, memcmp, strcmp, strncmp로 문자열 비교하기, strstr, strchr과 같은 함수로 특정 문자열이나 문자 찾기까지 C 프로그래밍에서는 너무도 빈번하게 사용하는 함수들입니다. 이번 포스팅은 문자열에서특정 항목을 추출하는 다양한 요령을 다루어 볼까 합니다. 텍스트 파일을 분석하거나 파이프나 필터를 통해서 다른 응용 프로그램의 출력을 입력으로 해서 분석하거나 웹 조회 결과를 분석하는 등의 과정에서 특정 단어를 추출하거나 숫자 항목을 추출하는 등의 작업은 C 프로그래밍에서 피할 수 없는 숙명과 같은 작업입니다. /..
ASP.NET Web API는 닷넷 프레임워크 위에 HTTP 기반의 Web API를 구축하도록 돕는 프레임워크입니다. 사용자 인터페이스와는 직접적인 연관이 없기 때문에 단순히 Web API 서비스 만을 제공할 수도 있고, ASP.NET Web Pages, Web Forms, MVC등과 함께 사용할 수도 있습니다. SPA(Single Page Application) 응용이나 페이지 갱신 없이 동적인 페이지 구성을 원하는 경우 Web API는 반드시 검토 해야하는 기술 요소입니다. 데스크탑의 웹 브라우저를 넘어서 스마트폰이나 태브릿등 다양한 기기를 대상으로 서비스한다면 ASP.NET Web API는 효용성이 더욱 높아질 것입니다. ASP.NET Web API는 클라이언트가 AJAX 프레임워크나 기타 방법을 ..
C# 닷넷으로 응용 프로그램을 개발하다가 꺾은선 그래프나 바차트, 3D 차트등을 표시할 필요가 있을 경우에는 도구 상자에서 데이터>Chart 컨트롤을 추가하여 간편하여 차트를 추가할 수 있습니다.System.Windows.Forms.DataVisualization.Charting 클래스를 통해서 윈도우 폼에 추가된 컨트롤에는 데이터베이스로 부터 전달받은 DataTable 오브젝트를 직접 설정할 수 있는 등 편리하게 도표를 개발할 수 있도록 도와줍니다. 이렇게 비주얼스튜디오에서 기본적으로 제공하는 차트 클래스는 윈도우 시스템에서는 문제가 없지만 크로스플랫폼 환경에서는 정상적으로 동작하지 않는 제약이 있습니다. 다시 말해서 리눅스의 mono 플랫폼에서는 정상적으로 동작하지 않는다는 문제가 있습니다. 아직 차..
C#에서 화면을 캡처하는 두가지 방법이 있습니다. 첫번째는 GDI32, USER32 API를 사용하는 방법이고 다른 하나는 닷넷에서 제공하는 Graphics.CopyFromScreen()를 사용하는 방법입니다. class GDI32 { public const int SRCCOPY = 0x00CC0020; // BitBlt dwRop parameter [DllImport("gdi32.dll")] public static extern long BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop); [DllImport("gdi32.dll")] publ..
C언어를 이제 막 배우기 시작한 병아리 개발자를 위해서 실습을 위한 과제를 내주고 이에 대한 피드백을 코드와 함께 메모로 남깁니다. 코드 실습 환경은 "C언어 배우기를 위한 준비"를 참조하세요. ■ 문제마방진 출력 프로그램 작성프로그램 형태 - 콘솔 프로그램 - 프로그램 아규먼트 입력, 화면 출력 형태입력 - 3 ~ 15의 홀수를 받음 - 오류 입력에 대처해야 함출력 - 입력 오류 발생시 오류 내용과 사용방법을 출력함 - 정상 입력시 N 마방진을 가로/세로 폭을 맞추어 출력 - 자체 검증을 위해서 가로, 세로 및 한쪽 대각선 방향의 함께를 출력함 ■ 코드와 해설다른 사람의 코드를 보지 않고 문제 내용만으로 코딩하는 연습이 실력을 키우는 첩경입니다. 홀수 마방진 작성 프로그램 연습은 2차원 배열을 기반으로..
public Form1() { InitializeComponent(); label1.Text = System.Environment.OSVersion.Platform.ToString() + ":" + System.Environment.OSVersion.Version.ToString() + ":" + System.Environment.OSVersion.VersionString; } C#으로 작성한 닷넷 응용을 윈도우 뿐만아니라 리눅스에서도 실행할 수 있는 시대가 되면서 크로스 플랫폼 응용을 개발하려는 개발자에게는 운영 체제 종류나 버전을 인식해야되는 필요성이 있습니다. 닷넷(mono 포함) 프레임워크가 발전하고는 있지만 운영체제나 버전에 따라서 지원하는 수준이나 동작 형태가 다르기 때문입니다. 오로지 특정 ..
※ LINQ 연관글 모음 LINQ는 무엇인가?LINQ 배우기를 위한 최적의 환경 LINQ to ObjectsLINQ 질의의 기본과 사전 타입LINQ 정렬 기능 사용하기LINQ 사용법 - 그룹과 집합 연산LINQ 조인 구문 사용하기LINQ 필터링 다루기LINQ 특정 항목 추출하기LINQ 사용법 - 변환 및 생성LINQ 집합 연산 다루기 데이터베이스 질의의 효용성은 특정한 키값을 가지고 있는 레코드를 찾아오는 것보다 특정한 조건을 갖는 정보들을 질의문 하나로 추출하는 과정에 있지 않나 싶습니다. where 구문을 통해 필터링한 이후에("LINQ 필터링 다루기" 참조) 그 결과에서 특정 항목들을 추출하는 것을 다룹니다. ■ 페이징(Paging) List userinfo = new List() { new Use..
※ LINQ 연관글 모음 LINQ는 무엇인가?LINQ 배우기를 위한 최적의 환경 LINQ to ObjectsLINQ 질의의 기본과 사전 타입LINQ 정렬 기능 사용하기LINQ 사용법 - 그룹과 집합 연산LINQ 조인 구문 사용하기LINQ 필터링 다루기LINQ 특정 항목 추출하기LINQ 사용법 - 변환 및 생성LINQ 집합 연산 다루기 LINQ에서 필터링은 데이터소스에서 필요한 것을 골라내는 작업으로 where 구문을 통해서 필터링 작업을 수행합니다. where 구문에 기술하는 조건문은 SQL 구문이 아니라 C# 조건문으로 기술합니다. 복합 조건인 경우 SQL의 "AND", "OR", "NOT"이 아니라 C# 구문인 &&, ||, ! 연산자를 사용합니다. public class Userinfo { publ..
※ LINQ 연관글 모음 LINQ는 무엇인가?LINQ 배우기를 위한 최적의 환경 LINQ to ObjectsLINQ 질의의 기본과 사전 타입LINQ 정렬 기능 사용하기LINQ 사용법 - 그룹과 집합 연산LINQ 조인 구문 사용하기LINQ 필터링 다루기LINQ 특정 항목 추출하기LINQ 사용법 - 변환 및 생성LINQ 집합 연산 다루기 조인(JOIN) 구문은 데이터베이스에서 테이블 또는 릴레이션을 연결하여 새로운 테이블이나 릴레이션을 생성해 주는 구문입니다. 물론 LINQ에서는 테이블만이 아니라 일반적인 데이터 오브젝트의 결합도 수행할 수 있도록 확장되었습니다. 사실 DBMS 입장에서는 조인 구문만큼 DB 시스템을 괴롭히는 구문도 없을 것입니다. 문장은 간단하지만 그 결과를 얻기 위해서 DBMS가 처리해야..
오픈소스 프로젝트를 만나거나, 업무로 기존 프로젝트를 분석할때 도구의 좋은 기능을 활용하면 분석의 효율성은 엄청난 차이를 보이기 마련입니다. 유닉스/리눅스 환경에서 vi 에디터 만으로 개발하던 개발자들 조차도 ctags와 vim을 활용하면 왠만한 IDE 부럽지 않은 코드 분석 환경을 사용할 수 있었으므로 최근의 IDE에서 관련 기능을 찾기란 그리 어렵지 않은 일입니다. 코드를 읽다가 특정 변수나 클래스, 함수, 메소드등이 어떻게 정의되었는지 확인하려면 Ctrl+F 단축키로 검색을 하는 것이 아니라 코드의 해당 위치에 커서를 둔 상태에서 컨텍스트 메뉴(마우스 우측 마우스)>"정의로 이동"을 선택하면 됩니다. 물론 자주 사용하는 단축키이므로 F12는 외워 두는 것이 좋겠죠! 문제는 어떻게 정의 되었는지를 살..