01. 프로그램이란?

김리원·2021년 8월 24일
0

키포인트

  • 하드웨어는 "입력장치", "저장장치", "연산장치", "출력장치", "제어장치"로 구성합니다.
  • 프로그램 명령 종류는 "입력", "기억", "연산", "출력"이 있습니다.
  • 개발자의 뇌 관점에서는 "처리 관점", "흐름 관점", "부품화 관점"이 있습니다.

하드웨어와 소프트웨어의 관계

Python 학습을 하기 전에 기본적인 개발 기초지식으로, 프로그램이 무엇인지 알아 봅시다.
컴퓨터는 "하드웨어"와 "소프트웨어"로 구성되어 있습니다. 하드웨어는 컴퓨터를 구성하는 장치이며, 소프트웨어는 컴퓨터에서 실행되는 프로그램입니다.

예를 들어, PC에서는 PC본체, 키보드, LCD모니터 등이 하드웨어이며, 워드, 엑셀, 웹브라우저 등이 소프트웨어입니다. 컴퓨터를 사용하려면 하드웨어와 소프트웨어가 모두 필요합니다. 어느 한쪽만 있다고 하면 아무런 소용이 없습니다.

하드웨어(Hardware)는 "물체"라는 뜻으로, 손으로 만져볼 수 있는 장치와 같은 딱딱한 것을 표현합니다. 반면에 소프트웨어(Software)는 "부드러운 것"이라는 뜻으로, 손으로 만질 수 없는 프로그램과 같은 부드러운 것으로 표현합니다.

하드웨어와 소프트웨어의 관계는 하드웨어라는 토대 위에 소프트웨어가 올라가는 이미지입니다. 이것을 자동차 운전에 비유하면 자동차가 하드웨어이거 그것을 작동하는 운전자가 소프트웨어입니다. 즉, 소프트웨어(프로그램)은 하드웨어를 동작시키는 운전자 역할입니다.

자동차 구조를 알아야 운전할 수 있는 것처럼 하드웨어 구조를 알아야 소프트웨어를 만들 수 있습니다. 그림 이제 좀더 자세히 하드웨어 구조를 설명하겠습니다.

연습문제

다음 빈 공간에 알맞은 단어를 넣어주세요.
하드웨어는 컴퓨터 구성 < a >이며 소프트웨어는 컴퓨터에서 실행 < b >입니다. 자동차 운전에 비유하면, < c >가 하드웨어에서 그것을 작동하는 < d > 소프트웨어입니다.

a ~ d에 대한 답
(1) 자동차
(2) 운전자
(3) 프로그램
(4) 장치

컴퓨터 5대 장치의 기능

컴퓨터는 다양한 종류가 있지만, 어떤 컴퓨터라도 그 내부는 "입력장치", "저장장치", "연산장치", "출력장치", "제어장치"라는 5개 장치로 구성되어 있고, 이것을 "컴퓨터 5대 장치"라고 합니다.
즉, 컴퓨터의 하드웨어는 5개의 장치로 구성되어 있습니다. 이런 5개의 장치의 기능을 알 수 있는 프로그램을 만들기 위한 중요한 기초지식입니다.

각각의 장치의 기능을 살펴봅시다. 입력장치는 컴퓨터의 외부에서 내부로 데이터를 가져옵니다. 저장장치는 컴퓨터 내부에 데이터를 저장합니다. 연산장치는 컴퓨터 내부에 저장된 데이터에 어떤 작업을 추가합니다. 출력장치는 컴퓨터 내부에서 외부로 데이터를 전달합니다. 그리고 제어장치는 프로그램의 내용을 해석하고 실행하여 다른 4개의 장치를 작동시킵니다.

제어 장치에 다른 4개의 장치가 연결되어 있는 제어장치로부터 지시에 따라 다른 4개의 장치가 작동하기 떄문입니다.

연습문제

다음 빈칸에 알맞은 단어를 넣어주세요
< a > 장치는 컴퓨터의 외부에서 내부로 데이터를 가져옵니다.
< b > 장치는 컴퓨터 내부에서 데이터를 저장합니다. < c >장치는 컴퓨터 내부에 저장된 데이터에 어떤 가공을 추가합니다.
< d >장치는 컴퓨터 내부에서 외부로 데이터를 전달합니다. 그리고 < e >장치는 프로그램 내용을 해석하고 실행하여 다른 4개의 장치를 작동시킵니다.

a ~ e에 대한 해답
(1) 제어
(2) 입력
(3) 출력
(4) 연산
(5) 기억

컴퓨터에서 컴퓨터 5대 장치

컴퓨터 5대 장치의 구체적인 예를 살펴봅시다. 예를 들어, PC는 키보드와 마우스는 입력장치이고, 메모리 및 SSD장치가 저장장치이며, 메모리는 주기억장치라고 하고, SSD나 HDD를 보조기억장치라고 말합니다. LCD모니터나 프린터가 출력장치입니다. 그리고 CPU(Central Processing Unit)는 연산장치와 제어장치로 겸임하고 있습니다.

일반적인 데스크톱 PC에서는 PC본체 내부에 CPU, 메모리, 저장장치가 있고, 외부에는 키보드, 마우스, LCD모니터, 프린터가 있습니다. 이런 장치를 입력장치, 기억장치, 연산장치, 출력장치, 제어장치로 구별할 수 있게 됩니다. 5대 장치를 인식하는 프로그램을 만들때 제일 중요하기 때문입니다.

연습문제

다음 빈칸에 알맞은 단어를 채워주세요. (d와 e는 순서)
PC에서는 키보드와 마우스가 < a >장치입니다. 메모리 및 SSD/HDD 장치가 < b >장치입니다. LCD모니터 및 프린터가 < c >장치입니다. 그리고 CPU가 < d >장치와 < e >장치를 겸임하고 있습니다.

a ~ e에 대한 해답
(1) 제어
(2) 입력
(3) 출력
(4) 연산
(5) 제어

하드웨어를 알면 프로그램이 무엇인지 알 수 있습니다.

컴퓨터 5대 장치는 하드웨어의 지식이지만, 하드웨어를 알면, 소프트웨어가 무엇인지, 즉, 프로그램이 무엇인지 알 수 있습니다.

프로그램은 하드웨어를 동작시키기 위한 명령들이 작성된 문서입니다. 다양한 명령들이 있지만, 크게 나누면 "입력해라", "기억해라", "연산해라", "출력해라"로 분류할 수 있습니다. 왜냐하면, 컴퓨터 하드웨어 입력장치, 기억장치, 연산장치, 출력장치, 제어장치로 구성되어 있기 때문입니다.
"입력해라"가 입력장치, "기억해라"는 저장장치, "연산해라"는 연산장치, "출력해라"는 출력장치로 각각 작동시킵니다. 다만, 제어장치는 프로그램 내용을 해석하고 실행하는 것으로 "제어해라"라는 명령은 없습니다.

즉, 프로그램은 "입력해라", "기억해라", "연산해라", "출력해라"라는 명령들을 작성된 문서입니다. 이 문서를 작성하기 위한 언어가 바로 "프로그래밍 언어(Programming Languages)"입니다. 프로그래밍 언어로 Python(파이썬)을 사용한다면, Python 구문에서 "입력해라", "기억해라", "연산해라", "출력해라"라는 명령을 사용합니다. 나중에 설명하겠지만, "연산해라"에서 "더해라", "빼라", "곱해라", "나눠라"등이 있듯이 각각의 명령에는 몇가지 종류가 있습니다. 그러나, 크게 나누면 "입력해라", "기억해라", "연산해라", "출력해라"로 분류할 수 있습니다.

연습문제

다음 빈칸에 알맞은 단어를 채우세요 (d와 e는 순서)

프로그램은 하드웨어를 동작시키는 "~해라"라는 명령이 써있는 문서입니다. "입력해라"는 < a >장치를, "기억해라"는 < b >장치를, "연산해라"는 < c >장치를, "출력해라"는 < d >장치를 각각 작동시킵니다. < e >장치는 프로그램 내용을 해석하고 실행하는 것으로 "제어해라" 명령은 없습니다.

a ~ e에 대한 해답
(1) 제어
(2) 입력
(3) 출력
(4) 연산
(5) 기억

개발자 머릿속의 관점

프로그램을 만드는 사람을 개발자 또는 프로그래머라고 합니다. 프로그래머는 개발자 특유의 감각과 사고방식이 있어 이를 개발자 머릿속이라고 부르겠습니다.

아래와 같이 개발자 머릿속에서는 처리, 흐름, 부품화라는 3가지 관점이 있습니다. 이는 정보처리기사에서 사용되는 프로그래밍 언어, Python, C언어, Java와 거의 동일합니다.

  • 처리의 관점: "입력", "연산", "출력"의 3가지 작업을 생각
  • 흐름의 관점: "순차적", "분기", "반복"의 세가지 흐름을 생각
  • 부품화의 관점: "함수"와 "클래스"에 대한 부품화 생각

처리의 관점에서는 프로그램을 만들 때 "무엇을 입력하면 좋은가?", "어떤 연산을 하면 좋은가?", "무엇을 출력하면 좋은가"라고 생각합니다.
흐름의 관점에서는 프로그램의 처리를 진행할 때 "순차적인가?", "분기할것인가?", "반복할 것인가?"라고 생각합니다.
부품화의 관점에서는 프로그램을 여러 부분으로 나눌 때 "어떤 함수를 만들면 좋을까?", "어떤 클래스를 만들면 좋을까?"라고 생각합니다.

앞으로는 Python(파이썬) 구문을 위 내용을 토대로 설명하려고 합니다.

연습문제

다음 빈칸에 알맞은 내용으로 채워주세요.
개발자 뇌의 처리의 관점에서는 프로그램을 만들 때 < a >라고 생각합니다. 흐름의 관점에서는 진행하는 경우 < b >라고 생각합니다. 부품화의 관점에서는 프로그램을 부품으로 나누어 만들 때 < c >를 생각합니다.

a ~ c에 대한 해답
(1) "어떤 함수를 만들면 좋을까?", "어떤 클래스를 만들면 좋을까?"
(2) "무엇을 입력하면 좋은가?", "여떤 연산을 하면 좋은가?", "무엇을 출력하면 좋은가?"
(3) "순차적인가?", "분기할 것인가?", "분복할 것인가?"

profile
개발자, IT강사, sage.riwon.kim@gmail.com

0개의 댓글