※ LINQ 연관글 모음 LINQ는 무엇인가?LINQ 배우기를 위한 최적의 환경 LINQ to ObjectsLINQ 질의의 기본과 사전 타입LINQ 정렬 기능 사용하기LINQ 사용법 - 그룹과 집합 연산LINQ 조인 구문 사용하기LINQ 필터링 다루기LINQ 특정 항목 추출하기LINQ 사용법 - 변환 및 생성LINQ 집합 연산 다루기 테이블의 특정 컬럼 값을 기준으로 데이터를 묶어서(Grouping) 동일 컬럼 값을 가지고 있는 행의 개수(Count)를 구하거나 합계나 평균을 구하는 작업은 굳이 데이터를 모두 읽지 않더라도 SQL을 통해서 DBMS에 해당 작업을 요청하는 것으로 간편하게 수행할 수 있는 작업입니다. SQL을 사용하는 데이터베이스 뿐만아니라 XML이나 내부 오브젝트도 데이터 소스로 사용할 ..
※ LINQ 연관글 모음 LINQ는 무엇인가?LINQ 배우기를 위한 최적의 환경 LINQ to ObjectsLINQ 질의의 기본과 사전 타입LINQ 정렬 기능 사용하기LINQ 사용법 - 그룹과 집합 연산LINQ 조인 구문 사용하기LINQ 필터링 다루기LINQ 특정 항목 추출하기LINQ 사용법 - 변환 및 생성LINQ 집합 연산 다루기 SELECT * FROM tablea WHERE username like '%hong%' ORDER BY username, userid DESC; 위의 SQL 문장은 tablea라는 테이블에서 username 컬럼에 "hong"이 들어 있는 모든 행을 추출하면서 username 컬럼으로 오름차순 정렬하고 username 값이 같은 행끼리는 userid 컬럼 값으로 내림차순 ..
※ LINQ 연관글 모음 LINQ는 무엇인가?LINQ 배우기를 위한 최적의 환경 LINQ to ObjectsLINQ 질의의 기본과 사전 타입LINQ 정렬 기능 사용하기LINQ 사용법 - 그룹과 집합 연산LINQ 조인 구문 사용하기LINQ 필터링 다루기LINQ 특정 항목 추출하기LINQ 사용법 - 변환 및 생성LINQ 집합 연산 다루기 앞선 "LINQ 배우기를 위한 최적의 환경 LINQ to Objects"에서 다루었듯이 다양한 데이터 저장소에 대한 LINQ 사용법은 내부 오브젝트에 대한 LINQ 사용법을 익힘으로써 일정 부분 대신할 수 있으므로 리스트나 사전과 같은 C# 내부 오브젝트를 활용해서 LINQ에 대한 이해와 사용법을 차근 차근 다루어 볼까 합니다. 이번 포스팅은 사전 타입을 활용하여 LINQ ..
※ LINQ 연관글 모음 LINQ는 무엇인가?LINQ 배우기를 위한 최적의 환경 LINQ to ObjectsLINQ 질의의 기본과 사전 타입LINQ 정렬 기능 사용하기LINQ 사용법 - 그룹과 집합 연산LINQ 조인 구문 사용하기LINQ 필터링 다루기LINQ 특정 항목 추출하기LINQ 사용법 - 변환 및 생성LINQ 집합 연산 다루기 "LINQ는 무엇인가?"에서도 다루었지만 LINQ(Language-Integrated Query)는 데이터베이스, XML 파일, ADO.NET 오브젝트, DataSets 뿐만아니라 내부 자원에 대해서도 다른 데이터 소스와 동일한 방식으로 처리를 수행할 수 있음을 나누었습니다. 다른 시각에서 바라보면 한가지 데이터소스에 대한 LINQ 사용법에 익숙하다면 다른 데이터소스에 대한..
※ LINQ 연관글 모음 LINQ는 무엇인가?LINQ 배우기를 위한 최적의 환경 LINQ to ObjectsLINQ 질의의 기본과 사전 타입LINQ 정렬 기능 사용하기LINQ 사용법 - 그룹과 집합 연산 LINQ 조인 구문 사용하기LINQ 필터링 다루기LINQ 특정 항목 추출하기LINQ 사용법 - 변환 및 생성LINQ 집합 연산 다루기 ASP.NET을 공부하면서 새롭게 만난 단어 LINQ, 어디서 들어 본듯한데 가물 가물하고, 그래서 이번 포스팅은 LINQ에 대해서 자세하게 알아볼까 합니다. LINQ는 Language-Integrated Query에서 따온 것으로 번역하면 "언어에 통합된 질의" 정도가 선명할것 같습니다. conn = new MySqlConnection(connstr); conn.Open..
다양한 입력 양식을 기반으로한 데이터 저장 및 검색을 주로하는 웹사이트라면 ASP.NET Web Forms를 적극 검토할 필요가 있습니다. ASP.NET Web Forms는 윈도우 폼 응용을 개발하는 것처럼 다양한 컨트롤을 도구 상자에서 끌어다 놓기로 화면을 디자인하고 버튼을 클릭했을때 처리하는 로직을 추가하는 등의 이벤트 기반 프로그래밍을 웹사이트에서도 적용할 수 있도록 해줍니다. ASP.NET MVC, ASP.NET WebAPI에 비하면 가장 고전적인 개발 방식일 수 있지만 나름의 유용성도 있다고 봅니다.파일>새로만들기>프로젝트로 ASP.NET Web Forms를 시작합니다. 위의 그림과 같은 "새 프로젝트" 창에서 템플릿>Visual C#>웹을 클릭하고 "ASP.NET 웹 응용 프로그램"을 선택한 ..
윈도우10의 무료 업데이트가 끝난지도 벌써 한달이 넘어가고 있습니다. 윈도우8, 윈도우10등이 등장하고 윈도우 XP의 지원 종료가 선언되면서 여전히 적지 않은 XP사용자들은(2015년 10월 기준으로 Windows XP의 데스크탑 점유율은 11.68%에 이른다고 합니다 - NetMarketShare) 컴퓨터를 갈아타야만 하나 하는 고민에 빠져있습니다. "여전히 사용하는데는 크게 문제가 없는데......"하는 아쉬움이 깊죠. 올해부터는 구글의 크롬 브라우저 조차도 XP 지원을 중단했습니다. 문제는 오픈 소스 진영에서 배포하는 프로그램들 조차도 최신 버전에서는 XP를 지원하지 않는다는 것입니다. 오픈 소스 프로젝트에서 배포하는 최신 버전의 Win32 프로그램을 설치하고 실행하면 위의 그림과 같이 "올바른 W..
하나의 C/C++프로그램으로 리눅스 뿐만아니라 맥과 윈도우에서도 구동하는 크로스 플랫폼 응용을 개발하려는 경우 많은 경우 검토 대상으로 등장하는 것이 자바 RCP와 같은 자바 기반 응용이나 GTK+, QT 기반의 응용 인데 이번에는 QT 기반의 C/C++ 응용을 윈도우에서 빌드하는 과정을 통해서 QT 응용의 윈도우 포팅을 위한 성공 사례를 확인할까 합니다. 이번 포스팅의 목표가 되는 프로젝트는 BibleTime이란 프로젝트로 잡았습니다. 리눅스에서 빌드한다면 yum이나 apt-get으로 연관 패키지를 간편하게 설치하여 손쉽게 빌드하겠지만 윈도우 빌드이니 만큼 빌드 환경을 갖추는 것이 그리 녹록하지는 않습니다. 그렇지만 일단 개발 환경이 갖추어지면 그 다음 부터는 응용 개발에 집중할 수 있으니 개발 환경 ..
간만에 C/C++ 프로젝트를 빌드하다보니 메뉴나 핫키를 통한 빌드외에도 비주얼스튜디오가 제공하는 다른 도구들을 사용할 경우가 생겼습니다. 예를 들면 라이브러리 관리자(lib.exe)를 가지고 *. ref 파일로 *.lib 파일을 만들거나 make 도구의 윈도우 버전인 nmake를 직접 수행하는 것입니다. 도구가 메뉴에 있겠다 싶었고 예전에는 시작 메뉴에서 본것도 같았는데 버전에 따라서 설치하지 않는 경우도 있는 모양입니다. 비주얼스튜디오에서 도구>외부 도구 메뉴로 위와 같은 창을 띄우고 [추가]버튼으로 새로운 메뉴를 추가하면 됩니다.제목 : 도구메뉴에 표시될 메뉴 이름을 입력합니다. 명령 : 위와 같이 윈도우 시스템 폴더의 cmd.exe를 기술합니다.인수 : /k "C:\Program Files\Micr..
컴퓨터 한대로 모니터 두개를 사용하는 듀얼모니터 사용 환경이 일반화되면서 C# 개발자 입장에서도 다중 모니터 환경에 대한 처리를 해야 하는 경우가 생겼습니다. 증권 트레이딩을 하시는 분들이나 공장의 모니터링 환경에서는 모니터 4대를 연결할 수 있는 그래픽 카드를 장착해서 컴퓨터 한대로 4개의 모니터를 사용하기도 합니다. Screen[] screens = Screen.AllScreens; if (screens.Length > 1) // Has more screen { Screen scrn = (screens[0].WorkingArea.Contains(this.Location)) ? screens[1] : screens[0]; dualscr.Show(); dualscr.Location = new System..
C#.NET에서 다양한 사용자 컨트롤을 만들어 놓고 윈도우 폼에 적용해서 사용하는 경우 윈도우 폼 클래스에서 개별 컨트롤의 임의의 속성을 참조하거나 메소드를 실행시킬 필요가 있을 때가 있습니다. 닷넷에서는 System.Reflection을 통해서 프로그램 실행 중에 특정 클래스의 속성이나 메소드를 찾아서 참조하거나 호출할 수 있도록 기능을 제공하고 있습니다. 마치 자바 스크립트와 같은 웹 스크립트 언어에서 지원하는 기능을 사용할 수 있습니다. 윈도우 폼에 도구 상자에 있는 다양한 컨트롤이나 사용자 컨트롤을 배치하면 위의 그림과 같이 Form>Panel>Control과 같은 계층 구조를 갖게 됩니다. Form 오브젝트의 .Controls를 확인하면 Form에 속한 두개의 판넬 오브 젝트를 찾을 수 있고 각..
"ASP.NET기반으로 웹 사이트를 구축하는 4가지 방법"중의 하나로 ASP.NET 웹 페이지 개발 맛보기를 다룰까 합니다. ASP.NET 기반의 개발 방법 중에서 가장 단순한 구조를 가지고 있고 PHP, ASP, JSP와 같은 스크립팅 언어를 이용하는 전통적인 웹 개발 방법과 유사하기 때문에 기존 개발 방법에 익숙해 있고 시스템 구조의 단순함을 원하는 사람이라면 "ASP.NET 웹 페이지" 개발 방법을 적용할 필요가 있습니다.ASP.NET 웹 페이지 개발을 위한 환경으로 .NET 프레임워크를 비롯하여 ASP.NET 코드를 작성하기 위한 편집기, 웹서버, 데이터베이스, 사이트 적용을 위한 도구등을 들수 있는데 이러한 환경을 손쉽게 구축할 수 있는 도구로 마이크로스프트에서는 웹매트릭스(WebMatrix)라..
"ASP.NET 레이저(Razor) 시작하기"에 이어서 VB.NET 기반의 레이저 문법을 정리해 봅니다. @Code Dim today_str = "오늘은 " + DateTime.Now.Date.ToString() + " 입니다." Dim req_type As String = Request.RequestType Dim max_year As Integer = 200 End Code 페이지 방문을 환영합니다. @today_str 요청 내용 : @* 코드 외부 주석 *@ URL : @Request.Url 요청형식 : @req_type 길이 : @Request.ContentLength @Code @주요 설정 : @:테스트 메시지 @* 코드내 주석 *@ @입력 가능 연도 : @max_year End Code ■ 기..
"ASP.NET 레이저(Razor) 시작하기"에 이어서 C# 기반의 레이저 문법을 정리해 봅니다. @{ var today_str = "오늘은 " + DateTime.Now.Date.ToString() + " 입니다."; String req_type = Request.RequestType; int max_year = 2030; } 페이지 방문을 환영합니다. @today_str 요청 내용 : @* 코드 외부 주석 *@ URL : @Request.Url 요청형식 : @Request.RequestType 길이 : @Request.ContentLength @{ 주요 설정 : @:테스트 메시지 @* 코드내 주석 *@ 입력 가능 연도 : @max_year } ■ 기본 문법@{ .... } 블럭으로 표현하는 C# 코드..
ASP.NET은 이전에 사용했던 ASP(Active Server Pages)의 단순한 업그레이드 판이 아닙니다. 마이크로소프트사에서 "통합 웹 개발 모델"로 소개하는 것과 같이 웹페이지를 표현하는 HTML 코드에 ASP 스크립트를 단순하게 섞어서 서버 작업을 수행하는 서버 스크립트 정도에 그치는 것이 아니라 .NET 프레임워크의 일부로 제공되어 ASP.NET에서 .NET에 간편하게 접근할 수 있을 뿐만아니라 C#, VB.NET 등의 다양한 언어를 사용하여 웹 응용을 개발할 수 있습니다. ASP.NET을 이용한 웹 개발은 클라이언트에 HTML을 제공하는 시각에서는 ASP.NET Web pages, ASP.NET Web Forms, ASP.NET MVC가 있고 이 방법론들과 결합하여 또는 독립적으로 동작할 ..
ASP.NET과 전통적인 ASP와의 큰 차이점중의 하나는 ASP에서는 서버 코드를 작성할 때 코드 블럭의 시작을 로 표시한 다음 블럭 내부에 VB Script로 코드를 작성 했으나 ASP.NET에서는 @문자를 사용하는 레이저(Razor) 마크업을 통해서 서버 코드로 C# 및 VB.NET 언어를 사용할 수 있다는 점입니다.위의 그림은 웹매트릭스("무료 웹 개발도구 웹매트릭스 설치하기 - WebMatrix3" 참조)에서 페이지를 추가할 때 나오는 기본 템플릿 예제로 레이저 기반의 웹페이지를 만들 때는 CSHTML 또는 VBHTML을 선택합니다. 다시 말해서 C# 언어를 사용하는 레이저 문법을 사용할 경우에는 *.cshtml 파일명으로 코드를 작성하고 VB.NET 언어를 사용하는 레이저 문법을 사용하는 페이지..
"VB.Net 프로그램의 완성 - 디플로이(Deploy)"에서 설치 프로그램을 통한 프로그램 배포 과정을 다루었습니다. 윈도우 시스템에서의 설치 및 설치 제거는 "msiexec.exe"를 통해 이루어지기 때문에 프로그램의 제거 과정에 특별한 조치가 필요해서 별도의 응용 프로그램을 실행시켜야 하는 경우가 아니라면 "msiexec.exe"를 실행시켜 해당 응용 프로그램을 제거할 수 있습니다. 제어판>프로그램 추가/삭제에서 제거하는 것과 동일한 작업을 수행합니다. 설치 프로젝트에 "msiexec.exe"를 실행시키는 배치 파일(*.bat)를 추가하고 사용자 메뉴에 언스톨을 추가하는 방법을 간단히 나누고자 합니다."*.bat"라는 파일을 새롭게 작성해서 위의 스크립트를 입력합니다. /x 옵션은 제거를 의미하고 ..
하나의 웹사이트를 통해서 단순한 홈페이지를 서비스하거나, 커뮤니티를 구성하거나, 업무를 수행하는 워크프로우를 제공하거나, 포털을 서비스 할 수도 있지만 어떠한 웹사이트를 만드는 과정에도 본격적인 개발에 앞서 요구사항 수집 및 분석, 기획, 설계등의 과정을 거치게 됩니다. 성공적인 개발은 개발에 앞서 이루어지는 이러한 과정들을 꼼꼼하게 수행해야만 가능한 것입니다. 산출물로는 요구사항 목록, 기획서, 스토리보드 등이 있을 것입니다. 경우에 따라서는 벤치마킹 보고서나 파일럿 보고서등도 포함될 것입니다. 그렇다면, 개발 단계에 이르러 주요 기술로 ASP.NET을 선택했다면 ASP.NET과 연관성을 가진 기술들은 무엇이 있을까요? 네이버나 다음과 같이 웹 기술을 다루는 대형 조직에서는 기획, UI(User Int..
스마트폰, 태블릿, 노트북, 데스크탑에 이르기까지 웹을 구동하지 않는 기기가 없을 정도로 웹은 우리 삶 전반에 깊은 영향을 주는 기술임에 틀림없습니다. 우리에게 이미 친숙한 프로그램인 익스플로러, 크롬, 사파리와 같은 웹 브라우저에서 웹 주소를 입력하는 방식으로 웹 페이지를 요청하면 아파치나 IIS(Internet Information Services)와 같은 웹서버는 요청한 주소의 페이지를 찾아 전달해주고 웹 클라이언트인 브라우저는 전달받은 페이지의 내용(HTML)을 사용자에게 보여주는 방식입니다. 단순한 회사 소개 페이지 처럼 HTML 파일이나 이미지를 보여주는 것이 전부인 웹 페이지를 정적(Static) 웹 페이지라 하고 로그인, 상품 주문, 게시판 처럼 사용자의 반응과 입력에 따라 내용이 달라지는..
"자바 환경에서 동영상 출력하기 - VLCJ 준비"에 이어서 VLCJ 프레임워크와 VLC 미디어 플레이어를 기반으로 자바 환경(Java AWT 및 Swing JFrame )에서 동영상 출력하기를 다룰까 합니다. VLCJ 프레임워크는 Java AWT나 Swing 내부에 VLC 미디어플레이어를 올려주는 역할을 하기 때문에 JNA(Java Native Access) 라이브러리를 필요로 합니다. 프로젝트에 JNA 라이브러리를 포함시키거나 실행 환경에 설치되어 있어야 합니다. JNA는 https://github.com/java-native-access/jna 에서 다운로드 받을 수 있습니다. 위의 그림처럼 jna.jar과 jna-platform.jar 모두가 필요합니다. JNA와 더불어서 동영상을 출력하기 위해서..
Java AWT나 Swing JFrame 환경에서 동영상을 출력하는 방법을 찾아보니 오라클에서 제공하는 JMF(Java Media Framework)를 사용하는 방법과 오픈소스 프로젝트인 VLCJ를 사용하는 방법이 눈에 들어왔습니다. 자바 개발사가 배포하는 패키지이므로 겉보기에는 JMF에 대한 신뢰성이 있다고 여겼으나 맛보기로 코드를 작성해 보니 뭔가 삐걱거렸고 개발자들의 평도 JMF보다는 VLCJ를 추천하더군요. 그래서 깃허브를 통해 최신 코드를 배포하고 있는 VLCJ를 사용해 보기로 했습니다.VLCJ는 오픈소스 미디어플레이어인 VLC Media player를("참 맘에 드는 VLC 미디어 플레이어" 참조) Java AWT나 Swing JFrame 환경에서 장착할 수 있는 프레임워크를 제공하는 라이브러..
C#은 C와 같은 프로그래밍 언어이지만 언어를 정의하는 규격(Specification)이 지속적으로 변하고 있는 특성이 있습니다. 이 버전에서는 되고 버 버전에서는 않되는 혼란이 있을 수는 있지만 개발자의 필요를 즉각적으로 반영하여 발전한다는 측면에서는 긍정적입니다. 2002년 C# 1.0 규격이 발표된 이래 현재는 2015년에 발표된 C# 6.0이 최신 규격으로 사용되고 있습니다. 문제는 언어 규격이 바뀌면 바뀐 언어 규격을 모르는 이전 컴파일러들은 새로운 규격을 소화할 수 없으니 당연히 문법 오류(Syntax error)를 발생시킬 것이라는 점입니다. C# 프로젝트의 속성 창에서 빌드>고급을 통해서 위의 그림과 같이 고급 빌드 설정을 확인해 보면 현재의 비주얼스튜디오에서 지원하는 C# 언어의 버전을 ..
리눅스용 비주얼스튜디오(Visual Studio Code)가 등장하고 마이크로소프트사에서 리눅스 진영에 대한 적극적인 대응이 활발하게 이루어 지고 있는 시기에 새 버전의 비주얼스튜디오를 만나게 되었습니다. 그 이유는 다른 아닌 C# 6.0 때문입니다. C# 언어의 새 버전 규격을 적용한 코드를 빌드하려다 보니 이전 버전에서는 불가능하고 어쩔수 없이 C# 6.0 규격을 지원하는 비주얼스튜디오 2015를 설치하게 되었습니다.Visual Studio Community 2015의 다운로드는 https://www.visualstudio.com/ko-kr/products/visual-studio-community-vs.aspx에서 할 수 있습니다. 개발자 버전인 "Express"의 모든 기능이 포함되고 사용할 수 ..
테스트와 디버깅 과정을 거쳐서 프로그램 제작을 끝내면 이제 남은 작업은 프로그램이 동작할 곳에 실행 파일을 복사하고 실행에 필요한 환경 설정이나 파일을 준비하는 것입니다. 이러한 준비 과정을 디플로이(Deploy)라고 합니다. 디플로이는 '전개시키다', '배치하다' 처럼 군사용어로 사용하는 것이지만 소프트웨어를 사용 가능하도록 준비하는 모든 과정을 디플로이라는 IT용어로 사용하고 있습니다. 디플로이에는 릴리즈, 설치, 가동 시작, 가동 중단, 설정 변경, 업데이트, 제거등의 요소가 포함되지만 통상적으로 배포(Distribute)와 설치(Install) 과정을 생각하면 적절하지 않을까 싶습니다. 프로그램은 특정한 한 서버에서만 동작할 수도 있고 불특정 다수의 컴퓨터에서 동작할 수도 있기 때문에 배포와 설치..
IPO(Input Process Output) 모델은 프로그램을 분석하거나 설명하는데 사용하는 가장 기본적인 모델입니다. 프로그램으로 들어오는 입력 자료의 구조와 형태, 처리 내용과 방식, 출력 자료의 구조와 형태를 명확하게 분석하거나 설계하는 것은 안정적인 프로그램의 시작이라 할 수 있습니다. [49-50] 다음과 같은 문제를 해결하기 위해 프로그램을 작성하였다. 물음에 답하시오. 무게가 서로 다른 개의 물건이 있다. 각 물건은 1부터 까지 번호가 매겨져 있다. 우리는 일부 물건 쌍에 대해서 양팔 저울로 어떤 것이 무거운 것인지를 측정한 결과표를 가지고 있다. 이 결과표로부터 직접 측정하지 않은 물건 쌍의 비교 결과 를 알아낼 수도 있고 알아내지 못할 수도 있다. 예를 들어, 총 6개의 물건이 있고, ..
조금 큰 규모의 프로그램 읽기는 올림피아드 문제를 푸는 것과는 조금 다른 양상을 띄게 됩니다. 올림피아드 문제를 푸는 과정은 코드도 길지 않기 때문에 메인 루프를 찾고 코드의 동작 방식을 파악하면 어렵지 않게 코드의 동작 결과나 의도하는 바를 예측할 수 있습니다. 그러나, 실제 현장에서 사용하는 조금 큰 규모의 프로그램을 읽기 위해서는 해당 코드를 빌드(Build)하여 완성된 프로그램으로 실행되는지 확인할 필요가 있고 구체적인 세부 기능들을 동작시켜서 실제로 접해보는 것이 선행되어야만 합니다. 프로그램을 동작시켜서 기능들이 실제로 어떻게 동작하는지 맛보았다면 코드를 읽는 과정에서 알고리즘의 작성 배경과 실행 결과를 예측할 수 있기 때문에 좀더 명확한 프로그램 읽기에 도움이 될 수 있습니다. 큰 규모의 프..
이번 글에서는 함수가 코드의 핵심 역할을 하는 문제들을 골라 보았습니다. C언어를 기반으로 프로젝트를 수행하다보면 개인적으로 자주 적용하는 프로그래밍 기법 중에 하나가 바로 모듈화 프로그래밍입니다. 모듈화 프로그래밍은 기능 단위로 코드를 나누어 작성하는 것으로 개별 기능을 함수 단위로 나눌 수도 있고 소스 코드 자체를 분할 할 수도 있습니다. C++과 같은 OOP(객체지향프로그래밍) 언어에서는 클래스를 사용해서 기능과 데이터등도 분리하여 묶을 수 있지만 C언어 에서는 데이터를 바라보는 범위(Scope)가 함수 내부인가 외부인가로 단순하게 나누어 지고 함수 외부의 경우 같은 소스인가 아닌가 정도로 나뉘어 지므로 C언어에서의 모듈화는 함수로 기능 나누기가 그 시작이 될 수 있습니다. 실제로 프로그램 작성 과..
프로그램 소스를 대하는 학생들의 입장에서는 올림피아드 문제들이 무슨 수수께기 푸는 놀이도 아니고 머리만 아픈 이 일을 굳이 왜 해야할까? 하는 사람들이 있을지도 모르겠습니다. 그렇지만 "프로그램 읽기(Reading source code)"는 프로그래머(개발자)에게는 숙명과 같은 일 입니다. 그렇지만 개발자의 생리 자체가 자신이 구상한 것을 프로그램 코드로 일단 작성하고 나면 다시 보려하지 않는 특성이 있습니다. 프로그램을 읽는 경우는 버그를 찾아야 하거나 다른 사람이 작성한 것을 수정해야 하는 경우, 또는 조직에 프로그램 리뷰 프로세스가 있는 경우 리뷰할 목적으로 읽는 정도입니다. 그러나, 프로그래밍 기술을 성장시키는 가장 좋은 방법 중에 하나는 잘 작성된 프로그램을 읽는 것입니다. 예를 들면 가장 널리..
복합 대입 연산자는 +=, -=, *=, /= 처럼 산술연산자(+, -, *, /, %)나 비트연산자(>>, 2) { tot += (n / 10 + 1) * i; } else { tot += (n / 10) * i; } a += i * (n % 10); i *= 10; n /= 10; } printf("%d\n", tot); ① 616 ② 617 ③ 618 ④ 619 ⑤ 620 위의 문제는 정수 연산과 복합 대입 연산자를 잘 알고 있다면 어렵지 않게 풀 수 있습니다. while문의 조건이 n이 0보다 클동안이므로 n의 값이 0이거나 음수면 루프를 빠져나갑니다. n의 값을 10으로 나누면서 루프를 수행하므로 결과적으로 n의 값이 2015, 201, 20, 2일 동안 총 4회 수행하면서 tot의 값을 더해 ..
최근의 웹페이지들은 UTF-8인코딩을 채용하는 경우가 점점 늘어나고는 있지만 윈도우 환경이 지배적인 한국에서는 여전히 EUC-KR인코딩 내지 CP949 인코딩을 지원해야하는 것은 한국 개발자들의 숙명이 아닌가 싶습니다. 최근 PHP 환경에서 인코딩 변환을 하다가 문제를 해결한 사례를 메모해 둡니다. 웹서버는 UTF-8 인코딩으로 웹페이지 및 MySQL 데이터베이스에 저장하는 체계인데 서너개의 테이블을 조인해서 엑셀로 내려받기하는 기능을 추가하려 했습니다. DB 쿼리도 문제없고 테스트 과정에서 댓글도 하나로 잘 조인 되었습니다. SELECT t.id, t.type ttype, FROM_UNIXTIME( t.time /1000000 ) ctime, t.priority, t.owner, t.reporter, ..