리안이와 함께하는 세상

#3. C언어의 구성요소(1) 본문

STUDY !/배워보자 C언어

#3. C언어의 구성요소(1)

리안아범 2009. 8. 19. 17:03
  컴퓨터가 하는 말을 들은적이 있는가? 물론 그럴일은 없지만, 만약 컴퓨터가 입이 생겨서 말을 한다면 무슨말을 하는지 알아들을 수 없을 것이다. 컴퓨터가 알고 있는것은 10010101010101011 이런것들 밖에 없으니 말이다.
  그럼 프로그래머는 컴퓨터와 어떻게 의사소통을 할까? 다행히도 프로그램 개발도구에는 언어번역기가 들어있다. 컴퓨터를 사용하는 우리들이 쉽게 사용할 수 있도록 누군가 이미 만들어 준 것들이다. 물론 이 번역기는 우리가 원하는 것을 컴퓨터에 전달해 줄 뿐, 컴퓨터가 원하는 것을 우리에게 전달해 주지는 않는다. 컴퓨터 스스로 사고할 수 없기 때문이다. 번역을 위해서 사용하는 방법은 컴파일과 링크이다. (컴파일과 링크에 대해서는 인터넷을 찾아보기 바란다)
  당연한 이야기이지만, 우리가 아무렇게나 말한다고 해서 언어번역기가 알아서 해석해주지는 않는다. 때문에 우리는 언어번역기가 원하는 형식에 맞춰서 우리의 의사를 컴퓨터에게 전달해야 하는데, 그 형식중의 하나가 우리가 배우는 C언어이다. C언어도 언어의 종류중 하나이기 때문에 문법이란 것이 존재하는데, 사람이 대화할때 문법에 맞지 않더라도 서로 대충 이해하는 것과는 다르게 컴퓨터는 정확한 문법에 맞춰서 코드를 작성해 주어야 한다. 아! 너무 걱정하지는 마시라~ 문법이라고 해서 사람이 쓰는 언어처럼 복잡하지는 않다. 간단한 몇개의 틀만 알고 있으면 무엇이든 만들어 낼 수 있을 것이다.

  사용가능한 문자?
  그러면 우리가 제일 처음 배워야 할 것은 무엇일까? 영어를 배울때를 생각해보자. 가장 먼저 하는 것이 무엇인가? A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ~ 바로 알파벳이다. 어떤 문자를 사용해서 언어를 전달하는지 가장 먼저배워야 한다.
  C언어에서 사용가능한 언어는 영어에 기초한다. 그러나 영어를 잘 할 필요는 없다. 프로그래밍에있어서 중요한것은 논리 이지 유창한 영어실력이 아니기 때문이다. 프로그램을 짜는데(코딩) 사용되는 단어정도만 알면 충분하다.
  그럼 본격적으로 알아보자. 코딩에는 어떤 문자를 사용할 수 있을까?
  너무나도 간단한 답이긴 하지만, 키보드에 있는 모든 문자가 사용가능하다. 다시 말해서, 영어 소문자, 영어 대문자, 숫자, 특수문자 ( !@#$%^&*()_+=-][';/.,{}:"<>?`~\| ) 그리고 빈칸, 탭, 새 줄(Enter)이다. 우리가 사용하는 모든 것은 이 문자들을 조합해서 탄생한다.

  예약어
  C언어에는 컴퓨터와의 대화를 위해 미리 정의 해 놓은 단어들이 있다. 이것들을 예약어(reserved word) 혹은 키워드(keyword)라고 하는데, 모두 소문자로 이루어져 있다. 컴퓨터의 지적수준을 생각해볼 때, 다른 용도로 사용되는 같은 이름을 구분하지 못할 확률이 99.9%+0.1%이다. 따라서 예약어를 다른용도로 사용하지 못하지만, 한가지 다행스러운 것은 그 지적수준이 대소문자도 다른 언어로 인식하는 정도라서, 대문자와 소문자를 바꾸면 충분히 사용이 가능하다는 점이다. 자 여기서 확실히 알아두자 C언어는 대문자와 소문자를 구별한다. 예를 들어서 int, Int iNt inT, INt, InT, iNT, INT는 모두 다른 단어로 취급된다.
  예약어를 제외한 나머지는 전부 우리들이 이름을 붙여야 한다. 아 예외가 있다면 main함수. 사람이 전하고 싶어 하는 말이 전부 main함수에 들어있는 것을 본능적으로 알고 있다. 누가? 컴파일러가! 즉 언어번역기가 알고 있다. main함수가 무엇이냐! 그냥 함수이다. 프로그램의 틀을 만들어주는 함수.

  식별자
  하던 얘기를 마저하자 main함수를 제외한 모든 이름은 우리가 원하는대로 지을 수 있다. 하지만 여기도 문법이 적용된다. 우리가 지어주는 이름을 식별자라고 하는데, 이 식별자를 만들 수 있는 문자의 종류는 영대/소문자, 숫자 그리고 Underscore(_) 이다. 또한, 숫자는 식별자의 첫머리에 올 수 없다. 예를 들어 2name 과 같은 식별자는 사용이 불가능하지만, _name의 경우는 가능하다.
  이 식별자가 사용되는 곳은 변수의 이름, 함수의 이름, 매크로의 이름 등에 쓰인다.

  주석
  컴퓨터가 아닌 유저만을 위한 특별한 기능이 있다. 그것은 바로 주석이라고 하는 것인데, 컴파일러는 주석을 외계어로 처리하고 무시한다. 즉 주석에는 어떤 말이 들어가 있어도 컴파일(번역)하는 데에는 전혀 지장이 없다는 말이다.
  주석은 자기가 작성한 코드에 대해서 부가적인 설명이 필요하거나 코딩중 일시적으로 어떤 문장이 동작하지 않게 하기 위해서 사용된다.  주석에는 한줄 주석과 여러줄 주석이 있다. 한줄주석은 딱 한 줄에만 적용되는 주석으로, ' // ' 기호를 사용한다. 이 기호가 쓰인 이후부터는 모두 주석처리된다. 여러줄 주석은 ' /* */ ' 기호가 사용되는데 /* 가 쓰인 곳 부터 */로 끝나는 부분까지 모든 구간을 주석으로 인식한다.
  주석이 너무 많으면 좋지 않겠지만, 그렇다고 너무 없어도 좋은 코딩이라고 할 수 없다. 필요한 적재적소에 적절한 주석이 들어가야 코드를 이해하기도 훨씬 쉬워지고, 수정하기도 쉬워진다.
  주석에 익숙해지기 위해서 앞으로 간단한 설명은 주석을 사용하기로 하겠다.
 
  그 밖에 +-*/와 같은 연산자도 존재하는데, 앞에 써져있는 산술연산자, 크기를 비교해주는 관계연산자, 논리연산을 수행해 주는 논리 연산자 들이 있다.



  문장의 종류
  C언어에서 사용되는 문자에 대해서 알아보았다. 그럼 이제 뭘해야 할까? 말하고 듣기? 앞으로 10년 쯤은 컴퓨터가 말을 하지도, 듣지도 못할테니 말하기 듣기는 방법은 배울 필요가 없을 것 같다. 그럼 읽기, 쓰기에 대해서 배워보자.

  읽기, 쓰기에 대해서 배우려면 제일먼저 무엇을 해야할까? 곰곰히 생각해보자. 문법을 배울때 제일먼저 배우는게 무엇인가? 그것은 바로 문장의 구성요소이다. 주어 목적어 보어 서술어. 영어로 하면 주어, 동사, 목적어, 보어 등등등... 혹은 형용사 부사 관사 뭐 이런거 있지 않는가!?
 
  일단 어떤 문장이 있는지부터 살펴 봐야할 것 같다.
  모든 문장은 명령문이다. 사실 그렇게 될 수밖에 없는 이유는 컴퓨터에게 의사를 물어볼 수 없기 때문이다.
  문장의 종류에는 선언문, 배정문, 제어문이 있다.  하나씩 알아보자.

  선언문
  선언문은 문자 그대로 선언해주는 역할을 한다. 무엇을 선언해 주느냐고? 그건 변수가 될 수도 있고, 함수가 될 수도 있고 상수가 될 수도 있다. 변수가 뭐고 함수가 뭐고 상수가 무엇인지는 나중에 알아보도록 하고 왜 선언문이 있어야 하는지 알아보자.
  이런 시가 있다.
  "내가 그의 이름을 불러주기 전에는 그는 다만 하나의 몸짓에 지나지 않았다. 내가 그의 이름을 불러 주었을 때 그는 나에게로 와서 꽃이 되었다." -김춘수의 꽃 中
  그렇다!!! 내가 이제 너를 사용하겠노라고 만인에게 알려야 하기 때문이다. 대뜸 컴퓨터에게 가서 name이란놈이 누군지 아냐고 물어보면 컴퓨터가 "낸들알간?" 하고 대답할것이다. 왜냐면 알려준 적이 없기 때문이다. 그래서 name이란 녀석이 어떤 녀석인지 컴퓨터에게 정보를 주어야 하는데, 이녀석을 선언할때는 어떤 용도로 얼마 만큼의 저장공간을 사용하게 될 지 정해주어야 한다. 이름에는 이녀석이 어디에 사용될 지에 관련된 자세한 내용이 들어가는 것이 일반적이고(name이란 녀석은 이름과 관련된 녀석인가보다), 어떤 형식으로 얼마만큼의 저장공간을 사용하게 될지는 자료형을 통해서 알려주면 된다. (자료형에 대해서는 바로 다음 강의쯤에 알아보도록 하고 넘어가자.)
  무엇인가를 선언할때 기본 틀은 이렇다.
  자료형 이름;
  함수라면 함수의 내용이 뒤에 따라 나오겠지만 일단 공통적인 선언문에 대해서 하고 있기 때문에 여기까지만 하기로 하자.

  배정문
  배정문은 변수와 관련이 매우 깊다. 변수에 대해 간략히 소개하자면 '변하는 수' 라고 할 수 있다. 내용물이 언제건 바뀔 수 있다는 뜻이다.
  배정문에는 변수와 배정기호(=)가 필요하다. 수학에서 ' = ' 기호는 같다 라는 뜻을 나타내지만, C언어에서 ' = ' 기호는 "오른쪽에 있는 값을 왼쪽에 저장한다"라는 뜻을 나타낸다. 즉 a = b의 뜻은 "b의 값을 a에 저장한다" 라는 뜻이되고, b = 4 의 뜻은 "4를 b에 저장한다"라는 뜻이 된다. 이같은 특성 때문에 왼쪽값(lvalue라는 이름까지 가지고 있다.)에는 어떤 자료를 저장 할 수 있는 변수만이 올 수 있다.

  제어문
  C언어는 순차적 프로그래밍 언어이다. 이는 기술한 순서대로 프로그램이 실행된다는 것을 뜻하는데, 그 흐름에 미세한 영향을 주는 것이 제어문이다.  제어문에는 반복문, 선택문, 분기문이 있다. 반복문은 말 그대로 특정 과정을 어떠한 제어 조건에 따라 반복실행 하는 구문이고, 선택문은 여러가지 경우들 중에 한가지를 선택해서 실행하는 구문이며, 분기문은 프로그램의 흐름에 지대한 영향을 끼지는 구문으로 흐름을 순간이동 시키는 구문이다. 여기에 대해서는 나중에 자세히 알아보자. 개략적으로 이해만 하고 있으면 된다.

  함수 호출문
  특별히 선언한 함수는 함수를 호출 하는 특별한 경로가 존재하는데, 이것이 함수 호출문이다. 함수호출문은 함수이름(매개변수)와 같이 써주기만 하면된다. 이때 처리 흐름은 함수호출문을 만난순간 main함수에서 함수로 훌쩍 넘어갔다가 함수가 끝나면 다시 main함수로 돌아온다.


내용이 많이 길어진 것 같아서 나머지 내용(문장의 구성요소)에 대해서는 다음시간에 하기로 한다.
이론적인 내용이 대부분이다. 읽고 이해만 할 수 있으면 된다.

'STUDY ! > 배워보자 C언어' 카테고리의 다른 글

#6. 화면 입력함수  (0) 2009.08.24
#5. 화면 출력함수  (0) 2009.08.21
#4. 문장의 구성요소  (0) 2009.08.20
#2. C언어의 기초, 기본구조  (0) 2009.08.18
#1. 진수법  (0) 2009.08.17