목록Programming (13)
CODICT
뭐든지 기초가 튼튼해야 합니다. 건물을 세울 때 기초를 다지고 뼈대를 세우는게 일의 첫 순서인 것과 같은 이치입니다. 기초와 뼈대가 튼튼하지 않으면 나중에 창문이나 문틀과 같은 세부적인 구조물을 설치하는 데 어려움을 겪기 때문입니다. 컴퓨터 언어를 배우는 것도 이와 같습니다. 프로그램의 기본적인 구조부터 확실하게 알아야 하며, 그러고 나서 루프(Loop)나 객체(Object)와 같은 세부 구조를 기본 구조 위에 세워야 합니다. 이 게시글에서는 C++의 가장 기본이 되는 구조를 살펴볼 것입니다. 1. C++의 시작 하나의 메시지를 출력하는 간단한 C++ 프로그램을 통해 시작을 해봅시다. 아래의 코드는 C++의 cout 기능을 사용하여 문자를 출력합니다. 이 코드에는 몇 개의 주석문이 달려있습니다. C++의..
지금까지 작성한 대부분의 프로그램은 한 장소(싱글 머신)에서 한 번에 한 라인씩(순차적으로) 실행했습니다. 여러 장소(분산 컴퓨팅 혹은 네트워킹)에서 동시에 여러 개의 일(병행성(Concurrency))을 할 수 있습니다. 시간과 공간에 도전하는 여러 가지 좋은 이유가 있습니다. 성능(Performance) 느린 요소(Component)를 기다리지 않고, 빠른 요소를 바쁘게 유지합니다. 견고함(Robustness) 하드웨어 및 소프트웨어의 장애를 피하기 위해 작업을 복제하여 여러 가지 안정적인 방식으로 운영합니다. 간소화(Simplicity) 복잡한 작업을 좀 더 이해하기 쉽고, 해결하기 쉬운 여러 작은 작업으로 분해합니다. 커뮤니케이션(Communication) 데이터(바이트)를 보내고 싶은 곳에 원격..
컴퓨터를 사용하면, 폴더 또는 디렉터리의 컨텐츠를 나열하고, 파일을 생성하거나 지우고, 이들을 정리하는 일을 매일 수행하게 됩니다. 이러한 작업을 파이썬으로 해결할 수 있습니다. 1. 파일 파이선은 많은 다른 언어처럼 유닉스의 파일 연산 패턴을 갖고 있습니다. chown(), chmod() 함수 등은 똑같은 이름을 사용합니다. 그리고 몇 가지 새로운 함수가 존재합니다. 1.1. 생성하기: open() 이전 게시글의 파일 입출력과 관련된 부분에서 open() 함수를 소개하면서 파일을 여는 방법과 파일이 존재하지 않는 경우 새로운 파일을 생성하는 방법을 배웠습니다. 먼저 oops.txt 텍스트 파일을 생성해봅시다. >>> fout = open('oops.txt', 'wt') >>> print('Oops, I..
1989년 영국의 과학자 팀 버너스-리(Tim Berners-Lee)는 유럽 입자물리연구소(CERN)와 연구소 커뮤니티 내에서 정보의 공유를 돕는 제안을 먼저 했습니다. 그는 이것을 월드 와이드 웹(World Wide Web)이라 불렀고, 설계를 간추려 3가지 간략한 아이디어로 나타내었습니다. HTTP(Hypertext Transfer Protocol) 요청과 응답을 교환하기 위한 웹 서버와 클라이언트의 명세 HTML(Hypertext Markup Language) 결과에 대한 표현 형식 URL(Uniform Resource Locator) 고유의 해당 서버와 자원을 나타내는 방법 이러한 간단한 사용 방법에서 웹 클라이언트는 HTTP로 URL을 요청하고, 서버로부터 HTML을 받습니다. 그는 먼저 웹 브..

하노이의 탑(Tower of Hanoi)은 원반을 옮기는 간단한 퍼즐이다. 규칙을 설명하자면, 하노이의 탑에는 크기가 다른 원반이 n개가 존재하고 원반을 끼울 수 있는 기둥에 3개 존재한다. 하노이의 탑 문제는 어떻게 하면 원반 n개를 모두 가장 왼쪽 기둥에서 가장 오른쪽 기둥으로 옮길 수 있을지에 대한 답을 구하는 문제이다. 단 원반을 옮길 때는 3개의 조건이 존재한다. 원반은 한 번에 한 개만 옮길 수 있고, 각 기둥의 맨위의 원반을 다른 기둥의 맨 위로만 옮겨야 하고, 옮기는 과정에서 큰 원바을 작은 원반 위에 올려서는 안된다. 이 규칙을 지키면서 원반을 옮기려면 중간에 여분으로 주어진 보조 기둥을 활용해야 한다. 풀어보기 원반이 한 개일 때 1번 기둥에 있는 원반을 3번 기둥으로 옮기면 끝이다. ..
활성화된 프로그램은 데이터를 램(RAM; Random Access Memory)에 저장합니다. 램은 아주 빠르지만, 비싸고, 일정한 전력 공급을 필요로 합니다. 전원이 꺼질 경우 메모리에 있는 모든 데이터가 사라집니다. 디스크 드라이브는 램보다 느리지만 용량이 넉넉하고, 비용이 싸며, 전원이 꺼지더라도 데이터를 유지합니다. 지금까지 컴퓨터 시스템 개발자들은 디스크와 램 사이의 격차를 줄이기 위해 상당한 노력을 기울였습니다. 프로그래머는 디스크와 같은 비휘발성(Nonvolatile) 장치를 사용하여 데이터를 저장하고 복구할 수 있는 지속성(Persistence)이 필요합니다. 이 게시글에서는 일반 파일, 구조화된 파일, 데이터베이스와 같이 특수 목적에 맞게 최적화된 데이터 스토리지의 각 특징에 대해 살펴봅..

이번 게시글에서는 데이터에 대한 기술을 살펴봅니다. 내용의 대부분은 파이썬에 내장된 다음 데이터 타입입니다. 문자열 텍스트 데이터에 사용되는 유니코드(Unicode) 문자의 시퀀스 바이트와 바이트 배열 이진 데이터에 사용되는 8비트 정수의 시퀀스 1. 텍스트 문자열 텍스트는 대부분의 파이썬 프로그래머에게 가장 친숙한 데이터 타입일 것입니다. 파이썬 텍스트 문자열의 강력한 특징을 살펴보겠습니다. 1.1. 유니코드 지금까지 이 책의 모든 텍스트 예제는 평범하고 오래된 아스키(ASCII) 문자를 사용했습니다. 아스키코드는 1960년대에 정의되었습니다. 그때의 냉장고만한 컴퓨터는 단순한 계산을 잘 수행했습니다. 컴퓨터의 기본 저장 단위는 바이트(Byte)입니다. 바이틑 8비트에 256개의 고유한 값을 저장할 수..
지금까지 문자열과 딕셔너리 같은 자료구조, 함수와 모듈 같은 코드구조를 익혔습니다. 이번 게시글에서는 커스텀 자료구조인 객체(Object)를 배웁니다. 1. 객체란 무엇인가? 이전 게시글에서 본 것처럼, 숫자에서 모듈까지 파이썬의 모든 것은 객체입니다. 하지만 파이썬은 특수 구문을 이용하여 대부분의 객체를 숨깁니다. num = 7을 입력했을 때 7이 담긴 정수 타입의 객체를 생성하고, 객체 참조(Object Reference)를 num에 할당합니다. 이번 게시글을 통해 객체를 직접 만들고, 기존 객체의 행동을 수정하면서, 객체를 자세히 들여다봅시다. 객체는 데이터(변수, 속성(Attribute)이라고 부름)와 코드(함수, 메소드(Method)라고 부름)를 모두 포함합니다. 개체는 어떤 구체적인 것의 유일..