티스토리 뷰


 본 강좌는 아래 동영상 강좌와 같이 진행됩니다. 되도록이면 동영상과 같이 보시는 것을 추천합니다.

 

 

유튜브 채널 가기

 

강좌 3편 동영상 보기

 

 


 

 

이번시간에는 프로그래밍에 도움이 되는 몇가지와 앞서 첫시간에 언급했던 대로 '성적관리 프로그램' 을 같이 만들어보면서, 그에 필요한 '자료형'과 '변수'에 대해 알아보도록 하겠습니다.

 

 

 

1. 주석문

 

 프로그램 코드가 길어질수록 자신이 만든 코드도 시간이 지남에 따라 무슨 역할을 하는지 잊어버릴 수 있는데, 코드 중간중간 주석을 달아주면 이를 사전에 예방할 수 있습니다. 지난 시간의 'HelloWorld' 의 코드에 주석을 달아보겠습니다.

 

// 전처리문

#include <stdio.h> 

 

// 메인 함수

void main()

{

// HelloWorld 화면 출력

printf("HelloWorld!!\n");

}  

 

 이렇게 보기에 깔끔하고 알아보기 쉬워졌습니다. "//" 다음부터 그 줄 마지막까지는 컴파일 과정에서 생략되며, 단순히 프로그래머가 코드를 알아보기 쉽게 하기 위해 설명을 달아주는 기능만을 합니다. 이 '주석문' 에는 두가지 사용 방법이 있는데, 지금처럼 한줄만 주석으로 쓰고 싶을때는 '//' 뒤에 설명을 쓰면 되며, 만약 여러줄의 설명이 필요하다면 다음처럼

 

/* 여러줄의 설명은

   이런식으로

   쓰면 됩니다. */

 

/* 한줄내에서 쓰려면 이렇게 써도 됩니다. */

 

 이런식으로"/*" 로 시작해서 "*/" 으로 끝내면 됩니다. 앞으로 많이 쓰이니 반드시 알아두도록 합니다.

 

 

 2. 선언부와 구현부

 

 C프로그램의 구조는 기본적으로 '선언부' 와 '구현부'로 나뉘어지고, 그에 맞춰서 프로그래밍 하게 됩니다. '선언부'는 뒤에 나올 '구현부'에서 사용할 여러가지를 선언하는 내용을 담고 있으며, '구현부'는 '선언부'에서 선언한 것들을 가지고 프로그램을 실제 구현하는 내용을 담습니다. 지난시간의 'HelloWorld' 프로그램을 다시 살펴봅시다.

 

// 전처리문

#include <stdio.h> 

 

// 메인 함수

void main()

{

// 선언부

 

// 구현부

// HelloWorld 화면 출력

printf("HelloWorld!!\n");

}  

 

 중괄호 안의 윗부분에는 '선언부'가 먼저 와야 하며, 그 이후 '구현부' 가 됩니다. 단순히 main함수만 이렇게 나뉘는 것이 아니고, 중괄호를 기준으로 합니다. 다음처럼

 

{

// 선언부

 

// 구현부

 

{

// 선언부

 

// 구현부

 

}

 

 이와같이 중괄호가 시작되는 부분부터 '선언부' 가 시작됩니다. 이런 중괄호로 묶인 부분을 흔히 '블럭' 이라 하는데, 이러한 블럭의 특성에 대해서는 다음에 자세히 알아보도록 하겠습니다. 다시 위의 'HelloWorld' 프로그램을 다시 살펴보면 선언부에 들어갈 내용이 없기 때문에, 구현부만 한줄 있는 프로그램이란걸 알 수 있습니다. 이제 이 선언부에 들어갈 내용을 알아봅시다.

 

 (현재 이 선언부와 구현부는 컴파일러나 컴파일러 버전에 따라 엄격하지 않은 경우도 있습니다. 우리가 사용하고 있는 비주얼 스튜디오 2015도 마찬가지로 선언부에 선언을 하지 않더라도 문제없이 동작하지만, 본 강좌에서는 선언부와 구현부를 지키도록 하겠습니다.)

 

 

 3. 자료형

 

 첫시간에 언급한대로 컴퓨터는 비트 단위로 모든 데이터를 처리하며, 비트는 0과 1로 이루어져 있습니다. 하지만 우리가 배우는 C언어에서는 다양한 형태의 자료를 사용 가능합니다. 이런 역할을 하는 것을 자료형이라 부르고, 각 형태별로 다음과 같이 나뉩니다.

 

 ◆ 정수형

 우리가 수학에서 사용하는 그 정수 맞습니다. 양수와 0 그리고 음수로 구성되어 있으며, 그 크기에 따라 여라가지가 있습니다.

 

 

 데이터 타입의 크기는 사용하는 시스템에 따라 달라집니다. 과거 16비트 컴퓨터 시절에는 int가 4바이트가 아닌 2바이트였었습니다. 하지만 현재 대부분은 32비트에서 64비트 시스템이기 때문에 저정도만 알고 계셔도 큰 문제는 없어 보입니다.

 

 short, int, long 형 앞에 unsigned를 붙이면, 양의 정수만 사용한다는 의미입니다. 음수를 사용할 필요가 없고, 좀 더 큰 수를 사용할때 사용하면 편리합니다. 반면에 unsigned가 붙지 않은 타입들은 앞에 signed가 붙어야 하지만 생략된 것입니다. 이 signed의 경우, 맨 앞 비트를 +/- 의 부호를 넣기 때문에 1비트만큼 수의 표현 범위가 줄어들게 됩니다.

 

 

이런식으로 1비트만큼은 부호가 사용하므로 다음처럼

 

 

 

이렇게 계산할 수 있습니다. 양수 범위에서 1을 빼주는 이유는 0이 양수에 들어가기 때문입니다. 이처럼 범위 자체를 외울 필요는 없고, 원리만 알아뒀다가 필요할때 사용하시면 되겠습니다.

 

 ◆ 실수형

 정수형과 달리 소수점이 있는 수를 표현합니다. 실수형의 경우 부호가 없는 양수만 사용하는 형태는 없습니다.

 

 

 컴퓨터에서는 실수를 '부동 소수점' 방식으로 표현하는데, 이를 구체적으로 설명하는데만 해도 굉장한 부분을 할애해야 하고, 보는 사람을 이해시키기 위해서라면 더 분량이 늘어나기 때문에 과감히 생략합니다. 단점은 수를 그대로 저장하지 않고 유효숫자와 자리수로 계산하기 때문에 부정확하다는 겁니다.

 

 우리가 기억해야 할 것은 '유효 자릿수' 입니다. float 형은 수 전체의 자릿수가 7자리까지, double형은 15 자리까지 저장이 가능합니다. 만약 더 큰 자릿수의 수를 넣는다면 뒷부분은 원래와는 다른 수로 채워질 가능성이 있습니다.

 

float 형의 예 :

123456789.123456789 를 넣었다면

1234567까지 유효숫자, 나머지는 버림

 

출력해보면

 

123456724.000000 

 

와 같이 유효자릿수 이후의 숫자는 쓰레기값이 들어감

 

 이런식으로 사용 용도에 맞게 float, double 을 선택해 사용하여야 합니다.

 

 ◆ 문자형

  문자형은 'A', '1' 등과 같이 한 문자를 넣는 형식입니다.

 


 문자형도 따지고 보면 '정수형' 입니다. 숫자를 직접 저장할 수도 있고, 문자를 넣을 수도 있는데요. 문자를 넣을 경우는 알아서 '아스키코드'라는것에 대응되는 숫자로 변환돼서 들어가고, 꺼낼때는 이 숫자를 아스키코드상 문자로 변환하여 가져오는 것입니다. unsigned char의 경우는 부호 없이 양수만을 사용하는데, '확장 아스키 코드'를 사용하는 등에 사용됩니다.

 

 

 4. 변수와 상수

 

 지금까지 C언어에서 사용하는 자료형에 대해 간단하게 알아보았습니다. 이제 첫시간에 잠깐 언급했던대로 '성적 관리 프로그램' 을 만들어보면서 이 자료형이 어떻게 사용되는지 알아보도록 하겠습니다.

  


 지난 시간에 했던대로 프로젝트를 새로 만들어 줍니다. 프로젝트 이름은 'Grade Manager' 로 하겠습니다.

  


 '빈 프로젝트' 잊어버리지 마시고 체크하셔야 합니다.

 

 역시 지난시간에 했던 대로 'main.c' 파일을 생성한 후, 아래 기본적인 코드를 작성합니다.

 

#include <stdio.h>

 

void main()

{

 

}

 

 

 ◆ 변수

 지금부터 만들 '성적 관리 프로그램'에는 다음의 데이터를 필요로 합니다.

 

이름

등급 

국어 성적

수학 성적

영어 성적

과학 성적 

 

 성적들을 자료형을 사용해 직접 값을 넣어 사용하기 위해서는 '변수' 라는 것이 필요합니다. 흔히 수학에서 x, y등으로 사용하여 값을 대입하는 것과 비슷하다고 생각하시면 되겠습니다. 사용 방법은

 

자료형 변수명;

 

 으로 먼저 선언하며, 이 변수에 값을 넣기 위해서는

 

변수명 = 값;

 

 이렇게 변수에 값을 넣어줄 수 있으며, 선언할때 다음과 같이

 

자료형 변수명 = 값;

 

 이런식으로 한줄에 선언과 동시에 값을 넣어줄 수도 있습니다. 이렇게 선언과 동시에 초기값을 넣어주는 것을 변수의 '초기화' 라고 하며, 되도록이면 이렇게 사용하는 것이 프로그램의 오류를 줄이는데 도움이 됩니다.

 

 한번에 여러개를 선언할 수도 있습니다.

 

자료형 변수명, 변수명, ... 변수명;

 

초기화를 동시에 할때는

자료형 변수명 = 값, 변수명 = 값, ... 변수명 = 값;

 

 변수명을 지을때는 아래의 규칙을 따라야 합니다.

 

영어와 숫자 그리고 _ (Under bar) 로만 이루어진다.

첫글자는 반드시 영어로 한다.

대소문자를 구분한다.

C 예약어는 사용이 불가능하다. 

 

 C 예약어는 C언어에서 이미 존재하는 키워드들입니다. int, float 등도 모두 예약어이므로 쓸 수가 없다는거 주의하시기 바랍니다. 간단하게 비주얼 스튜디오 에디터창에 단어를 쳐서 파란색으로 나오면 모두 예약어이므로 쓸 수 없습니다.

 

int 1a;    // 숫자가 앞에 있음

int a#b;    // 특수문자 사용불가

int long;    // 예약어 사용불가

 

int a_1;    // 정상동작함

int A_1;    // 정상동작함 (위의 a_1과는 다른 변수)

 

 이렇게 '변수' 라는것은 특정 자료형을 사용하기 위해 선언되며, 값을 저장하거나 꺼낼 수 있고, 어떤 계산식이나 자료형이 필요한 곳에 대신 들어가서 '값' 대신 사용이 가능합니다. 물론 변수에는 그 자료형에 맞는 값을 넣어줘야 정상 동작합니다.

  

 자료형

 자료

 예

 short

 정수

 100

 int

 정수

 100

 long

 정수

 100L

 float

 실수

 3.14F

 double

 실수

 3.14

 char

 단일 문자

 'A'

 char[]

 문자열

 "ABC"

 

 long형 값은 뒤에 'L' 을 붙인다는 점, float형 값에는 끝에 'F'를 붙인다는 점 기억해 두시기 바랍니다. 그리고, char형 값은 단일 문자이므로 '' 로 묶어야 하며, 맨 아래 문자열에 대해서는 뒤에 설명하겠습니다.

 

그러면 '성적 관리 프로그램'에 직접 점수와 관련된 변수를 선언하여 값을 넣어보겠습니다.

 

#include <stdio.h>

 

void main()

{

char name[20] = "홍길동";   // 이름

char grade = 'B';                 // 등급

int scoreKOR = 80;              // 국어점수

int scoreMAT = 75;              // 수학점수

int scoreENG = 86;              // 영어점수

int scoreSCI = 92;               // 과학점수

}

 

 등급을 담는 char형 변수인 grade의 경우에는 문자라는것을 명시해주기 위해 ''로 묶어 'B' 와 같이 해 주었습니다. 그 아래 점수를 담는 int형 변수들은 숫자를 넣어주었습니다. 이제 맨 위의 문자열 변수의 선언을 알아보겠습니다.

 

선언 

char 변수명[최대길이];

 

선언과 초기화를 같이 할때는

char 변수명[최대길이] = "";

 

 그러므로 char형 변수 name은 최대 문자 20개의 크기를 가진 변수이며, "" 안의 '홍길동' 으로 초기화가 된 것을 알 수 있습니다. (사실 문자열 변수라는것은 문자형인 char형을 여러개 붙인 것뿐이며, 뒤에 '[]' 이 붙은 변수를 배열이라 하고, 이것은 다음에 자세히 알아보도록 하겠습니다.) 주의할 점은 '한글'은 2byte 만큼을 차지하므로 한글을 쓰고자 할때는 글자수의 2배만큼 크기를 잡아주셔야 합니다.

 

 이제 이렇게 선언된 변수를 이용해 프로그램 내에서 값을 언제든 바꿔줄 수 있습니다.

 

#include <stdio.h>

#include <string.h>            // 문자열 처리

 

void main()

{

char name[20] = "홍길동";   // 이름

char grade = 'B';                 // 등급

int scoreKOR = 80;              // 국어점수

int scoreMAT = 75;              // 수학점수

int scoreENG = 86;              // 영어점수

int scoreSCI = 92;               // 과학점수

 

// 값을 바꾸면 그 아래는 바뀐값으로 동작

scoreKOR = 100;

scoreMAT = 42;

scoreENG = 67;

scoreSCI = 96;

grade = 'A';

strcpy(name, "김철수");

}

 

 이렇게 값을 언제든 다른 값으로 바꿔줄 수 있습니다. 여기서 문자열 변수 name은 이전과 동일하게 값을 넣지 못하고 strcpy() 함수를 이용해야만  합니다. 이를 위해서 위에 전치리문을 한줄 추가시켰고, string.h를 포함시켰습니다. 이 strcpy() 함수는 다음과 같이 사용됩니다.

 

strcpy(문자열 변수, "넣을 새 문자열");

 

 왜 다른 변수처럼 그냥 값을 넣지 못하는지는 이후 '배열' 에 대해 설명할때 같이 알아보도록 하고, 일단은 문자열의 경우 strcpy() 함수를 사용해 값을 바꿀 수 있다는것만 기억합시다.

 

 

 ◆ 상수

 위에서 변수는 선언부에 선언한 후 언제든 값을 바꿔줄 수 있다는것까지 알아봤습니다. 그런데 사실 지금까지 변수에 넣은 '값' 들은 그냥 '값' 이 아니라 '상수' 라고 해서, 그 자체는 변하지 않는 값이었습니다. 실제로 다음과 같은 변수 선언에서

 

int a = 1;

 

 int형의 변수 a를 선언했고, 1이란 값을 초기값으로 넣었습니다. a란 변수는 앞으로 다른 값으로 변할 수 있는 '변수'이지만, 1이란 것 자체는 프로그래머가 코드상에서 선언문을 고쳐 2나 3같은걸로 바꾸지 않는 이상 변하지 않는 값인 것입니다. 이를 C언어에서는 '상수' 라고 합니다. 이런 상수를 단순히 1, 0, -1, 'A', "문자열" 같은게 아니라 변수처럼 사용자가 이름을 붙여줄 수도 있습니다.

 

const 자료형 상수명 = 값;

 

 이렇게 선언을 합니다. 예를들어

 

const int a = 0;

 

 이렇게 선언했다면 이후 a는 무조건 0과 같습니다. 만약 다음처럼

 

a = 1;

 

 변수를 사용하듯 값을 바꿔주려고 하면 에러 메시지를 보게 될 것입니다. 이러한 '상수'는 '변수'와 달리 의도적으로 많이 사용하지는 않지만 자료형 앞에 'const'가 붙어 선언됐다면 변하지 않는 '상수' 라는것을 바로 알아차릴 수 있어야 합니다.

 

 이번시간에는 선언부에 해당하는 '변수'와 '상수' 선언에 대해 알아봤습니다. 다음시간에는 이어서 구현부에 해당하는 '연산자'와 '출력문'에 대해 알아보도록 하겠습니다.

 

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30