파이썬 강좌 – 컴퓨터 구성요소 ~ 컴퓨터는 어떤 걸 할 수 있나?

  1. 프롤로그
  2. 개발 첫걸음
    1. 컴퓨터 구성요소 – 컴퓨터는 어떤 걸 할 수 있나?
    2. 개발과 관련된 용어
    3. 파이썬의 선택 – 왜 파이썬인가?
    4. 파이썬 설치 – Hello World 출력하기
    5. Visual Studio Code 의 편리한 기능
    6. REPL과 콘솔 창 – 파이썬 동작시키기
  3. 파이썬 기초
    1. 기초 입출력 – 소통하기
    2. 변수와 대입 – 기억하기
    3. 연산자 – 계산하기
    4. 조건문 – 분기를 만들기
    5. 반복문 – 비슷한 작업을 반복하기
    6. 반복문 코딩하기
    7. 변수와 리스트 – 비슷한 변수들을 묶기
    8. for, range – 리스트의 항목을 다루기
    9. 함수와 메소드의 호출 – 편리한 기능 이용하기
    10. 모듈 설치와 사용 – 유용한 기능 끌어다 쓰기
    11. 문자열 – 텍스트 다루기
  4. 파이썬 중급
    1. 함수를 직접 만들기 – 자주 쓰는 기능을 묶기
    2. 딕셔너리, 튜플, 세트 – 변수를 다양한 방법으로 묶기
    3. 클래스와 객체 – 변수를 사람으로 진화시키기
    1. 상속 – 클래스를 확장하기
    2. 정체성과 동질성 – 객체의 성질
    3. 특별 메소드와 연산자 – 파이썬의 내부 작동방식 이해하기
    4. 다양한 함수 인수 – 유연한 함수 만들기
    5. 슬라이싱 – 리스트 간편하게 접근하기
    6. 지능형 리스트(List Comprehension) – 리스트 갖고 놀기
    7. namedtuple - 데이터 묶음 손쉽게 만들기
    8. 조건 표현식 (Conditional Expression) - 간단한 분기 나타내기
    9. 코드 스타일 - 코드의 일관성 유지하기
    10. 명령문, 표현식 – 문법을 이루는 것들
    11. 본격적인 검색 해보기
  5. 파이썬 고급
    1. 일급 함수 다루기
    2. NotImplementedError와 NotImplemented
    3. 어노테이션 – 수월하게 프로그래밍하기
    1. 내장 함수 톺아보기
    2. 예외와 에러 – 예상치 못한 상황에 대응하기 (v0.1)
    3. 변수의 범위 – 이름 검색의 범위
  6. 파이썬 심화
    1. 시퀀스와 반복자 – 반복과 순회를 자유자재로 다루기
    2. 데코레이터 – 함수의 기능을 강화하기
    3. 프로퍼티
    4. 제너레이터
    5. async와 await
    6. 객체로서의 클래스 – 클래스를 동적으로 정의하기
  7. 파이썬 프로젝트 실습
    1. 원카드 게임 만들기 (1)
    2. 원카드 게임 만들기 (2)
    3. 원카드 게임 만들기 (3) (작성중)
    4. 턴제 자동 전투 게임 만들기 (작성중)
  8. 실전 (파이썬 외적인 것들)
    1. 정규표현식 – 문자열을 검색하고 치환하기 (작성중)
    2. 유니코드 – 컴퓨터에서 문자를 표기하는 방법
    3. html, css, 인터넷 – 자동화 첫 걸음 내딛기
    4. 네트워크 – 인터넷으로 통신하는 방법
    5. 문서 – 문맥을 읽어보기

프롤로그를 읽지 않으신 분들은 반드시 읽어보고 오시기 바랍니다. 강좌 전체에 대한 방향성, 등이 적혀있습니다.


프로그램과 명령어

현대 사회에서는 컴퓨터를 사용하지 않은 곳을 찾기가 힘듭니다. 전문적인 회사에서 쓰는 전용 컴퓨터에서부터, 대학 신입생이 구매한 LG 그램까지 종류와 쓰임새가 아주 다양하죠. 사실 스마트폰도 컴퓨터의 일종이라고 볼 수 있지요. 컴퓨터는 엑셀과 같은 스프레드시트, 아래아한글과 같은 워드프로세서, 리그 오브 레전드 같은 게임 프로그램을 구동시킬 수 있습니다. 그렇다면 프로그램이란 무엇일까요?

어떤 문제를 해결하기 위하여 그 처리 방법과 순서를 기술하여 컴퓨터에 주어지는 일련의 명령문 집합체.

__ 표준국어대사전 발췌

오, 뭔가 전문적인 냄새가 나는 말이 등장했네요. 일련의 명령문 집합체라니. 말이 뭔가 어려운 것 같지만 쉬운 말로 풀이하자면 여러 개의 명령문이라고도 볼 수 있겠습니다. 명령문, 명령어라는 말은 실제로 많이 쓰입니다. 왜냐하면 누군가 컴퓨터에게 일을 시킬 때에는 반려견에게 하는 것처럼 훈련시키는 것도 아니고, 말(Horse)에게 하는 것처럼 채찍을 때리는 것도 아니라, 다름 아닌 바로 명령어을 통해 명령을 내리기 때문입니다.

프로그래밍에서 명령어를 이야기할 때 크게 세 가지가 있습니다.

  • 명령어(한국어) : 범용적인 말. 어떤 지시를 내린다는 뜻.
  • command : 콘솔(console) 창에서 실행하는 명령어. 혹은 하나의 프로그램.
  • instruction : CPU가 실행할 수 있는, 기계어로 이루어진 하나의 명령.

코딩하는 일반적인 상황에서는 "명령어"라는 범용적인 한국말을 많이 사용합니다. 명령어는 사람이 컴퓨터에게 어떤 지시를 내린다는 뜻일 수도 있고, 프로그램이 프로그램에게, 또는 소프트웨어가 하드웨어에게 지시를 내린다는 뜻일 수도 있습니다. 이러한 상황을 명확히 구분짓기 위해 command와 instruction라고 영어로 나눠 쓰기도 합니다. 특히 command는 우리 사람이 컴퓨터에게 지시를 내리는 상황에서 많이 사용됩니다. instruction은 좀 더 소프트공학적인 용어이므로 초보 단계에서는 거의 접할 일이 없습니다. 이러한 용어는 개발과 관련된 용어에서 더 자세히 알아보도록 합시다.

컴퓨터는 프로그램이나 명령을 실행 또는 수행합니다. 영어로는 runexecute 가 있습니다. 거의 동일한 뜻으로 사용됩니다.


하드웨어

명령어 이야기할 때 CPU가 지나가듯 언급이 되었네요. 어디선가 들어본 컴퓨터 부품이죠. 노트북을 고를 때 Intel i7이니 뭐니 하던 것들이죠. 컴퓨터 조립을 취미로 가지고 계신 분들이 아니라면 정확히 어떤 일을 하는 건지 감이 안오실 듯 합니다. 이제 컴퓨터 부품에 해당하는 하드웨어 라는 녀석을 대강 훑어보겠습니다.

하드웨어(Hardware)는 컴퓨터를 구성하고 있는 장치나 부품을 뜻합니다. 실제로 우리가 만질 수 있는 딱딱한(Hard) 것들이죠. 반대편에는 우리가 흔히 프로그램과 동일한 뜻으로 쓰이는 소프트웨어(Software)가 있습니다. 이 소프트웨어는 우리가 직접 손가락으로 만질 수는 없고, 마우스를 움직이고 클릭해 설치하거나 제거할 수 있습니다. 아무튼, 하드웨어의 기본 구성요소를 알아봅시다.

  • 중앙처리장치(CPU: Central Processing Unit): 컴퓨터에서 연산 기능을 수행하는 장치. 편의상 CPU라고 지칭.
  • 주기억장치(main memory): 실행중인 프로그램과 데이터를 저장하는 장치. 전원이 꺼지면 내용이 사라진다. 편의상 메모리라고 지칭.
  • 보조기억장치(secondary storage device): 프로그램과 데이터를 보관하는 장치. 파일로 저장된다 함은 보조기억장치에 저장됨을 뜻한다.
  • 입력 장치(input device): 외부로부터의 데이터를 내부로 들여보내는 장치. 마우스, 키보드, 터치패드 등이 해당.
  • 출력 장치(output device): 데이터를 내부에서 외부로 내보내기 위한 장치. 모니터(스크린) 등이 해당.

위에서 굵게 표시한 편의상 단어들은, 실제 의사소통 때 잘 쓰이는 말입니다. 우리가 매번 "중앙처리장치"라고 길게 말하기에는 너무 힘들 것 같습니다. 앞으로도 편의상 단어를 많이 사용할 것입니다.

실제 하드웨어의 종류는 엄청나게 많고, 위 항목 하나만 하더라도 하위 분류가 아주 많이 뻗어나가는 하나의 대단원입니다. 하지만 프로그래밍을 할 때 최소한 알아두어야 할 하드웨어 친구들이기도 하죠.


하드웨어 예시

컴퓨터를 켤 때, 우리는 윈도우 로고를 감상할 수 있습니다. 왜 컴퓨터는 전원 버튼을 누르는 즉시 바로 켜지지 않을까요? 컴퓨터나 스마트폰의 전원을 완전히 꺼진 상태에서 다시 켤 때는 어느정도 시간이 걸린다는 건, 너무나 당연한 상식이라서 굳이 의문을 품지 않았을 겁니다. SSD나 하드디스크에는 윈도우와 같은 운영체제(Operating System)가 파일로서 저장되어 있습니다. 하지만 이들은 사실 CPU와 상호작용하기엔 너무 느리기 때문에, CPU가 작업할 수 있는 환경을 만들어주어야 합니다. 그것은 바로 메모리에 운영체제를 로딩하는 일입니다. 부팅이 완료되었다는 것은, 운영체제가 온전히 메모리 상에 저장되었음을 뜻합니다.

윈도우 파일로 저장되어 있는 운영체제 파일들을 적절하게 메모리로 로딩하는 중

이제 메모장을 켜 볼까요, 메모장을 키는 데에는 그렇게 오랜 시간이 걸리지 않습니다. 운영체제보다는 크기가 훨씬 적기 때문이죠. 우리는 입력 장치(Input Device)인 키보드를 통해 글자를 써넣을 수 있습니다. 우리가 글자를 써넣는 매 순간마다 메모리에서는 우리가 써놓은 글들이 업데이트됩니다. 모니터에서 우리가 쓴 글을 볼 수 있는 이유는, 프로그램이 메모리에 저장된 글을 읽어서 출력 장치인 모니터로 보내기 때문입니다.

메모장 메모장을 켜면 프로그램을 포함한 실시간 정보가 메모리에 계속해서 저장되고 수정된다.

*저장*을 한다면 비로소 메모리에 있던 값들이 텍스트 파일로 SSD나 하드디스크에 저장이 되겠지요. 저장하지 않고 강제로 종료한다면, 우리가 이제껏 썼던 글들은 하늘로 날아갑니다. 프로그램이 종료되는 순간 메모리에 있던 메모장과 그 데이터들은 공중분해되기 때문입니다.

메모장 저장창 저장하지 않고 닫으면 다 날아간다.

지금까지 컴퓨터의 구성요소와 프로그램이 어떻게 실행되는지 알아보았습니다.


연습 문제

  • 프로그램의 정의는 무엇인가?
  • 하드웨어의 주된 5가지 종류는 무엇인가?
  • 왜 번거롭게 파일로 있는 운영체제를 바로 이용하지 않고 시간을 들여 메모리로 로딩하는가?
  • 프로그램이나 명령을 실행하다 라는 뜻을 가진 영단어 두 개는 무엇인가?

  1. 프롤로그
  2. 개발 첫걸음
    1. 컴퓨터 구성요소 – 컴퓨터는 어떤 걸 할 수 있나?
    2. 개발과 관련된 용어
    3. 파이썬의 선택 – 왜 파이썬인가?
    4. 파이썬 설치 – Hello World 출력하기
    5. Visual Studio Code 의 편리한 기능
    6. REPL과 콘솔 창 – 파이썬 동작시키기
  3. 파이썬 기초
    1. 기초 입출력 – 소통하기
    2. 변수와 대입 – 기억하기
    3. 연산자 – 계산하기
    4. 조건문 – 분기를 만들기
    5. 반복문 – 비슷한 작업을 반복하기
    6. 반복문 코딩하기
    7. 변수와 리스트 – 비슷한 변수들을 묶기
    8. for, range – 리스트의 항목을 다루기
    9. 함수와 메소드의 호출 – 편리한 기능 이용하기
    10. 모듈 설치와 사용 – 유용한 기능 끌어다 쓰기
    11. 문자열 – 텍스트 다루기
  4. 파이썬 중급
    1. 함수를 직접 만들기 – 자주 쓰는 기능을 묶기
    2. 딕셔너리, 튜플, 세트 – 변수를 다양한 방법으로 묶기
    3. 클래스와 객체 – 변수를 사람으로 진화시키기
    1. 상속 – 클래스를 확장하기
    2. 정체성과 동질성 – 객체의 성질
    3. 특별 메소드와 연산자 – 파이썬의 내부 작동방식 이해하기
    4. 다양한 함수 인수 – 유연한 함수 만들기
    5. 슬라이싱 – 리스트 간편하게 접근하기
    6. 지능형 리스트(List Comprehension) – 리스트 갖고 놀기
    7. namedtuple - 데이터 묶음 손쉽게 만들기
    8. 조건 표현식 (Conditional Expression) - 간단한 분기 나타내기
    9. 코드 스타일 - 코드의 일관성 유지하기
    10. 명령문, 표현식 – 문법을 이루는 것들
    11. 본격적인 검색 해보기
  5. 파이썬 고급
    1. 일급 함수 다루기
    2. NotImplementedError와 NotImplemented
    3. 어노테이션 – 수월하게 프로그래밍하기
    1. 내장 함수 톺아보기
    2. 예외와 에러 – 예상치 못한 상황에 대응하기 (v0.1)
    3. 변수의 범위 – 이름 검색의 범위
  6. 파이썬 심화
    1. 시퀀스와 반복자 – 반복과 순회를 자유자재로 다루기
    2. 데코레이터 – 함수의 기능을 강화하기
    3. 프로퍼티
    4. 제너레이터
    5. async와 await
    6. 객체로서의 클래스 – 클래스를 동적으로 정의하기
  7. 파이썬 프로젝트 실습
    1. 원카드 게임 만들기 (1)
    2. 원카드 게임 만들기 (2)
    3. 원카드 게임 만들기 (3) (작성중)
    4. 턴제 자동 전투 게임 만들기 (작성중)
  8. 실전 (파이썬 외적인 것들)
    1. 정규표현식 – 문자열을 검색하고 치환하기 (작성중)
    2. 유니코드 – 컴퓨터에서 문자를 표기하는 방법
    3. html, css, 인터넷 – 자동화 첫 걸음 내딛기
    4. 네트워크 – 인터넷으로 통신하는 방법
    5. 문서 – 문맥을 읽어보기

One thought on “파이썬 강좌 – 컴퓨터 구성요소 ~ 컴퓨터는 어떤 걸 할 수 있나?

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다

Scroll to top