프로그램을 많이 개발해본 경험자라면 정보 올림피아드의 프로그램 분석 문제가 그리 낯설지 않겠지만, 개발을 많이 하지 않은 사람이라도 다양한 알고리즘에 대한 잦은 경험은 나도 모르게 프로그래밍 실력을 향상 시킬 수 있는 좋은 기회가 됩니다. 알고리즘(Algorithm)은 단순히 "계산법"으로 정리할 수도 있지만 사전에서는 "어떤 문제를 해결하기 위해 정해진 일련의 절차나 방법"으로 정의하고 있습니다. 알고리즘에는 입력이 있고 검증 가능한 처리 과정과 출력이 있는데 정보 올림피아드의 여러 문제들은 이러한 알고리즘의 검증 과정이라고 이해해도 크게 무리가 되지 않을것 같습니다.이러한 프로그램 분석 과정은 보다 효율적인 프로그램을 구현하는 밑바탕이 될 것입니다. 입출력이 작고 외부 연관성이 작은 프로그램이라면 알..
"PHP로 오픈 플래시 차트 출력하기"와 "오픈 플래시 차트 예제 목록 - PHP"에 이어 플래시 차트 출력과 관련한 실제적인 사례를 다루어 볼까 합니다.첫번째 예제는 각 항목의 색과 레이블을 지정하면서 파이 차트를 그리는 것입니다. 파이 차트를 그리면서 접히는 애니메이션 효과도 주고 마우스를 올렸을때 보이는 값 표시 형식도 변경합니다. require_once('OFC/OFC_Chart.php'); $pie_labels = array("신규", "진행중", "거절", "완료"); $pie_clrs = array("#7EEE8E","#7EC9EE","#D67EEE","#EEE97E"); $pie_dat = array(35, 20, 10, 50); $pie = new OFC_Charts_Pie(); $pie..
프로그래밍 언어에서 여러가지 타입의 기반이 되는 가장 원초적인 데이터 타입을 스칼라(Scalar) 타입이라고 합니다. 예를 들어 int, short, char, float, double등이 C언어의 대표적인 스칼라 데이터 타입입니다. 여러가지 데이터가 모여서 하나의 변수처럼 사용할 수 있는 데이터 타입도 있는데 대표적인 것이 배열(Array)과 구조체(Structure)입니다. 실제 프로그래밍 과정에서도 배열과 구조체 없이는 프로그래밍이 불가능할 정도로 매우 중요한 요소입니다. 배열은 동일한 데이터 타입의 집합으로 각 항목은 첨자(Index)로 접근합니다. int a[10][10]; 처럼 대괄호 속에 배열의 크기를 지정하여 선언하지만 첨자는 0부터 시작하기 때문에 a[0][0]부터 a[9][9]까지 접근..
이번 글은 오픈 플래시 차트를 설치한 ("PHP로 오픈 플래시 차트 출력하기" 참조) 이후 각 차트에 대한 실제 모습과 PHP 예제 코드를 참조하기 위해서 작성되었습니다. 3D Bar srand((double)microtime()*1000000); $data = array(); // add random height bars: for( $i=0; $iset_values( $data ); $bar->colour = '#D54C78'; $x_axis = new OFC_Elements_Axis_X(); $x_axis->set_3d( 5 ); $x_axis->colour = '#909090'; $x_axis->set_labels( array(1,2,3,4,5,6,7,8,9,10) ); $chart = new OF..
PHP 환경에서 웹페이지에 그래픽 차트를 출력하는 방법은 imagecreate() 함수로 시작하여 서버에서 직접 도표를 그려서 PNG나 GIF와 같은 동적 이미지를 생성하여 내려보내는 전통적인 방법이 있습니다. 이 방법을 사용하면 서버에서 도표를 그리는 과정에 여러가지 융통성을 부여할 수 있다는 장점이 있습니다. 데이터 생성과 그래픽을 모두 서버에서 수행한다는 특징이 있습니다. PHP 환경에서 웹페이지에 그래픽 차트를 출력하는 또다른 방법은 플래시(Flash) 오브젝트를 활용하는 것으로 도표 출력을 위한 데이터는 서버에서 생성하지만 차트 출력은 클라이언트의 플래시 오브젝트에서 수행하는 특징이 있습니다. 오픈 소스인 OFC(Open Flash Chart, https://sourceforge.net/proj..
C언어에서 함수 만큼이나 중요한 요소가 있을까 싶을 정도로 C언어에서 꼭 이해가 필요한 영역입니다. 함수를 사용하기 위해서는 선언(Declaration)과 정의(Definition)가 있어야 하는데 사용할 함수가 동일한 소스 코드에 위치하는 내부 함수의 경우에는 선언부를 생략하고 정의만 하기도 하지만 선언부를 소스 코드 상단이나 헤더 파일에 기술하고 하단부에 함수의 몸체(Body)를 정의하는 방식을 주로 사용합니다. void swap(int *i1, int *i2); int main() { int a = 10; int b = 20; swap(&a, &b); printf("\na = %d , b = %d", a, b); } void swap(int *i1, int *i2) { int tmp; tmp = *..
평소 수학에 관심을 가지고 있는 사람이 아니면 수열 문제 만큼 머리 아픈 것도 없을 것입니다. 그렇지만 프로그래밍은 단순한 "코딩"이기 보다는 "문제 해결"이 목적이고, "문제 해결"의 첩경은 집중력 있는 관찰과 그를 바탕으로한 적절한 해결책을 제시하는 것이므로 이런 관점에서 수열 문제는 면밀한 관찰을 통해서 단서를 찾고 대상이 아닌 부분을 배제하며 해결책을 찾으려는 태도가 꼭 필요합니다. 24. 다음 프로그램의 출력이 “2 5 10 17 26 ”이 되도록 _________부분에 들어갈 코드는 무엇인가? int i; i = 1; while (i
C언어에서는 문자열(String, 스트링) 타입을 지원하지 않습니다. char(signed char) 또는 unsigned char로 정의하는 문자의 배열이나 배열에 대한 포인터가 일반적으로 말하는 스트링이라 할 수 있습니다. 문자형 타입인 char은 1 바이트의 메모리 공간을 차지하는 타입으로 리터럴(상수)은 작은 따옴표(', apostrophe)로 a = 'A';와 같이 표현합니다. 대부분의 영문자, 숫자, 특수문자 등은 32~127 사이의 문자 값으로(아스키, ASCII) 표현 하는데 32 아래의 특수문자들은 눈에 보이지 않는 제어(컨트롤) 문자가 배정되어 있고 대표적인 제어문자로 C에서는 아래와 같이 표현할 수도 있습니다.'\a' : 알람음. 7'\b' : 백스페이스, 8'\f' : 폼피드, 12..
리눅스와 윈도우, 맥과 같은 요즘의 운영 체제는 대부분 한번에 여러개의 프로그램이나 프로세스를 실행시키는 멀티태스킹(Multi-tasking) 운영체제입니다. 멀티태스킹 운영체제에서 화면을 통해 사용자와 대화식으로 동작하는 콘솔 응용, 윈도우 폼 응용도 있지만 사용자 눈에 보이지는 않지만 백그라운드에서 동작하는 데몬(Daemon) 프로세스도 있습니다. 장치에 대한 처리를 수행하거나 일정한 예약시간에 프로그램 실행시키거나 하는 프로그램으로 윈도우에서는 이러한 데몬 프로세스를 서비스(Service)라 부르고 제어판>관리도구>서비스를 통해 관리할 수 있습니다. 위의 그림은 서비스 관리자의 목록 화면으로 일반적인 응용과 달리 시스템 구도 시점에 자동으로 시작시키는지 수동으로 시작시킬 지를 "시작 유형"을 통해서..
이번 문제를 통해서는 C언어 연산자(Operator)의 종류와 연산자별 우선 순위(Precedence)와 결합 방향(Associativity, 결합성, 연관성)을 다룰까 합니다. 연산 우선 순위는 서로 다른 연산자가 섞여 있는 경우 어떤 연산자를 먼저 수행할 것인지를 다루는 것으로 "a + b * c"인 경우 b*c를 먼저 수행하고 그 결과와 a를 더하는 작업을 나중에 수행하는 것과 같습니다. 결합 방향은 동일한 순위 레벨(+와 -는 같은 수위이고 *과 /도 동일 순위)을 가진 연산자가 섞여 있는 경우 연산 순서를 좌->우로 할지 우->좌로 수행할 지를 결정합니다. 예를 들어 "a + b+ c"는 좌->우 결합성을 가져서 a+b 결과에 c를 더합니다. 그런데 캐스팅, 주소추출등의 연산자는 우->좌 방향으..
정보 처리 과정을 가장 단순한 구조로 설명할 때 입력(Input)-처리(Process)-출력(Output)으로 말하는 것처럼 프로그램에 있어 입력과 출력 과정은 프로그램의 정체성을 나타내는 매우 중요한 부분입니다. 요즘이야 스마트폰으로 다양한 센서 정보를 받기도 하지만 전통적인 C언어의 표준 입력은 키보드이고 C언어에서는 표준 입력에 대해서 stdin이라는 파일 포인터를 제공합니다. 프로그램에서 프린터나 인터넷과 같은 통신으로 출력을 내보낼 수도 있지만 C언어에서는 표준 출력은 화면이고 C언어에서는 표준 출력에 대해서 stdout이라는 파일 포인터를 제공합니다. C언어에서는 stdin, stdout, stderr과 같은 시스템 파일포인터와 함께 표준 입출력을 위한 라이브러리 함수를 제공하는데 표준 입력에..
2015년도 정보올림피아드 지역 예선 문제는 다시 봐도 참 출제를 잘 했다 싶습니다. 틀린 문제를 통해서도 중요한 학습을 하게 할 뿐만아니라 출제된 문제들을 통해서 C언어의 주요한 부분을 만날 수 있기 때문입니다. 이번에는 C언어의 기본 문법에 대한 문제들을 다루어 볼까 합니다. 18. 다음 중 변수의 이름으로 사용할 수 없는 것은? ① thisway ② int_char ③ star*star ④ that_way ⑤ _6_ 위의 문제는 C언어의 변수명 작성 규칙을 다룬 것으로 아래와 같이 아주 단순합니다. 변수명으로 사용할 수 있는 문자는 영문 대문자(A~Z), 소문자(a~z), 숫자(0~9), 그리고 언더스코어(_) 입니다.사용 가능한 문자 이외의 어떠한 문자도 사용할 수 없습니다(공백등의 특수 문자도 ..
이번 문제는 간단하지만 얕보다가 당할 수 있는 그러한 문제입니다. for문의 동작 원리를 아주 명쾌하게 습득 할 필요가 있습니다. 17. 다음 프로그램이 출력하는 값은? int t, i; t = 0; for (i = 0; i < 10; i++) { t++; } printf("%d %d\n", t, i); ① 10 10 ② 9 11 ③ 10 9 ④ 9 10 ⑤ 11 9 for (시작 표현식; 비교 표현식; 증분표현식) 문장 for 문법에 대해서는 "올림피아드 기출문제로 배우는 C언어 - 기본 문장"에서 많은 부분을 언급했으므로 언급하지 않은 부분, 유의할 부분을 다루겠습니다. 위의 문제에서 루프 반복 여부 검사에 사용하는 변수는 i이고 t 변수를 통해서 루프의 수행 회수를 카운트 하고 있습니다. 앞서 다룬..
정보올림피아드에 출전하고 싶은 자녀를 둔 부모 입장에서 지역 예선 기출문제를 받아보면 어떻게 도와주어야 할지 난감한 것이 사실입니다. 2014년도까지만 해도 이건 진짜 천재들이나 풀수있겠다 싶은 문제들만 수두룩했습니다. 그런데, 2015년 기출문제를 살펴보니 이제 C언어를 기초부터 탄탄한게 준비하고 집중력있게 사고력을 키운 친구들이라면 충분히 풀수 있는 문제들도 많이 출제되었습니다. 맞는 방향이 아닌가 싶습니다. 2016년의 출제 방향이 어떻게 바뀔지 모르겠지만 C언어 하나라도 제대로 공부한 사람인지를 검증하고 사고력을 묻는 문제들이 지속적으로 출제되었으면 하는 바램입니다. 그래야 경진대회를 준비하는 과정이 의미있고, 탈락한 친구들도 C언어 하나는 확실하게 익힐 수 있으니 말입니다. 이런 배경하에 201..
"VB 쓰레드 사용하기"에 이어서 여러개의 쓰레드가 동시에 작업을 수행하는 멀티쓰레딩(Multithreading) 환경에서 꼭 필요한 쓰레드간 동기화에 대해서 주요 기술을 다루고자 합니다. 앞서 다룬 쓰레드 기술에도 Join()과 같이 기본적인 쓰레드 동기화 기능이 있지만 여러 쓰레드가 하나의 자원을 두고 동시에 쓰기 또는 읽기 작업을 하는 경우의 교통 정리에는 한계가 있습니다. 일정 구간의 코드 블럭의 경우에는 다른 쓰레드의 개입없이 코드가 수행되어야 원래의 코드 의도를 달성할 수 있는 등 고급의 쓰레드 동기화 기술이 필요합니다. 쓰레드간 자원 공유의 장점이 유감없이 발휘되려면 이러한 적절한 동기화 기술이 반영되어야만 신뢰성 있고 성능이 보장되면서도 완성도가 높은 프로그램을 제작할 수 있습니다. 아래의..
C/C++을 사용하던, C#을 사용하던, 비주얼베이직을 사용하던 일반적인 프로그램을 제작하는 경우라면 쓰레드는 개발자에게 그렇게 친숙한 기술은 아닙니다. 그렇지만 복잡한 업무를 수행하는 대규모 프로그램이나 속도가 생명인 프로세스에서는 쓰레드 기술은 필수적인 기술입니다. 대규모의 트래픽을 처리해야 하는 DBMS, 고속으로 다양한 업무를 처리하는 미들웨어와 같은 프로그램이 대표적인 예라 하겠습니다.여러 서버의 파일을 동시에 다운로드하기여러 홈페이지의 내용을 한꺼번에 분석하기화면 접수와 처리를 분리하면서 동시에 수행하기위의 예제들은 일반 프로그램에서도 충분히 적용 가능성이 있는 사례로 이런 처리 흐름에서는 쓰레드 기술은 필수 요소라 할 수 있습니다. 물론 쓰레드를 사용하지 않고 프로그램을 분리하는 방법도 가능..
인터넷이 발달하고 다양한 정보가 홈페이지를 통해서 공개되고 있는 요즘 OPEN API를 활용한 Mash Up 기술로 간편하게 복합적인 기능을 웹 페이지에 얹는 것은 더이상 특별한 것이 아닙니다. 그런데 포털에서 단어를 검색하면 튀어나오는 페이지들을 포털은 대체 어떻게 알고 있지? 하는 의문이 들었던 적이 있다면 오늘의 코드를 통해서 포털 검색의 일부를 경험할 수 있을 것입니다. 프로그램은 화면에서 가져올 페이지의 주소(URL, Uniform Resource Locator)를 입력받아 닷넷 프레임워크에서 제공하는 기능을 통해서 해당 페이지를 검색합니다. 검색한 페이지의 소스에서 태그를 찾아 그 이후에 있는 내용에서 HTML 태그를 제외한 나머지 내용을 추출하여 하단 박스에 출력하는 과정으로 동작합니다. 윈..
어떤 프로그래밍 언어이든지 타입간 변환은 자주 실수하거나 무심결에 넘겨버리고 하는 이슈입니다. 특히 문자열을 숫자로 전환해서 사용하는 과정에 꼼꼼하게 처리해 두지 않으면 불필요한 예외(Exception) 발생으로 곤혹함을 겪고는 합니다. is_digit = false; if (str.Length == 1 && int.TryParse(str, out tmp_n)) is_digit = true; 위의 코드는 문자열이 한자리의 숫자인지를 검사하는 로직으로 정수, 부동소수점수 각 타입별로 제공하는 TryParse 메소드를 적절하게 활용 할 수 있습니다. byte.TryParse, int.TryParse, Int16.TryParse, Int32.TryParse, Int64.TryParse, uint.TryPars..
통상 데이터베이스라고 하면 여러 사용자가 동시 접속하여 대량의 정보를 저장 및 질의하는 환경을 떠올리지만 의외로 개인 사용 환경, 임베디드 환경등에서도 데이터베이스는 이미 일반화된 저장소 역할을 수행하고 있습니다. 저장소로 데이터베이스를 사용한다는 것은 개발자 입장에서는 표준화된 SQL 질의로 대부분의 원하는 정보 관리가 가능해 진다는 장점을 가져다 줍니다. 그 결과로 개발의 효울성도 높일 수 있고 시스템의 안정성도 확보할 수 있는 여러가지 매력이 있는 반면 상용이든 오픈 소스 DBMS건 간에 무거운 시스템을 설치해야 하는 제약이 따르게 됩니다. 이런 배경에서 DBMS를 설치할 필요가 없고 응용 프로그램에 간편하게 내장할 수 있는 임베디드 DBMS가 등장하게 되었는데 대표적인 것으로 아파치 더비(Derb..
사용자 컨트롤(User Control)은 비주얼스튜디오에서 윈도우 폼 응용 제작 과정에 활용할 수 있도록 도구 상자를 통해 기본적으로 제공하는 다양한 컨트롤과 같이 부품처럼 여러 폼이나 또는 다른 응용에서 간편하게 재사용 할 수 있도록 한것입니다. 윈도우 폼을 만들듯이 사용자가 어렵지 않게 제작할 수 있습니다. 공통적으로 자주 사용하는 것이 있다면 사용자 컨트롤로 만들어 둔다면 재사용성을 높이고 프로그램 개발의 효율성을 높이는데 기여할 수 있을 것입니다.사용자 컨트롤은 *.DLL 형태로 배포해서 다른 프로그램에서 손쉽게 사용할 수 있도록 클래스 라이브러리 프로젝트에 작성하는 방법이 있습니다. 이 방법은 여러개의 사용자 컨트롤을 하나의 패키지로 배포하는데 용이한 방법입니다. 또다른 방법은 윈도우 폼 응용에..
프로젝트 초기부터 프로젝트에 대한 코딩 가이드가 작성되어 그 속에 포함된 라이선스 헤더를 소스코드마다 붙여왔다면 문제가 될 것이 없지만 코딩이 거의 완료된 시점에 코드마다 라이선스 헤더를 붙여야 한다면 작업이 귀찮기도 하지만 코드 전체를 일일이 열어서 붙여넣기 해야하는 짜증나는 작업일 수 있습니다.지루할 수 있는 라이선스 헤더 붙이기를 간편하게 일괄로 붙일 수 있는 "License Header Manager"라는 비주얼스튜디오 플러그인이 있습니다. 물론 무료입니다. 필자의 경우 비주얼스튜디오 2010으로 테스트했는데 문제없이 잘 동작했습니다. 2010부터 2015까지 모두 지원하니 간편하게 설치해서 사용할 수 있습니다. 다운로드 및 설치는 비주얼스튜디오 내부에서 간편하게 할 수 있습니다. 도구>확장 관리..
VB.Net에서 데이터베이스 사용하기 1에 이어 비베 닷넷(VB.Net)에서 다양한 데이터베이스에 접속해서 데이터 검색 및 저장, 갱신, 삭제등을 수행하기 위한 기본적인 ADO.NET 클래스들을 다루고자 합니다.특정한 데이터베이스에 접속하여 동작하는 응용 프로그램을 본격적으로 개발하기에 앞서 중요한 검토사항은 해당 데이터베이스를 어떤 방식으로 접속할 것인가 하는 것입니다. DBMS 별로 제공하는 드라이버가 다를 수 있기 때문에 네이티브 ADO.NET 드라이버를 제공하는지 OLE DB 접속 방식을 사용하는지, 아니면 ODBC 방식을 사용해야 하는지를 먼저 확인하고 해당하는 드라이버의 클래스를 사용하여 코딩을 진행합니다.그런데, ADO.NET에서는 드라이버의 종류와 관계없이 유사한 클래스를 제공하기 때문에 ..
SQL Server, 오라클(Oracle), MySQL, 큐브리드(CUBRID), 파이어버드(Firebird)와 같은 데이터베이스(Database)를 VB.Net에서 사용하기를 다루기에 앞서 데이터베이스의 개념을 다루면 좋겠지만 생략하고 가장 많이 사용하는 관계형(Relational) 데이터베이스를 기준으로 이야기를 풀어나갔으면 합니다. 실상 데이터, 데이터베이스, 데이터베이스 관리 시스템(DBMS), 데이터베이스 시스템(DBS)은 비슷해 보이지만 서로 다른 의미를 갖습니다. 데이터베이스는 정보를 쉽게 접근 및 수정하고 관리할 수 있도록 구조화된 정보의 집합으로 관계형 데이터베이스는 테이블(table, relation)간의 관계를 정의하고 각 테이블은 행(row, tuple)과 열(column)로 조직화..
넷빈즈(NetBeans)에 아직 익숙하지 않은 개발자를 위하여 효과적인 코딩을 위한 몇가지 팁을 메모해 둘까 합니다.■ 블럭(괄호) 시작/끝 위치 이동중괄호({})에 커서를 둔 상태에서 Ctrl+[ 단축키를 누르면 코드를 분석해서 대응하는 시작/끝 위치로 이동합니다. 모든 종류의 괄호 (), [], {} 를 모두 지원합니다. 위의 그림처럼 커서를 중괄호에 위치시키면 라인번호 옆에 블럭을 표시해주는데 Ctrl+[ 단축키를 누르면 시작 위치로 이동하고 시작 위치에서 Ctrl+[ 단축키를 누르면 끝 위치로 이동합니다. 블럭이 커지거나 괄호를 복잡하게 사용한 경우 매우 유용한 기능입니다. ■ 북마크 표시/해제와 이동코딩을 하다가 미완성된 곳을 이나 자주 확인해야 하는 곳등에 북마크를 표시해 두고 간편하게 이동할..
개발자중에는 오라클이나 SQL Server, MySQL은 들어보았어도 더비(Derby) 데이터베이스를 처음 들어보는 분들 계실것입니다. "Java DB"로도 불리는 더비는 순수 Java로 개발한 DBMS로 자바 환경이라면 어떤 플랫폼에서도 동작할 뿐만아니라 SQLite3 처럼 라이브러리 형태로 응용에 간단하게 탑재하여 단독형(Stand alone) 형태로 사용 할 수도 있고 범용 DBMS 처럼 네트워크를 통해서 서비스하는 형태로 다중 사용자 구조로 사용할 수 있는등 다양한 응용이 가능한 DBMS 입니다. 자바 실행 환경에 포함되어 있으니 별도의 DBMS 설치도 필요없고 무료이니 라이선스 구입을 위한 비용도 들지 않는 주목할 만한 데이터베이스 입니다.그런데, 왠만한 DBMS들이 데이터베이스 관리 도구를 별..
대부분의 응용 프로그램에서 파일 관리는 필수적인 요소라 해도 지나치지 않을 만큼 매우 중요한 부분입니다. 작업 내용을 저장하거나, 저장해 놓았던 정보를 읽어 들이며, 다양한 파일을 검색하며 분석 작업을 하는 등 파일을 다루는 기능은 응용 프로그램의 가치와 활용도를 높여주는 핵심 요소입니다. 비베닷넷(비주얼베이직 닷넷, Visual Basic .Net)에서는 System.IO 네임스페이스를 통해 연관 기능을 제공하고 있습니다. 많이 사용하는 주요 클래스는 다음과 같습니다.FileStream : 파일 핸들의 역할을 하면서 기본적인 파일 입출력 기능 제공StreamReader, StreamWriter : 파일 스트림 기반으로 텍스트 입출력 수행BinaryReader,BinaryWriter : 파일 스트림 기반..
윈도우 폼 기반으로 단순한 데이터베이스 처리 위주로 동작하는 프로그램이나 대부분의 업무용 프로그램에서는 사용 빈도가 많지 않지만 닷넷에서 제공하는 그래픽 기능을 비주얼베이직 닷넷(이하 비베닷넷)을 통해서 활용하는 방법을 알아두면 유용하게 사용할 경우가 있습니다. 비주얼스튜디오에서 제공하는 기본 컨트롤에서 지원하지 않는 인터페이스를 별도로 제작하거나 여러 프로그램에서 사용할 수 있는 공통 라이브러리를 제작하는 등에 여러모로 활용 가능성이 있습니다. 닷넷의 그래픽 기능을 최대한 활용하는 프로그램은 뭐니뭐니해도 그래픽 편집 도구가 아닐까 싶습니다. 대표적인 예로 페인트닷넷을(가볍고 빠른 이미지 편집툴 페인트닷넷 참조) 예로 들수 있습니다. 페인트 닷넷은 가로, 세로 크기를 지정한 캔버스 위에 다양한 도형을 그..
비주얼베이직 닷넷(이하 비베닷넷)에서 인쇄를 구현하는 것이 그리 쉽지만은 않은 작업입니다. 웹 페이지 처럼 화면에 HTML을 통해서 그림과 도표, 텍스트로 페이지를 출력하고 CSS를 이용해서 인쇄시점에 포함해야될 내용과 제외할 것을 지정해 놓으면 웹브라우저가 알아서 출력해 주는 것처럼 윈도우 폼에서도 자동으로 인쇄해 준다면 프로그래머는 편하겠지만 화면의 동작방식과 크기는 프린터의 동작 방식과 크기와 차이가 크기 때문에 인쇄용 양식과 내용을 별도로 구성해 주어야 합니다. 다만 화면 출력에 사용하는 클래스나 함수를 그대로 프린터 출력에도 동일하게 사용할 수 있으며 시스템에서 제공하는 몇가지 컴포넌트와 클래스를 잘 활용하면 프린터의 종류와 관계없이 다양한 기종의 프린터에 동일한 페이지 내용을 간편하게 출력할 ..
프린터는 모니터가 일반화 되기 이전의 컴퓨터 시스템에서는 컴퓨팅 결과를 확인할 수 있는 거의 유일한 출력 장치라 해도 과언이 아니었습니다. 프로그래머가 프로그램을 작성해서 펀치카드 리더기등의 입력장치로 프로그램을 로딩시켜 실행한 결과는 양쪽에 구멍이 송송 뚫린 연속용지에 출력되어 프로그램의 실행 결과를 확인할 수 있었습니다. 초기의 프린터는 수동 타자기를 대신하는 방식으로 글자가 새겨진 자판이 먹지를 때려 종이에 글자가 찍히게 하거나, 글자가 볼록하게 새겨진 철판 밴드가 회전하는 과정에 메인 컴퓨터에서 전송된 신호에 따라 헤머가 먹지를 때려 종이에 글자를 출력하는 방식을 사용했습니다. 한번에 한줄 단위로 인쇄하기 때문에 라인 프린터라(Line printer) 불렀습니다. 해머가 먹지(리본)를 때리는 방식..