메인 메뉴로 바로가기 주제분류 메뉴로 바로가기 본문으로 바로가기

김종훈 185건

제공처 정보

김종훈 교수

홍익대학교 대학원 전자계산학과에서 시스템 소프트웨어 전공으로 박사학위를 취득하고, 한국전자통신연구원(ETRI) 컴퓨터시스템연구부 운영체제연구팀에서 Post-Doc. 연구원으로 활동했다. 현재 제주대학교 교육대학 컴퓨터교육과 부교수와 제주대학교 과학영재교육원 초등정보분야 지도교수로 재직 중이며, 문제 해결력을 신장시키는 컴퓨터 교재 개발 연구에 집중하고 있다.
대표 저서로 『IT CookBook, 프로그래밍 언어론』(한빛미디어, 2008), 『초보자를 위한 Linux & Unix C 프로그래밍』(한빛미디어, 2003), 『초보 프로그래머가 꼭 알아야 할 컴퓨터 동작 원리』(한빛미디어, 2004)가 있다.

  • ANSI(미국표준협회)에서 제시한 표준 코드 체계. ASCII는 각 문자를 7비트로 표현하므로 총 128개의 문자를 표현할 수 있다. 확장 ASCII는 기존 7비트에 1비트를 추가하여 8비트를 사용한 코드로 256개의 문자를 표현할 수 있다.

  • 2진수를 4, 8, 16과 같은 2n진수로 변환하는 방법은 매우 간단하다. 먼저, 4진수로 변환하는 경우를 생각해보면 2진수 2비트는 4진수 한 자리와 대응되므로 소수점을 기준으로 2비트씩 묶어 각 묶음을 4진수로 바꾸면 된다. [[표 2-2] 2진수 2비트는 4진수 한 자리와 대응된다] || 2진수 ||| 00 | 01 | 10 | 11 | || 4진수 ||| 0 | 1 | 2 | 3 | 예를 들어, 2진수 10110.11101을 소수점을 기준으로 2자리씩 묶어 변환해 나열하면 4진수가 된다. 이때 주의할 점은 다음과 같이 소수점 이하 마지막 자리 1처럼 하나만 남은 경우에도 두 자리로 만들어 변환해야 한다는 것이다. 2진수를 8진수로 변환할 때도 2진수 3비트가 8진수 한 자리와 대응된다는 점을 이용해 소수점을 기준으로 3비트씩 묶어 각 묶음을 8진수로 바꾸면 된다. [[표 2-3] 2진수 3비트는 8진수 한 자리와 대응된다] || 2진수 ||| 000 | 001 |

  • 먼저 10진수 37.6875를 2진수로 변환하는 과정을 살펴보고자 하는데, 정수부와 소수점부로 나누어 변환해야 한다. 먼저 정수부인 37을 2진수로 변환하려면 [그림 2-2]의 (a)와 같이 37을 2로 나눈 나머지를 2진수의 첫 자리에 오게 하고 몫은 다시 2로 나누어 나머지를 둘째 자리, ···. 이 과정을 반복해 나머지가 2미만이 되면 그 수를 최대 자리로 하면 된다. 즉 나머지를 역순으로 조합하면 된다. 소수점부인 0.6875를 변환하는 과정은 [그림 2-2]의 (b)와 같이 2를 곱하면 1.3750이 되는데 여기에서 소수점 윗자리인 1이 2진수 0.1이 된다. 그리고 결과의 소수점 윗자리를 0으로 고친 0.3750에 다시 2를 곱하면 0.7500이 되는데, 소수점 윗자리인 0이 0.1의 뒤에 붙어 0.10이 된다. 이와 같은 식으로 소수 3, 4자리 정도까지 계산해 나간다. 결국 10진수 37.6875는 2진수 100101.1011로 변환된다. 또 다른 예로 10

  • 이진 탐색(binary search)은 정렬된 데이터 집합을 이분화하면서 탐색하는 방법이다. 예를들어 비유하면, 가나다순으로 정렬되어 있는 전화번호부에서 임의의 사람에 대한 전화번호를 찾는 경우다. [그림 8-5]의 정렬된 데이터 집합에서 이진 탐색을 이용해 데이터 15를 탐색하는 과정을 살펴보자. ① 중간에 위치한 데이터인 11과 찾고자 하는 15가 같은지 비교한다. ② 중간에 위치한 데이터인 11보다 찾고자 하는 데이터인 15가 크므로 중간 데이터 11의 오른쪽에 위치한 데이터들에 대해 이진 탐색을 수행한다. ③ 탐색 영역의 중간에 위치한 데이터인 17과 찾고자 하는 15가 같은지 비교한다. ④ 중간에 위치한 데이터인 17보다 찾고자 하는 데이터인 15가 작으므로 중간 데이터 17 왼쪽에 위치한 데이터들에 대해 이진 탐색을 수행한다. ⑤ 탐색 영역의 중간에 위치한 데이터인 15와 찾고자 하는 15가 같은지 비교한다. 원하는 데이터이므로 탐색을 종료한다. 이런 이진 탐색

  • 반복문이란 특정 부분을 반복해서 실행하는 구조로 FORTRAN의 DO 문이 효시라 할 수 있다. 또한 C 언어의 반복문으로는 while 문, do-while 문, for 문이 있다. [DO 문] 변수 I가 1의 초기값을 갖고 한 번씩 반복할 때마다 1씩 증가되면서 5보다 작거나 같은 동안 ⋮ 부분을 실행한다. [while 문] 조건식이 참인 동안 문장을 반복해서 실행한다. while 문을 만나면 먼저 조건식을 검사하는데, 만약 조건식이 거짓이면 문장을 실행하지 않고 while 문을 빠져나온다. 그러나 조건식이 참이면 문장을 실행하고 다시 조건식을 검사하는데, 또 다시 조건식이 참이면 문장을 다시 실행하고 다시 조건식을 검사한다. 이런 동작은 조건식이 거짓이 될 때까지 반복하는데 조건식이 거짓이면 while 문을 빠져나온다. 만약 반복하고자 하는 문장이 여러 개라면 다음과 같이 중괄호로 묶어 사용하면 된다. [do-while 문] while 문과 유사하지만, 시작 부분에서

  • 1. 알고리즘(algorithm)은 문제를 해결하기 위해 명령들로 구성된 일련의 순서화된 절차다. 2. 정렬(sort) 알고리즘이란 데이터를 일정한 규칙에 따라 재배열하는 알고리즘을 의미한다. 3. 선택 정렬(selection sort)은 정렬되지 않은 데이터들에 대해 가장 작은 데이터를 찾아 가장 앞의 데이터와 교환해 가는 방식이다. 4. 삽입 정렬(insertion sort)은 아직 정렬되지 않은 부분의 임의의 데이터를 이미 정렬된 부분의 적절한 위치에 삽입해 가며 정렬하는 방식이다. 5. 버블 정렬(bubble sort)은 서로 이웃한 데이터들을 비교하며 가장 큰 데이터를 가장 뒤로 보내며 정렬하는 방식이다. 6. 탐색(search) 알고리즘은 기억 공간에 저장된 데이터나 주어진 입력 데이터 집합에서 어떤 조건이나 성질을 만족하는 데이터를 찾는 알고리즘을 말한다. 7. 선형 탐색(linear search)은 순차 탐색(sequential search)이라고도 하는데,

  • 버블 정렬(bubble sort)은 서로 이웃한 데이터들을 비교하며 가장 큰 데이터를 가장 뒤로 보내며 정렬하는 방식이다. 버블 정렬의 동작 과정을 [그림 8-3]의 데이터를 이용해서 살펴보자. ① 첫 번째 데이터인 15와 두 번째 데이터인 11을 비교해 큰 데이터를 뒤로 위치시킨다. 15가 크므로 둘의 위치를 바꾼다. ② 두 번째 데이터인 15와 세 번째 데이터인 1을 비교하는데, 앞에 위치한 15가 크므로 둘의 위치를 바꾼다. ③ 마찬가지 방식을 적용해 세 번째 데이터인 15와 네 번째 데이터인 3의 위치를 바꾼다. ④ 마찬가지 방식을 적용해 네 번째 데이터인 15와 마지막 데이터인 8의 위치를 바꾼다. 가장 큰 데이터인 15가 가장 뒤에 위치하게 된다. ⑤ 처음부터 다시 시작한다. 첫 번째 데이터인 11과 두 번째 데이터인 1의 크기를 비교하는데 앞에 위치한 11이 크므로 둘의 위치를 바꾼다. ⑥ 마찬가지 방식을 적용해 두 번째 데이터인 11과 세 번째 데이터인 3의

  • XOR(exclusive OR) 게이트는 두 개의 입력 A와 B를 받아 입력 값이 같으면 0을 출력하고, 입력 값이 다르면 1을 출력한다. XOR 게이트의 진리표는 [표 3-4]와 같다. [[표 3-4] XOR 게이트의 진리표] || A || B || A XOR B || | 0 0 1 1 | 0 1 0 1 | 0 1 1 0 | XOR 연산의 논리식과 논리도는 [그림 3-6]과 같이 표현한다. [그림 3-6] XOR 게이트의 논리식과 논리도

  • 데이터베이스를 직접 응용 프로그램들이 조작하는 것이 아니라 데이터베이스를 조작하는 별도의 소프트웨어가 있는데 이를 데이터베이스 관리 시스템(DBMS : DataBase Management System)이라 한다. 즉 데이터베이스 관리 시스템이란 데이터베이스를 관리하며 응용 프로그램들이 데이터베이스를 공유하며 사용할 수 있는 환경을 제공하는 소프트웨어다. 이런 데이터베이스 관리 시스템은 데이터베이스를 구축하는 틀을 제공하고, 효율적으로 데이터를 검색하고 저장하는 기능을 제공한다. 또한 응용 프로그램들이 데이터베이스에 접근할 수 있는 인터페이스를 제공하고, 장애에 대한 복구 기능, 사용자 권한에 따른 보안성 유지 기능 등을 제공한다. 대표적인 데이터베이스 관리 시스템으로 오라클, 인포믹스, 액세스 등이 있다. [그림 9-3] 데이터베이스 관리 시스템의 역할

  • 시저는 키케로나 친지들에게 은밀한 편지를 보내고자 할 때 암호문을 이용했는데, 다음은 시저 암호문의 한 예다. QHYHU WUXVW EUXWXV 이 암호문은 단순히 알파벳을 왼쪽으로 세 자리 이동해서 작성한 것이다. 원래 문장(평문)의 문자 A는 암호 문자 D로, 평문 문자 B는 암호 문자 E로, ··· 그리고 평문 문자 W는 암호 문자 Z로 그리고 암호 문자로 아직 사용되지 않은 A, B, C는 평문 문자 X, Y, Z를 의미한다. 이런 평문 문자와 암호 문자의 관계를 표로 나타낸 것이 다음 표인데, 윗줄이 평문 문자고 아랫줄이 암호 문자다. 이런 표를 암호화 표라 한다. 이 표를 이용하면 앞의 암호문을 다음과 같이 쉽게 해석할 수 있을 것이다. NEVER TRUST BRUTUS 이런 시저 암호는 세 자리 이동한 암호 알파벳을 이용한 것이지만, 한 자리 또는 열 자리, 스무 자리 등으로 이동한 암호 알파벳을 이용할 수도 있다. 그러나 스물여섯 자리를 이동하게 되면 평문

  • 하드웨어는 중앙처리장치, 주기억장치와 보조기억장치 같은 기억장치, 입력장치, 출력장치로 나뉜다. 이들 장치간의 데이터와 제어 신호의 흐름은 [그림 1-3]과 같으며, 중앙처리장치의 제어 신호에 따라 다른 장치들이 동작을 하게 된다. [중앙처리장치] 중앙처리장치(CPU : Central Processing Unit)는 명령어를 해독하고 실행하는 장치로, 제어장치, 연산장치, 레지스터들로 구성된다. 특히 하나의 칩으로 된 중앙처리장치를 마이크로프로세서(microprocessor)라 하는데, 대표적인 제품으로 인텔의 펜티엄과 코어2듀오가 있다. [ ■ 제어장치] 제어장치(Control Unit)는 중앙처리장치에서 일어나는 모든 작업을 통제하고 관리하는 일을 한다. 프로그램 명령어를 해석하고, 해석된 명령의 의미에 따라 다른 장치들에게 동작을 지시한다. [그림 1-3]의 제어 신호를 보내는 장치가 제어장치다. [ ■ 연산장치] 연산장치(ALU : Arithmetic Logic U

  • 삽입 정렬(insertion sort)은 아직 정렬되지 않은 임의의 데이터를 이미 정렬된 부분의 적절한 위치에 삽입해 가며 정렬하는 방식이다. 그러면 삽입 정렬의 동작 과정을 [그림 8-2]의 데이터를 이용해서 살펴보자. ① 두 번째 데이터 11과 바로 앞에 위치한 15의 크기를 비교한다. 두 번째 데이터가 작으므로 15를 한 칸 뒤로 보내고 11을 15 앞에 위치시킨다. ② 세 번째 데이터인 1과 앞에 위치한 11, 15의 크기를 비교한다. 1이 가장 작으므로 11과 15를 한 칸씩 뒤로 보내고 1을 가장 앞에 위치시킨다. ③ 네 번째 데이터인 3과 앞에 위치한 1, 11, 15의 크기를 비교한다. 3은 1보다 크고 11, 15보다 작으므로 11과 15를 한 칸씩 뒤로 보내고 3을 11 앞에 위치시킨다. ④ 마지막 데이터인 8과 앞에 위치한 1, 3, 11, 15의 크기를 비교한다. 1, 3보다 크고 11, 15보다 작으므로 11과 15를 한 칸씩 뒤로 보내고 8을 11

  • WAN(Wide Area Network)은 둘 이상의 LAN이 넓은 지역에 걸쳐 연결되어 있는 네트워크를 말한다. 일반적으로 지역과 지역, 국가와 국가간을 서로 연결하는 네트워크를 말한다. 둘 이상의 LAN이 연결되기 위해서는 라우터(router)라는 장치가 있어야 하는데, 라우터는 하나의 LAN과 또 다른 네트워크를 연결하는 역할을 한다. 다음은 LAN과 WAN의 관계를 나타낸 것인데, 라우터를 통해 LAN과 LAN을 연결한다. 네트워크간 통신을 인터네트워킹(internetworking)이라고 하는데, 우리가 일반적으로 사용하는 인터넷(Internet)이 이런 종류의 네트워크 중 하나다. 인터넷에 대해 좀더 상세하게 살펴보자. [그림 10-4] LAN과 WAN의 관계

  • 선택 정렬(selection sort)은 정렬되지 않은 데이터들에 대해 가장 작은 데이터를 찾아 가장 앞의 데이터와 교환해나가는 방식이다. 그러면 선택 정렬의 동작 과정을 [그림 8-1]의 데이터를 이용해서 살펴보자. ① 가장 작은 데이터인 1을 가장 앞에 위치한 15와 교환한다. 가장 작은 데이터가 가장 앞에 위치하게 된다. ② 첫 번째 데이터를 제외한 나머지 데이터에서 가장 작은 데이터인 3을 두 번째 데이터인 11과 교환한다. ③ 첫 번째, 두 번째 데이터를 제외한 나머지 데이터에서 가장 작은 데이터인 8을 세 번째 데이터인 15와 교환한다. ④ 첫 번째, 두 번째, 세 번째 데이터를 제외한 나머지 데이터에서 가장 작은 데이터인 11을 네 번째 데이터인 11과 교환한다. 같은 데이터이므로 위치의 변화는 없다. ⑤ 데이터들에 대한 정렬이 완료된다. 이런 선택 정렬에 대한 C 프로그램은 ‘부록’에서 제공하니 참고하기 바란다. [그림 8-1] 정렬되지 않은 데이터 선택 정

  • 각 나라별 언어를 모두 표현하기 위해 나온 코드 체계가 유니코드(unicode)다. 유니코드는 사용중인 운영체제, 프로그램, 언어에 관계없이 문자마다 고유한 코드 값을 제공하는 새로운 개념의 코드다. 언어와 상관없이 모든 문자를 16비트로 표현하므로 최대 65,536자를 표현할 수 있다. 유니코드 표준은 애플(Apple), HP, IBM, 썬(Sun), MS, 오라클(Oracle)과 같은 업계에서 채택되었으며, XML, 자바, ECMAScript, LDAP, CORBA 등의 표준에서 사용되고 있다. 영문대소문자와 숫자 코드는 유니코드 사이트(http://www.unicode.org/charts/PDF/U0000.pdf)에서 제공하는데, [그림 2-13]은 그 일부다. 각 문자 아래에 있는 값이 코드 값인데, 16진수로 나타낸 것이다. ‘W’의 유니코드는 0057이고, ‘e’의 유니코드는 0065이므로 “We”의 유니코드(2진 체계)는 다음과 같다. 그러면 유니코드로 한글을

위로가기