달력

9

« 2019/9 »

  • 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
  •  
  •  
  •  
  •  
  •  

'C언어 강좌'에 해당되는 글 1

  1. 2018.11.13 02885596_[1주차] 강의를 시작하기전에

최근 급속하게 발전하는 전자 정보통신 기술의 발달에 따라 우리 주변의 거의 모든 제품이 컴퓨터화 되고 네트워크화 되고 있다. 이러한 정보통신 시대에 프로그래머와 같은 소프트웨어 개발자의 역할은 매우 크다고 볼 수 있다. 전세계 컴퓨터 프로그램 가운데 95%가 C언어로 작성되어 있다고 한다. 이 강의는 C언어를 보다 효율적이고 유연하게 사용하기 위함이다. 또한 이 강의를 컴퓨터의 구조를 이해하고, C 언어에 대한 구조적 이해를 돕고자 한다. 사실 수많은 C언어 관련 서적이 나와 있지만, 다음과 같은 문제점을 발견할 수 있었다. 

첫째, 실제 응용프로그램에 필요한 부분에 필요한 오류를 잡는 방법에 대한 설명이 충분히 안되어 있다. 이유는 컴퓨터의 원리, 연산구조 등에 대한 이해없이는 이러한 오류의 원인을 설명하기 어렵기 때문이다. 둘째, 너무 추상적이다. 예를 들어 단어식 영어공부를 살펴보자. 단어라는 것은 대부분 의미가 추상적이고, 설명하기가 애매한 경우가 많다. 따라서 사전을 가지고 아무리 단어를 외어도 실제 문장 중에 활용하기 어려운 것처럼, C언어도 단어중심으로 공부하면 실제 응용력이 떨어지는 것이다. 그러나 대부분의 C언어 입문서들을 보면, 변수, 제어문, 배열, 포인터, 구조체의 순으로 설명하지만, 나열식이고 서로 연결성이 떨어진다. 따라서 프로그래밍언어도 우선 한 줄이라도 자기가 잘 쓸 수 있는 문장패턴을 많이 연습하여, 활용하는 능력을 배양하는 것이 필요하다.

마지막으로, 논리, 알고리즘에 대한 설명을 너무 등한시 하고 있다. 이는 이미 알고 있는 문장만 반복하는 것은 창의적이지 못하다. 언어라는 것이 결국에는 생각의 논리적 표현인 것처럼, 컴퓨터언어도 논리, 알고리즘의 구현인 것이다. 필자가 학생들을 가르칠 때, 막상 배열을 가르치고, 배열의 합을 구하는 작성하라고 시켰을 때, 오히려 배열은 이해해도 합을 구하는 알고리즘 자체를 몰라 쩔쩔매는 것을 많이 볼 수 있었다.

결론을 말하고 싶다. C언어는 결코 어렵지 않은 하나의 평범한 컴퓨터 언어이다. 그렇다고 다른 언어처럼 더 우수한 언어도 아니라고 생각한다. 베이직이나 파스칼처럼 다른 언어도 C언어가 갖고 있는 장점을 이미 수용하고 발전하고 있기 때문이다. 그러나 필자는 무조건 C언어를 배우라고 강조하고 싶다. 이는 마치 영어가 전세계의 공용어화 되었듯이, 이미 많은 컴퓨터 프로그래머가 이미 사용하는 프로그래밍언어의 표준이 되고 있기 때문이다.

C 언어를 쉽게 접근하기위해 다음의 3단계 접근방법을 제안한다.

1단계로, 작은 프로그램부터 먼저 작성하고 실행시켜 본다. 짧은 문장 중에 단어를 익히듯, 간단한 예제 중에서 C언어의 기초적인 문법을 공부한다. 그리고 이 단계에서 예제프로그램은 컴퓨터 구조와 연산원리를 이해하는 데 집중한다. 그러면, C언어 문법이전에 논리적 사고를 할 수 있고, 컴퓨터에 대한 이론 및 원리의 기초가 다져질 것이다.

2단계로 이제 문법적으로 접근한다. 문법도 나무를 보는 나열식이 아니고 전체 숲을 보는 구조적 원리의 시각을 갖도록 공부한다. C에는 문법의 철학이 있다. 이 철학을 분명히 알면, 어떤 문장이 문법적으로 가능한지 정확히 예측할 수 있다. 따라서 본 서는 세세한 문법보다는 문법의 철학을 설명하려고 주안점을 둔다. 문법적 규칙을 알면, 기존 코드를 최적화하는 것이 가능하고, 같은 문장이라도 다른 표현을 써서 작성할 수 있는 유연성을 갖게 된다.

3단계로 이제 좀 긴문장의 프로그램, 알고리즘 입장 그리고 소프트웨어 공학적 측면에서 공부한다. 사실 알고리즘과 소프트웨어 공학은 C언어와는 완전히 다른 이야기이다. 이는 수학적 기반과 공학적 기반 등을 요구하기 때문이다. 그러나 이의 연결이 무척 중요하다. C언어는 알면서, 문제를 못 풀면 소용없고, 문제를 잘 이해하면서 이를 프로그램으로 구현 못하면 그 또한 소용없는 일이다.

이러한 과정을 적용하기 위해 본 강의도 기초편, 문법편, 응용편으로 구성하며, 기초편에서는 예제를 통한 컴퓨터이해, 문법편에서는 문법적 고찰, 그리고 응용편에서는 응용프로그램을 통한  알고리즘 설명, 소프트웨어 공학의 소개 등에 관한 내용으로 구성하고자 한다. 

많은 학생들이 C 프로그래밍 하면 이러한 컴퓨터 또는 전자 전공자만이 접근할 수 있다고 생각한다. 그러나 본 강의를 통해, 이제 모든 분야에서 알아야할 도구가 C언어라는 자신감을 갖기를 바란다. 컴퓨터 언어란 그냥 말 그대로 컴퓨터용 언어인 것이다. 정확히 말해, 인간의 지식이나 생각, 사고 등을 컴퓨터에게 지시하는 명령어의 조합인 것이다.  컴퓨터시대를 살아가는 우리가 어떠한 전공이냐에 관계없이 컴퓨터 언어를 배워야 하는 이유가 여기에 있다. 그리고 많은 컴퓨터언어 중에서도 C언어를 알아야 하는 이유도 설명하였다.

이 강의를 통해 최대한 쉽고 또한 원리적으로 C언어를 설명하고자 한다. 저자의 희망은 이제 C언어는 쉽다라고 여러분이 느끼는 것이다. 여기에는 한가지 조건이 있다. 그 것은 일단 컴퓨터와 친해져야 하는 것이다. 그리고 또한 노력하는 것이다. 물론 노력에는 대가가 있어야 신이 나듯이, 그 노력에 대한 대가를 이 강의가 제공할 수 있는 기대한다.



강의를 시작하기 전에

 

   C언어는 한마디로 매우 간단하고 배우기 쉬운 프로그래밍 언어이다. 단지 여러분이 포인터 등 여러 가지 개념에서 어려움을 느끼는 이유는 컴퓨터구조에 대한 이해가 부족하기 때문이다. 시중에 많은 C언어에 대한 서적이 많이 나와있지만, 주로 C문법에 치중할 뿐, 컴퓨터의 구조나 작동원리를 같이 설명한 책은 드물다. C프로그램은 시스템 프로그래밍 언어이므로, 컴퓨터의 구조와 작동원리를 같이 이해하는 것이 필요하다. 그러나 컴퓨터 구조론과 같이 컴퓨터의 구조에 대한 전문서적은 난해하거나 이론 중심적인 경우가 많다. 이 강의는 C언어 자체보다는 컴퓨터의 구조와 작동원리를 이해하는 데, C언어를 가지고 설명하였다. 물론 C언어의 프로그래밍 기법도 같이 설명한다. 따라서 C언어의 구조와 컴퓨터의 구조를 동시에 이해하도록 함으로써, 시스템 프로그래밍을 하는데 보다 도움이 되도록 하였다.

이 강의에서는 용어를 설명할 때, "운영체제(operating system)"과 같이 번역된 용어가 큰 무리가 없을 때, 번역된 용어를 사용하였고, "오버플로우(overflow)"와 같이 번역에 무리가 있거나(overflow를 "범람"이라고 번역하는 것과 같이), 외래어 표기가 우리말로 자리잡은 경우(예: 컴퓨터), 외래어 표기를 사용하였다. 그리고 unsigned char형과 같이, C프로그램에서 사용되는 키워드의 경우, 그대로 영어 문자를 사용하였다.

다음은 예제 프로그램에 대한 설명이다. 모든 예제 프로그램의 매 줄마다 줄의 맨앞에 1:, 2: 등과 같이 번호와 콜론(colon)을 사용하여 줄의 번호를 표기 하였다.

 

1: void main()

2:{

3:}

 

"숫자:"는 해당 줄을 지정하기 기호일 뿐 다음과 같이 실제 코드에는 사용하지 않는다.

 

void main()

{

}

 

   모든 프로그램의 실행은 Visual C++6.0컴파일러를 사용하여 수행하였다. 다른 C컴파일러로는 터보C6.0이나, Borland C 등도 있으나, Visual C+6.0이 보다 많은 사용자들에게 보편화되는 추세라고 판단되어, 이 컴파일러 환경에서 설명하였다.

이 강의는 모듈화 프로그래밍 언어인 C언어에 대해 설명한다. 사실 C언어에서 객체지향 언어인 C++언어로 넘어가는 추세이지만, 실제 많은 응용프로그램이 아직 C언어로 작성되고 있고, C++컴파일러 또한 C언어로 작성된 하나의 응용프로그램이기 때문에, C언어문법 및 C언어로 작성된 프로그램 원리를 설명한다. C++에 대한 전문서적이 많으므로, 이 언어에 관심이 있는 독자는 C++전문서적을 참고하기 바란다. 

이 강의는 다음과 같이 구성된다. 먼저 이책은 C언어를 이해하는데 매우 기본인 출발점이 되도록 쓰여진다. 두번째 목적은 독자들에게 C프로그램을 이해를 시키고 동시에 컴퓨터 구조에 대해서도 알게 하려고 한다.

따라서 프로그래밍에 관련한 기본적인 지식에 대해서 먼저 설명한다. 2주차에서는 컴퓨터, 프로그래밍언어, 운영체제 등 전반적인 환경에 대해 설명한다. 3주차에서는 데이터를 저장하는 메모리에 관해 설명한다. 4주차에서는 컴퓨터가 표현하는 원리에 대해 설명한다. 5주차에서는 정수의 산술연산 원리에 대해 설명한다. 6주차에서는 논리와 비트연산을 통해 논리연산의 원리를 설명한다. 7주차에서는 실수의 표현 및 연산에 대해 다룬다.

다음으로 8주차부터는 본격적으로 C문법에 대해 다룬다. 문법도 나무를 보는 나열식이 아니고 전체 숲을 보는 구조적 원리의 시각을 갖도록 공부한다. 8주차에서는 C연산자에 관해 다룬다. 9주차에서는 입출력함수에 대해 다룬다. 10주차에서는 알고리즘의 틀이 되는 제어흐름에 관련한 문장형태에 대해 설명한다. 11주차에서는 C언어에서 중요한 개념인 배열과 포인터의 개념을 다룬다. 12주차에서는 프로그램 모듈화의 핵인 함수에 관해 다룬다. 13주차에서는 객체화의 틀이 되는 구조체에 대해 다룬다.

마지막으로 응용프로그램을 통해, 알고리즘의 중요성에 대해 알아보고, 소프트웨어 공학의 철학에 대해 소개한다. 14~15주차에서는 몇가지 응용프로그램을 살펴보고, 16주차에서 소프트웨어공학을 요약정리한다. 


  본 강의의 목표

 


1) 컴퓨터 프로그래밍 입문자에게 보다 이해하기 쉽게 컴퓨터의 구조를 설명하고 연산 원리를 공부하는 데 있음.


2) 실제 응용프로그램 개발시 자주 발생하는연산오류나 논리적 오류의 원인을 원리적으로 설명하고, 오류를 진단하고 교정하는 데 길잡이가 될 수 있도록 함.


3) C 문법을 체계적으로 정리하고, C의 문법적 철학을 이해함으로서 보다 유연하고 간결한 프로그램을 작성하고 자하는 개발자를 위한 전문지식을 전달하고자 함.

4) 보다 많은 예제 프로그램 제공을 위해, 문법은 외우는 것이 아니라, 저절로 익혀지는 것이라는 느끼게 하는 함.

5) 다가오는 미래 자동화사회에 핵심이 되는 정보통신 기술자가 되기위한 프로그래밍 기술을 제공하고자 함.

6) 모든 분야에서 컴퓨터를 이용하여 문제를 푸는데 도움이 될 수 있는 실제적 C프로그래밍 원리를 설명함.

7) 스스로 프로그램을 창의적으로 작성할 수 있는 기반을 제공함.


'C언어 강좌' 카테고리의 다른 글

02885596_[1주차] 강의를 시작하기전에  (0) 2018.11.13
Posted by 사용자 고경철(kckoh)

댓글을 달아 주세요