파이어버드(Firebird) DBMS(Database Management System)의 설치와(파이어버드(Firebird) 데이터베이스 설치하기 참조) 사용 환경 준비(파이어버드 사용 환경 준비하기 참조)에 이어 이번 포스팅은 본격적으로 데이터베이스를 만들고 접속하여 쿼리를 수행하는 과정을 다룰까 합니다. MySQL이나 오라클과 같은 다른 DBMS처럼 파이어버드도 콘솔기반으로 SQL을 사용할 수 있는 isql 도구를 제공합니다. isql을 콘솔 인터페이스에서 사용할 경우에는 "isql -u 사용자아이디 -p 비밀번호 데이터베이스" 형식으로 특정 데이터베이스에 직접 접속 할 수도 있고 아래와 같은 옵션으로 다양한 기능을 사용할 수 있습니다. 데이터베이스를 생성하고 다양한 SQL을 실행할 수 있는 isql..
데이터베이스를 처음 사용하시는 분들은 DBMS(데이터베이스 관리 시스템)를 설치하고서도 무엇부터 해야하나? 하면서 막막한 느낌이 들수 있습니다. 오라클이나 SQL 서버와 같은 상용 DBMS의 경우에도 마찬가지여서 비싸지만 범접하기 어려운 경외의(?) 대상이라는 느낌까지 받을 수 있습니다. 그렇지만, 아무리 수많은 고급 기술이 포함되어 있는 제품이고, 듣도 보지도 못한 전문 용어가 난무하더라도 사용자 입장에서는 단순하게 대할 필요가 있습니다. DBMS를 하나의 냉장고 처럼 대할 필요가 있습니다. 냉장고 전원을 넣고 빼듯이 DBMS를 가동시키고 중단시키는 방법을 찾아 직접 해봅니다. 그 다음에는 냉장고 문을 열고 물건을 집어넣거나 가져오듯이 DBMS에 접속하는 방법을 찾아 데이터를 넣고 조회하는 작업을 해보..
오라클, SQL 서버, MySQL과 같은 인기있는 DBMS의 틈바구니에서도 끈질긴 생명력으로 10년이 넘는 세월을 버텨온 DBMS가 있습니다. 바로 파이어버드(Firebird) 입니다. "불새" 예전 독수리5형제가 불새로 변해서 악당을 물리치는 모습을 상상케하는 로고도 있습니다. 사실 오픈소스 DBMS의 대명사라 하면 APM, LAMP 패키지로 인해 그영역을 확장하고 Sun사를 거쳐 결국 오라클의 품에 들어간 MySQL일 것입니다. 초기 MySQL은 무료로 DBMS를 사용할 수 있다는 매력이 있었지만 DBMS의 2PC 커밋등 주요 핵심 기능을 갖추지 못해서 일부 개발자는 터부시 했던 것도 사실입니다. 지금의 MySQL이 그때의 모습과는 달리 미션 크리티컬한 업무에도 적용할 정도의 성능과 기능을 갖추었음에..
토터스깃을 사용하면서 여러 저장소를 관리하다보면 이 프로젝트를 손댄적이 있는지, 수정했다면 어떻게 손을 대었는지, 저장소를 복제한 원격 저장소의 주소는 무엇인지, 이 소스 코드는 누구에 의해 어떻게 변경되어 왔는지 등을 확인할 필요가 생깁니다. 토터스깃 저장소의 정보 확인은 윈도우 탐색기에 적용하는 아이콘 오버레이 기능으로 시작할 수 있습니다.(토터스깃(TortoiseGit) 돌아보기 참조) 윈도우 탐색기에 표시하는 원래의 아이콘에 토터스깃의 아이콘 오버레이가 적용되어 있다면 해당 폴더 또는 파일은 토터스깃의 형상 관리 대상이라는 의미이고 아이콘의 종류에 따라 기본적인 상태를 확인할 수 있습니다. 위의 그림은 "plagfind"라는 프로젝트에 변경 파일이 생겼다는 의미인 것입니다. 아이콘을 통한 상태확인..
웹 서비스가 다양화되고 클라이언트/서버 구조의 프로그램에서 조차 "검색"은 일반화된 기능이다보니 프로그래머의 입장에서 검색 결과의 일부분을 체계적으로 보여주는 페이징은 필수 불가결한 기능이라 할 수 있습니다. 그런데, 페이징 기능을 수행하려면 검색 결과의 개수를 먼저 파악해야하고 그중에 특정 부분의 행들을 추출할 수 있어야 합니다. 그런데 조건에 해당하는 모든 행의 개수를 파악하는 것도 테이블 전체를 스캔하므로 데이터베이스 시스템에 부담을 주지만 검색 결과를 특정 조건에 따라 정렬한 다음에 일부분을 뽑아내는 것은 개수를 파악하는 것보다 더 심한 부담을 주는 것이 사실입니다. 그렇다고 데이터베이스 수준에서 페이징을 수행하지 않고 클라이언트로 모든 데이터를 가져온다면 트래픽도 감당하기 어려울 뿐만 아니라 클..
이기종 데이터베이스를 사용하더라도 데이터베이스 간의 주요 데이터 타입은 유사하게 지원하는 것이 보통입니다. 대표적인 것이 문자열, 정수와 함께 일자시간 타입입니다. 위의 스키마는 3개의 컬럼을 가지고 있는 테이블로 tagname과 dt를 기준으로 주키(Primary key)를 설정한 것입니다. 위의 스키마를 각 데이터베이스 별 CREATE 문으로 작성하면 아래와 같습니다. 오라클만 DATE 타입을 사용하고 MySQL과 SQL Server는 DATETIME 타입을 사용합니다.== MySQL ==CREATE TABLE tags (tagname VARCHAR(16), dt DATETIME, val INT, PRIMARY KEY(tagname, dt));== SQL Server ==CREATE TABLE tag..
오라클 데이터베이스를 무료로 사용할 수 있는 개발자 버전 XE를 사용하다보면 갑자기 아래와 같은 메시지를 뿌리면서 접속이 않되는 경우가 있습니다.ORA-28001: the password has expiredCause: The user’s account has expired and the password needs to be changed 이유는 비밀번호의 유효 기간이 실제로 만료되어서 발생하는 현상으로 보안을 위해서 사용자가 주기적으로 비밀번호를 바꾸도록 유도하기 위한 장치입니다. PASSWORD_LIFE_TIME 변수를 통해서 비밀번호 유효 기간을 시스템레벨로 관리하는데 오라클 10g 버전 까지는 기본값이 무제한 이었지만 11g부터는 아래의 그림과 같이 기본값이 180일로 설정되어 있습니다. PASS..
데이터베이스를 사용하는 솔루션 프로그램들은 프로그램의 정상 가동을 위해서 필요한 스키마가 미리 준비되어 있는 상태로 프로그램을 시작하는 것이 일반적인 방법입니다. 그러나, 최근의 프로그램들은 데이터베이스 연결까지만 사용자가 설정해 놓으면 테이블이나 뷰 생성과 초기 데이터 준비를 프로그램이 알아서 진행하여 프로그램 수행 환경 준비를 자체 해결하는 경우가 많습니다. 이 과정에서 연결한 데이터베이스에 특정 테이블이나 컬럼의 존재 여부를 검사하는 과정은 필수적이라 할 수 있습니다. 테이블 존재 여부를 검사해서 테이블이 존재하지 않는 경우 자동으로 테이블을 생성하는 DDL(Data Definition Language) 문장을 실행할 수 있을 것입니다. 프로그램 버전 업그레이드 과정에서 특정 컬럼이 존재하지 않는 ..
필자가 토터스깃을 사용하는 가장 큰 이유는 아마도 서브버전 사용 과정에서 익숙해진 아이콘 오버레이 기능 때문이 아닌가 싶습니다. 토터스깃에서 제공하는 아이콘 오버레이 기능은 각 파일 및 디렉토리의 상태를 아이콘으로 보여줌으로서 개발자로 하여금 어떤 부분에 수정을 가했는지, 어떤 파일이 형상 관리 대상인지 아닌지를 아이콘을 통해 한눈에 파악할 수 있도록 도와 줍니다. 외부 저장소를 복제(Clone)해서 작업 사본(Working Copy)을 확보하면 초기 상태는 초록색 바탕의 체크 표시 아이콘인 "Normal" 상태가 됩니다. 위의 그림은 ".git" 명칭을 가진 기본(Bare) 저장소와 작업 사본(Woking Copy)이 함께있는 일반적인 저장소 복제(Clone) 방법으로 프로젝트를 시작한 예제로 폴더와 ..
분산 버전 관리 시스템(DVCS, distributed version control system)으로서의 깃(Git)을 사용한다는 의미는 현재 자신이 사용하는 컴퓨터 시스템에 로컬 저장소(Repository)를 확보하는 것으로 시작합니다.(깃(Git) 시스템 구조 이해 참조) 아무 것도 존재하지 않는 빈 저장소로 시작할 수도 있고 이미 어느 정도 진행한 기존의 다른 저장소(로컬 또는 원격)로 부터 시작할 수도 있습니다. 윈도우 탐색기에서 빈 디렉토리를 만들고 컨텍스트 메뉴>"Git 저장소 여기에 만들기"(git init)를 선택하면 아무 것도 존재하지 않는 빈 저장소로 형상 관리를 시작할 수 있습니다. "Git 저장소 여기에 만들기"를 수행하면 위의 화면과 같이 일반적인 깃 저장소로 만들지 기본 저장소(..
토터스깃의 한국어 적용과(한글 환경으로 토터스깃 사용하기 참조) 함께 사용중에 아직 번역이 진행되지 않은 부분을 만나면(2015년 10월 1일 현재 1.8.15.0 버전의 한국어 번역 진행률은 94%) 웹상에서(https://www.transifex.com/projects/p/tortoisegit/ 참조) 번역팀의 팀원으로 참여해서 작업을 진행할 수도 있지만 사전에 자신의 개발 환경에서 번역을 진행해서 테스트할 수 있는 방법도 있습니다. 위의 그림과 같이 번역이 미비된 부분에 대해서 직접 수정해서 일단 사용해 보고 싶다면 우선 두가지가 준비되어야 합니다. 첫번째는 번역을 위한 번역 파일 원본(*.po)이고 다른 하나는 번역을 적용하기 위한 언어 DLL파일입니다. 우선 번역 파일 원본은 위에서 언급한 tr..
토터스깃의 다국어 적용 방식은 조금 특이해서 토터스깃을 설치하면 영어가 기본 언어로 표시되지만 언어 파일이 따로 존재하는 것이 아니라 DLL 파일에 언어 파일을 적용하기 때문에 한국어 인터페이스 또한 별도의 DLL을 배포하는 방식으로 운용합니다. 아래의 그림은 토터스깃을 설치한 다음의 Language 폴더로 이 폴더에 각 언어별 DLL이 위치하지만 설치 시점에는 별도의 언어관련 DLL은 찾을 수 없습니다. 영어 이외의 언어는 별도로 언어팩을 설치해야 합니다. 일단, 한국어 환경을 적용하려면 한국어 언어팩을 https://tortoisegit.org/download/에서 아래의 그림과 같이 다운로드해서 설치해야 합니다. 다운로드 페이지의 한국어 번역 진행 상황을 보면 94%로 아직 완전한 번역이 진행되지 ..
토터스깃(TortoiseGit)을 어떻게 발음하는가 살펴보지 않고 "토르토이즈깃"이라 보이는대로 발음하던 때가 창피하기는 하지만 "토터스깃"도 그리 친한 느낌이 들지 않아서 "거북깃"이라 부를까? 하는 생각도 해봅니다. Daum 사전의 발음 기호는 tortoise [tɔ́ːrtəs]입니다. 주제와는 다른 이야기이기는 하지만 영어 동물 이름이 철자와 조금 다른 경우가 종종 있습니다. 우리말로는 코요테라 부르는 동물이 대표적인 예로 coyote의 발음 기호는 [kaióuti]이어서 "카이오티"에 가깝습니다. 각설하고 "윈도우에서 깃(Git)을 좀더 편리하게 사용하기 - TortoiseGit", "기존 코드를 깃으로 형상관리하기", "네이버 개발자센터를 깃 저장소로 사용하기", "깃(git) 웹서비스 설치하기..
깃(Git)을 웹을 통해서 접근할 수 있도록 설정하는 방법을 다룰까 합니다. 본 포스팅은 윈도우 시스템을 타겟으로 하지만 리눅스나 기타 시스템도 유사하게 적용할 수 있습니다. 깃(Git)을 웹을 통해서 접근할 수 있도록 하려면, 다시말해서 현재 PC를 웹을 지원하는(HTTP 또는 HTTPS) 깃서버로 사용하기 위해서는 우선 시스템에 깃을 설치해야 합니다(윈도우에서 깃(git) 설치하기 참조) 그리고 아파치 웹서버 또는 아파치 웹서버가 포함되어 있는 XAMPP와 같은 APM(Apache+PHP+MySQL) 패키지를 설치합니다. 그리고 깃 저장소들을 일괄적으로 포함하고 있는 폴더를 준비하면 깃의 웹서비스를 위한 준비는 충분합니다. 본 포스팅에서는 Apache 2.4.2 기반의 XAMPP를 사용하고 C:\gi..
깃허브와 같은 공개 저장소를 사용해서 여러 사람이 협업을 진행하는 것을 다룰까 합니다. 네이버 개발자센터(dev.naver.com)에서는 네이버 아이디만 있으면 누구나 공개 프로젝트를 만들 수 있고 프로젝트를 위한 이슈 트래커와 위키, 형상 관리를 위한 코드 저장소를 사용할 수 있습니다. 코드 저장소는 Mercurial, 깃(Git), 서브버전(Subversion) 세가지 방식으로 제공하고 있습니다. 처음 네이버 개발자센터가 만들어질때는 서브버전만 서비스 했는데 시대 흐름에 따라 깃과 Mercurial도 제공하는 것 같습니다. 깃 저장소를 사용하려면 기존 프로젝트에 새로운 개발자로 참여해서 권한을 얻거나 새로운 프로젝트를 시작하는 방법이 있는데 프로젝트를 시작하는데 아직은 별다른 제한이 없으므로 위의 그..
현재를 데이터베이스의 시대라 해도 과언이 아닐만큼 스마트폰부터 메인플레임까지 각종 데이터베이스 시스템으로 넘쳐나는 시대입니다. 결정권자에 의해 어떤 데이터베이스 시스템이 결정되면 해당 조직은 결정된 데이터베이스에 의존적인 구조가 되는 것도 현실입니다. 특히 오라클이나 SQL 서버를 DBMS로 사용하는 조직의 경우에는 이러한 의존적 구조가 심화되어 데이터베이스 시스템을 바꾸기란 여간 어려운 일이 아닙니다.그렇지만 이미 데이터베이스 관련 기술은 일반화되어 오픈소스 데이터베이스 시스템으로도 기업의 핵심 업무를 수행하는데 아무런 지장이 없고 분야에 따라서는 오픈소스 데이터베이스가 오히려 좋은 성능을 내는 경우도 있습니다. 이런 배경 때문에 데이터베이스간에 손쉬운 변환을 지원하는 도구들이 많이 등장하고 있습니다...
프로젝트를 시작하기 이전에 이미 형상관리를 사용하도록 체계화되어 있다면 별 문제가 아닐 수 있습니다. 프로젝트 팀장이나 팀원중 한명이 프로젝트의 코드 저장소를 생성하고 이메일등으로 그 주소만 통보하면 각 팀원은 해당 주소의 저장소를 로컬 저장소에 복제(Clone)하여 작업을 바로 시작하면 되기 때문입니다. 그렇지만, 형상 관리 시스템 없이 진행했던 프로젝트를 형상 관리 체계로 가져오거나 대량의 프로젝트의 초기 파일을 형상 관리에 등록하는 경우에는 이미 존재하는 저장소에 접근하는 것과는 다른 방식을 사용합니다.깃의 경우 팀원들이 함께 사용할 원격저장소나 깃허브같은 서버의 유무와 관계없이 로컬 저장소를 만드는 것으로 시작할 수 있습니다. 본 포스팅은 WCopyfind라는 오픈 소스 프로젝트를 한글화하고 수정..
윈도우에서 깃(Git)을 사용할 수 있는 환경을 구축했지만(윈도우에서 깃(git) 설치하기 참조) 예전부터 TortoiseSVN을 사용하면서 탐색기 상에서 파일을 변경 여부와 관리 대상 여부를 바로 확인할 수 있었던 기능을 사용할 수 없음을 아쉬워하던 차에 TortoiseGit을 설치하기로 했습니다. 사실 TortoiseGit을 사용하기 위해서는 윈도우에서 깃(git) 설치하기에서 설치한 "Git for Windows"를 먼저 설치해야 합니다.TortoiseGit의 다운로드 주소는 https://tortoisegit.org/download/ 입니다.자신이 사용하는 운영체제를 확인하여 32/64비트용을 적절히 다운로드 받아 설치 프로그램을 실행했으면 [Next]로 진행합니다. 라이선스와 관련된 내용을 확인..
분산 버전 관리 시스템(DVCS)인 깃(git)을 사용하는데 있어 시스템 구조를 이해하는 것은 매우 중요합니다. 전통적인 중앙 집중식의 VCS와는 시스템 구조 자체가 다르기 때문입니다.개발자가 버전 관리시스템의 실체를 만날 수 있는 것은 일반적인 디렉토리 구조에서 파일이 존재하는 사용자 공간과 깃(git)이 관리하는 깃 공간, 그리고 외부의 원격 저장소로 나눌 수 있습니다. 윈도우 탐색기에서 확인해 보면 아래의 그림처럼 숨김폴더로 존재하는 .git 디렉토리와 통상적인 파일 디렉토리로 구분할 수 있고 다양한 깃 관리 정보는 깃 공간인 .git에 저장됩니다. 실제로 .git 디렉토리를 삭제해 버리면 깃 공간이 없어져서 더이상 파일 디렉토리는 깃의 관리 대상이 아닌 일반 파일로 남게 됩니다. 버전 관리 시스템..
ISO9001이나 CMMI등 인증을 위해서 형상 관리/버전 관리를 만나셨다면 해당 표준이 조직과 프로젝트에 스며들도록 노력하면 됩니다. 그렇지만 인증을 위한 강제적 시스템 도입이 아니라면 사후에 "왜?" 라는 질문을 꼭 던져 보라는 것과 함께 사전에 일단 한번 사용해보라는 두가지를 권면하고 싶습니다."귀챦음" 만큼 개발자의 변화를 가로막는 이유같지 않은 이유도 없을 것입니다. 저의 경우 형상관리/버전관리 시스템을 사용하는 이유는 다음과 같습니다. 서브버전이 되었든 깃이 되었든 버전관리 시스템과 친숙한 것과 그렇지 않은것은 서로 다른 세계에 살고 있는 것입니다.제가 버전관리 시스템(VCS)을 사용하는 첫번째 이유는 일처리의 깔끔함입니다.프로그래밍은 "일"입니다. 물론 놀이로 프로그래밍하는 분들도 계실 수 ..
윈도우에서 깃(git) 설치하기을 통해서 윈도우에서도 깃(Git)을 사용할 준비를 했다면 우선 오픈 소스 프로젝트를 체크 아웃 받는 작업을 통해서 깃의 동작을 맛볼 필요가 있습니다. 많은 오픈 소스 프로젝트에 대해서 Git 호스팅 서비스를 제공하는 GitHub(github.com)에서 C# 기반의 실시간 게임 엔진으로 인기 있는 OpenRA를 체크아웃 받아 보겠습니다. 프로젝트의 일원이 아니더라도 소스 코드를 내려 받을 수 있도록 하고 있는데 위의 그림의 우측에서 보듯이 깃으로 접근하기 위한 주소를 제공하므로 아이콘을 클릭하여 깃 접속을 위한 주소를 복사합니다. 윈도우 탐색기에서 원격 프로젝트를 복제할 위치로 이동하여 마우스 우측 마우스로 팝업메뉴를 띄우고 "Git Gui"로 GUI 화면을 아래와 같이 ..
깃(Git)은 Mercurial과 함께 분산 버전 관리 시스템(DVCS, Distributed Version Control System)의 대표 주자입니다. 최근에는 깃허브(githum.com)의 활성화와 함께 깃의 인기는 지속적으로 상승하고 있고 이로써 전통적인 버전 관리 시스템인 서브버전(Subversion)의 자리도 하나 둘씩 깃(Git)으로 대치되고 있는 상황으로 보입니다. 물론 개발에 직접 참여하지 않고 소스 코드를 주기적으로 업데이트 받고 싶다면 이전에 사용하던 서브버전을 그대로 사용할 수도 있습니다. 깃허브와 같은 서비스 시스템에서 통상 깃 리포지토리 호스팅 뿐만아니라 서브버전 인터페이스도 제공하기 때문입니다. 그렇지만 개발 조직에서 도구를 깃으로 통일하고 기존에 버전 관리하던 내용도 깃으로..
PM, PMO, 스프트웨어 공학(SE), 형상 관리, 버전관리, 테스트 케이스 작성과 테스트, 정적 코드 검사, Unit test...... 개발자들이 그리 탐탁치 않게 여기는 것들이 아닌가 싶습니다. 필요한 기능을 빨리 개발해 내면 되지 실질적으로는 별로 도움이 되지 않는것 같은 복잡한 절차를 왜 자꾸 만들지? 하는 의문이기도 합니다. 이러한 의문이 어떤 경우에는 설득력이 있는 경우도 있습니다. 절차라는 것이 진짜 형식일 뿐인 경우도 있으니 까요. 그런나 1인 개발 체제를 넘어서서 여러 사람이 함께하는 협업 개발 환경으로 전환되거나, 소프트웨어의 생존 기간이 길어지고 업데이트와 업그레이드 과정이 반복되다 보면, 위에서 그리 탐탁치 않게 여기던 것들이 "아, 이래서 필요한 것이었구나!"하는 공감을 하게 ..
이론적으로 데이터베이스(DB, Database), 데이터베이스 관리 시스템(DBMS, Database Management System), 데이터베이스 시스템(DBS, Database System)은 모두 각자의 정체가 있습니다. DBMS는 하나 이상의 DB를 관리하는 시스템으로 통상 오라클, SQL Server, MySQL과 같은 제품을 지칭합니다. 각 DBMS별로 관리하는 DB의 형태와 구조가 다르기 때문에 DB는 DBMS에 의존적이고 서로 다른 DBMS가 동일한 DB를 사용할 수는 없고 다른 DBMS의 DB를 사용하려면 통상 전환 과정을 거쳐야 합니다. DB와 DBMS로 구성된 시스템을 통칭하여 DBS, 데이터베이스 시스템이라고 합니다. "데이터베이스"라고 하면 단어적 의미는 데이터를 가지고 있는 D..
중딩 아들의 질문에 답하면서 느끼는 점이지만 수학 문제도, 정보올림피아드 문제도 일상 생활 과정에서 나오는 문제도 그 해결의 시작은 꼼꼼한 관찰을 통해서 명확한 것과 명확하지 않은 것을 구분하는데 있음을 다시금 깨닫게 됩니다. 집중력을 발휘해서 문제해결의 "단서", 즉 명확한 것을 찾는 작업에 정성을 들여야 함을 꼭 잊지 않아야 합니다. 이 문제에는 중요한 몇가지 단서가 있고 그것을 통해 문제를 푸는 과정은 아래와 같습니다. A, B, C, D, E가 모두 다른 수이고 1부터 9사이에 있다.A X E의 값은 9를 초과할 수 없다. 1과 2~9를 곱하는 조합, 2 X 3, 2 X 4 조합만이 존재한다.A X E = D이고 D X E = A 조건을 만족해야 한다. 단, D X E는 10이상의 값도 가능하고 ..
1. 1에서 10까지의 자연수를 모두 곱한 수를 X라고 하자. X를 8진수로 표기하면 제일 오른쪽에 연속으로 나타나는 0은 모두 몇 개일까?① 1 ② 2 ③ 4 ④ 6 ⑤ 8※ 1부터 N까지의 자연수를 모두 곱한 수를 N 팩토리얼이라하고 N!로 표기하는데 10!은 1부터 10까지를 모두 곱한 값입니다. 10!를 8진수로 변환해야 하는데 값도 크고(10!은 3,628,800) 시간을 단축할 필요가 있으므로 팩토리얼을 아래의 그림과 같이 적절하게 분해하는 것도 방법이겠습니다. 자연수인 10진수를 N진법으로 변환하는 과정은 10진수를 N으로 나누면서 그 나머지를 취하면 되는데 10!에서 8로 나누면 나머지는 0이고 몫은 8이 빠진 7! x 9 x 10이 됩니다. 또 8로 나누어야 하는데 2 x 4로 나누면 나..
C언어로 프로그램을 개발하면서 오류를 찾다가 의외의 장소에서 문제를 찾는 경우가 몇번 있었는데 바로 매크로 입니다. C언어에서는 "#define 매크로이름 매크로내용"의 형식으로 매크로를 정의하는데 이 매크로는 실행 과정에 영향을 미치는 것이 아니라 컴파일 과정에만 영향을 미칩니다. 컴파일러가 C 소스 코드를 본격적으로 컴파일하기에 앞서 전처리 과정을(precompile) 거치는데 이때 다루어지는 것이 #define문을 사용하는 매크로입니다. C언어에서는 #define 말고도 #include, #ifdef등의 전처리 문장이 있습니다. 2015년 정보 올림피아드 예선에서도 이 매크로를 다루었습니다. 위의 문제에서는 sq(x)라는 매크로를 정의했는데 이 매크로는 프로그램 실행 과정에 동작하는 것이 아니고 컴..
올해 올림피아드 예선에 아들을 데려다 주고 집에 오면서 들은 질문입니다. 내 아들이지만 머리속에 들어있는 생각은 도통 알수 없군요. 아무튼 질문을 받았으니 답을 주어야 겠지요. 이 문제는 최단 경로 계산하기라는 전형적인 문제입니다. 계산 공식에는 팩토리얼(factorial, 계승)이 쓰이므로 팩토리얼은 알아야겠지요. n 팩토리얼이라 함은 0부터 n까지의 자연수를 곱한값을 의미하고 n!로 표시합니다. 3팩토리얼은 3!로 표시하고 1X2X3의 값인 것입니다. 0부터 8까지의 팩토리얼 값은 0, 1, 2, 6, 24, 120, 720, 5040, 30320 입니다.문제는 다음과 같았습니다. C를 들러서 A에서 B까지 가는 최단 경로는 A에서 C까지 갈수 있는 최단 경로의 수에 C에서 B까지 갈수 있는 최단 경..
문제를 보니 올해 처음 참여한 아들이 C언어 공부를 좀더 열심히 했더라면 하는 아쉬움이 남습니다. C언어 기초만 잘 다졌어도 쉽게 맞출 수 있는 문제들이 꽤 있었는데 아쉬움이 있지만 C언어의 기초부터 잘 다져야 한다는 "교훈"을 마음에 새겼으면 하는 바램입니다. C언어 기초와 관련한 몇가지 문제를 풀어보면서 기초를 잘 다졌으면 합니다.18. 다음 중 변수의 이름으로 사용할 수 없는 것은?① thisway ② int_char ③ star*star ④ that_way ⑤ _6_C언어의 변수명은 다음과 같은 특성이 있습니다.영문과 숫자 그리고 밑줄(_ Underscore라 부릅니다)로 구성할 수 있습니다.영문 대문자와 소문자를 구별합니다(Case Sensitive라 합니다) C, C++, Java와 같은 프로..
데이터 정렬(Sort)과 탐색(Search)은 컴퓨터 시스템의 가장 기본적인 기능으로 데이터베이스, 웹 검색, 단순 입력창에 이르기까지 다양한 영역에서 사용하는 것이므로 꼭 알아두어야 할 개념입니다. 퍼스널 컴퓨터가 등장하기 이전 부터 데이터 정렬은 여러 형태로 발전되어 왔는데 예전에는 메모리가 크지 않은 환경이었으므로 이런 제약적인 환경에서도 활용할 수 있는 알고리즘부터 최대한 검색 시간을 줄이기 위하여 검색을 감안하여 정렬된 데이터로 보관하는 기법까지 다양한 알고리즘이 존재합니다. 이런 알고리즘의 복잡도는 O(빅오 Big-Oh)로 표시합니다.■ 버블 정렬(Bubble sort)한쪽 방향으로 이동하면서 인접한 두원소를 비교하여 그 방향 맨 끝에 가장 큰수 또는 가장 작은수를 배치하고 다음번에는 동일 방..