학습/컴퓨터공학

프로그래밍 기초와 실습

roquen4145 2022. 2. 17.

내가 대학교에 처음 갔을 때 들었던 컴퓨터공학 관련 첫 수업이다

1학년 때는 전공이 제대로 정해지지 않았었는데

컴퓨터공학 관련 수업이 이것 밖에 없어서 매우 아쉬웠던 기억이 있다

 

그 당시 교재는 '개념을 콕콕 잡아주는 C프로그래밍'이었고

부교재는 'C Programming: A Morden Approach'였다

내가 졸업할 때 쯤에는 프로그래밍 기초와 실습(이하 프기실)에서

더이상 C언어를 쓰지 않고 Python을 사용한다는 말을 들었는데

C언어를 어려워 했던 사람들이 많았기 때문에 잘 바뀌었다고 생각한다

 

C언어로 프로그래밍에 입문하고 웬만한 수업들을 C로 진행했기 때문에

C언어를 제대로 이해하지 못하면 이후 전공 수업에도 차질이 있었다

이해하지 못하는게 하나라도 있으면 질문과 검색으로 반드시 알아낸 후에

다른 과목으로 진행하는 것이 모든 면에서 이롭다고 생각한다

 

내가 학습했던 자료는 오래됐고 유실된 부분도 있기 때문에

KOCW에 올라온 프기실 강의를 기준으로 요약 및 정리를 할 것이다

( http://www.kocw.net/home/cview.do?cid=911d1d538bf5dce2 )

모든 내용을 다 적지 않을 것이기 때문에 위 링크의 자료를 참고하거나 검색을 하도록 한다


1. Introduction

Computers

더보기

컴퓨터의 정의와 컴퓨터를 구성하는 요소에 대한 설명이 있는 단원이다

 

프기실이 아닌 다른 세미나식 수업에서 컴퓨터의 역사 같은 것을 배울 것인데

기본적으로 계산을 위한 기계가 발전했다는 것을 알고 가면 되겠다

 

컴퓨터의 구성요소에서는 CPU와 메모리에 대해서 알아야되는데

CPU가 계산을 하는 주체이고 계산할 내용과 계산한 결과를 메모리에 저장한다고 생각하면 된다

CPU가 어떻게 정보를 읽고가고 어떻게 저장을 시키냐에 대해서는
CPU보다 훨씬 간단한 논리회로를 배워보면 어떤 방식이 복잡해져서 발전하게 될지 유추할 수 있을 것이다

메모리에는 휘발성 메모리와 비휘발성 메모리가 있는데 RAM, ROM, Disk 등으로 나뉜다

어떤 내용들이 어디로 어떻게 저장될지는 아직 몰라도 될텐데 나뉜다고는 알고 가자

Computational Thinking

더보기

컴퓨터가 어떻게 명령을 수행하거나 계산을 하는지에 설명이 있는 단원이다

 

컴퓨터에게 명령을 내리기 위해서는 컴퓨터가 알아들을 수 있는 언어로 컴퓨터에게 명령을 해야하고

그것이 0과 1로 이루어진 기계어이다

기계어보다 좀 더 복잡하고 명령과 인자 형식으로 되어있는 언어가 어셈블리 언어이고

사람이 읽고 쓰기 간편한 언어들을 고급 프로그래밍 언어라고 한다

 

개발자들은 대부분 고급 프로그래밍 언어로 코드를 작성하고

컴파일 과정을 거쳐서 기계어로 번역하여 컴퓨터가 알아들을 수 있도록 변환한다

 

또한 이 단원에서 알아야할 중요한 내용 중 하나는 컴퓨터의 문제해결 방법이다

컴퓨터는 한번에 단순한 한가지 명령만 처리할 수 있고 순서대로 이루어진다는 것이다

그래서 이전에 작성해놓은 프로그래밍 공부하기 좋은 소스들 (https://roquen4145.tistory.com/195) 에

소개했던 https://code.org 에서 미로를 빠져나가는 문제가 있는데

쉬운 미로 문제

이런 문제를 풀려고 할 때 단계별로 무엇을 할지 나눠서 생각하는 것이 처음 프로그래밍을 시작할 때 도움이 된다고 나는 생각한다.

오른쪽 문제와 같은 경우에 새가 돼지를 잡으러 가야된다면

앞으로 간다
오른쪽으로 방향을 돌린다
앞으로 간다
앞으로 간다
앞으로 간다
오른쪽으로 방향을 돌린다
앞으로 간다
왼쪽으로 방향을 돌린다
앞으로 간다

위와 같이 정말 기계가 됐다고 생각하고 문제풀이에 접근하는 것이 좋다
그 이후에 반복되는 부분을 반복문으로 바꾸거나 반복되는 정도를 조건문으로 처리하거나 하는 것이다

이런 문제풀이를 알고리즘이라고 하며 각 단계별로 나타내서 시각화하면 그것이 순서도(flowchart)이다

Programs

더보기

프로그램은 특정 업무를 수행하기 위한 명령들의 순서로 코드가 컴파일 된 상태를 말한다

따라서 프로그래밍은 프로그램을 만드는 과정으로 디자인, 코드작성, 테스트, 디버깅, 유지보수 등을 모두 포함한다

Introduction to C Language

더보기

C언어에 대해서 간단하게 알아보는 단원이다

C언어가 데니스 리치에 의해 벨 연구소에서 개발되었고 B언어로부터 발전된 것이고

여러 가지 이야기가 있고 C언어의 장점과 단점에 대해 배운다 (교재 참고)

다른 언어들과의 가장 큰 차이점으로는 메모리같은 하드웨어를 직접 다룰 수 있는

저급 언어(기계에 더 가까운 언어)이며 절차지향적인 언어(<-> 객체지향적)라는 점이다

두 가지 특징에 집중하여 다른 언어와 비교하며 학습하면 도움이 될 것이다

 

C언어로 웬만한 모든 기능을 구현해볼 수 있기 때문에 배우기가 어려우며

특히 포인터 관련 내용에서 가벼운 마음으로 프로그래밍에 입문하고자 하는 사람들 중

절반은 포기하는 것 같아 보였다

 

따라서 C언어 기반인 수업을 하나 다 듣고서도 정나미가 떨어지지 않았다면

개발자의 길을 걸어도 괜찮을 것이다


2. Flowchart

Flowchart

더보기

순서도는 알고리즘이나 프로세스에 대해서 보기 쉽게 나타낸 도표이다

여기서는 각 기호가 무엇을 나타내는지에 대한 정의를 잘 파악하는것이 핵심이다

시작/끝, 기본 처리 단계, 조건문, 입력/출력 등을 나타내는 기호가 각각 있다

나중에 UML도 배우게 될 것인데 UML 중 activity diagram이

순서도의 한 종류라고 하기도하고 두 개가 다르다고 하는 의견도 있다

개인적인 의견으로는 기능은 비슷한데 activity diagram이 좀 더 보편화되어 사용된다고 생각한다

Flowchart and C

더보기

C언어 코드를 짜기전에 알고리즘을 순서도로 작성한 후 코드를 짜라는 내용을 담은 단원이다

순서도로 미리 전체 그림을 그려보면 내가 원하는 기능을 프로그램에서 온전히 수행하는지

또는 예외 케이스를 놓치고 있는지 알 수 있다

직접 그리지는 않아도 머릿속에서라도 내가 어떻게 어떤 순서로 무엇을 할지 그려보는 것은

필수적인 내용이므로 가장 기초적인 프로그램 설계 방법을 배운다 생각하고 학습하자

 

소프트웨어 설계 방법에 관련한 다른 포스트는 나중에 추가하여 링크를 달아두도록 하겠다

 


3. C-Overview

C Overview

더보기

C언어에 대한 개요이다

가장 간단한 코드로 알아보면 다음과 같다

#include <stdio.h>

int main(void)
{
	printf("Hello, world!\n");
	return 0;
}

#으로 시작하는 것이 전처리기로 처리될 내용들이다
여기서는 standard input & output에 대한 라이브러리를 추가한다

 int main(void)라고 되어있는 것은 함수인데 main은 함수 이름이고
void는 입력값을 아무것도 안 받겠다는 의미이며
int는 출력값을 정수형 값으로 정한다는 의미이다

 

전처리기로 처리되는 내용에는 include 같이 라이브러리 추가말고

define으로 상수값이나 매크로를 지정할 수 있다

변수값을 저장하는 내용은 4장 Datatypes 을 참고한다

 

C언어는 다른 프로그래밍 언어와 같이 조건문, 변수 배열, 함수, 입출력 등을 가지고 있으며

포인터라는 메모리와 관련된 특이한 기능이 있다

다른 언어를 학습하고 왔다면 문법이 어떻게 다른지만 확인하고 포인터를 공부하면 되겠다

변수, 조건문 등의 상세한 내용들은 목차를 봐서 알겠지만 뒷 장에서 다룬다


위 코드를 입력하여 실제로 돌아가는 것을 보기 위해서는
visual studio community 버전을 'C++을 이용한 데스크톱 개발' 워크로드와 함께 설치하여
'새 프로젝트 만들기' -> '빈 프로젝트'를 선택하여 만든 후
소스파일 폴더에 새 항목을 추가하여 코드를 입력하고 F5로 실행하면 된다

Lexical Elements, Operators, and the C system

더보기

C언어의 어휘와 문법, 연산자 그리고 그것들로 이루어진 코드가 프로그램까지 어떻게 변화하는지 나타낸다

 

컴파일러는 프로그램 파일을 만들 때 어휘 검사, 문법 검사, 최적화, 프로그램 생성 순으로 진행하기 때문에

올바른 코드를 만들었는지 스스로 먼저 알기 위해서는 각각이 어떤 것을 의미하는 것인지 알아야 한다

 

C언어의 어휘라고 하면 낯설게 느껴질텐데 아래 코드를 다시 예로 들면

#include <stdio.h>

int main(void)
{
	printf("Hello, world!\n");
	return 0;
}

여기서 #, include, <, stdio.h, >, int, main, (, void, ), {, printf, (, "Hello, world!\n", ), ;, return, 0, ;, }
각각이 lexical item 즉 어휘 항목이고 include 대신 includes, add 등등을 쓰면 안된다는 의미이다
문법은 어휘 항목들이 올바른 순서와 짝으로 이루어졌는지, 그리고 필요한 항목이 있는지 없는지 등등을 검사한다

어휘 항목은 keywords, identifiers, constants, string constants, operators 등으로 이루어져 있다

 

keywords는 예약어라고도 하며 C언어에서 미리 용도를 지정해둔 단어이기 때문에 함수나 변수 이름으로 사용할 수 없는 단어들이다

예를 들어 auto do goto signed unsigned break double if sizeof void case else int static volatile char enum long struct while const extern register switch continue float return typedef default for short union 등이 있다

 

identifiers는 함수나 변수의 이름으로 문자와 숫자 그리고 아래강조문자(_)로 이루어진다

C언어의 기본 라이브러리에서 사용하는 identifiers는 사용할 수 없다

(C++에서는 다른 namespace로 사용 가능)

 

constants는 정수와 부동소수점, 문자를 포함하는 변하지 않는 값을 뜻한다

 

string constants는 문자열이다
특수문자는 \를 앞에 붙여 사용해야한다

 

operator는 어떤 값을 계산하는 단어들로 적용되는 순서와 우선순위, 그리고 각종 추가적인 기능의 연산자도 있으니 책이나 교재를 참고해서 제대로 공부할 필요가 있다

 

C 언어 시스템에서는 코드를 프로그램으로 만들 때

1. 전처리기가 전처리문을 처리한다

    헤더파일 추가, 매크로 적용 등

2. 컴파일러가 코드를 오브젝트 파일로 변환

3. 링커가 오브젝트 파일들과 표준 C 라이브러리를 연결하여 실행파일 생성

순서로 진행된다


4. DataTypes

Declarations, Expressions, and Assignment

Fundamental Data Types


5. FlowControl

Operators

Control Statements


6. Functions

 


7. Array, Pointer and Strings


8. Bitwise Operators and Enumerations


9. Structures


10. IO


 

'학습 > 컴퓨터공학' 카테고리의 다른 글

컴퓨터공학 학습 정리 및 가이드 Intro  (0) 2022.02.16

댓글