이번 카테고리에서는 학교 교양수업으로 듣게 된 '프로그래밍을통한논리적사유연습' 과목에 대한 수업 내용 정리를 할 예정입니다.

 

아무래도 수업을 듣는 학생들이 대부분 문과생이다보니 (이공계열 학과는 95%가 다른 캠퍼스에...) 최대한 풀어서 설명해주시는 경향이 있으므로 전공생들에게는 다소 난이도가 낮을 수 있음을 미리 알려드립니다!

 

본 수업은 C로 진행되며, 글을 작성하는 본인은 C++을 통해 C스타일 언어를 접했고, C는 처음으로 접했으므로 같이 정리해나가면서 배우면 좋을 것 같습니다! 저도 처음 C를 공부하는 것이다보니 질문에 대해서 최대한 답변을 해 드리고 싶지만 명쾌한 해설은 해 드리지 못할7 수 있다는 점 양해 부탁드립니다 ㅠㅠ

 

출처가 달려 있지 않은 사진의 경우 교수님의 PPT를 일부 참조했음을 말씀드립니다.

 

목차

     


    0. 프로그래밍의 기본 개념

    바로 프로그래밍 언어를 공부하는 것도 좋지만, 기본적으로 컴퓨터에 대한 기초 지식이 없다면 프로그래밍 언어의 구조 혹은 사용에 대해 이해하기 조금 힘들 수 있으므로 컴퓨터에 대한 가장 기초적인 부분부터 다루고 넘어갑니다.

     

    컴퓨터는 하드웨어소프트웨어로 구성되어 있습니다.

     

    하드웨어는 컴퓨터의 물리적인 부분을 담당합니다. 대표적인 예로는 모니터(출력), 프린터(출력), 마우스(입력), CPU(연산), 메모리(저장) 등이 있습니다.

     

    소프트웨어는 컴퓨터 내부에서 특정한 목적을 위해 만들어진 프로그램을 뜻합니다. 대표적인 예로는 윈도우(OS), 포토샵, 한글(프로그램) 등이 있습니다.

     

    이 중에서도 소프트웨어는 시스템 소프트웨어응용 소프트웨어로 나눠집니다.

    시스템 소프트웨어는 컴퓨터의 시스템을 운영하기 위한 모든 소프트웨어를 통칭합니다. 윈도우, iOS, 안드로이드 등이 대표적인 예죠.

    응용 소프트웨어는 컴퓨터의 시스템에 반드시 필요한 것은 아니나 특정 작접을 위해 개발된 소프트웨어를 뜻합니다.

    예로는 인터넷 익스플로러나 크롬, MS 워드, 파워포인트 등이 있습니다.

     

    그렇다면 프로그램은 무엇을 뜻할까요?

    절차적 지식인 알고리즘을 컴퓨터에 이해시키기 위해서 가공한 형태를 말합니다.

    이러한 알고리즘의 내용을 컴퓨터가 이해할 수 있도록 특정 프로그래밍 언어로 작성하는 것이죠.

     

    프로그램이 만들어지는 과정

     

    그렇다면 프로그래밍 언어는 뭘까요?

    인간과 컴퓨터가 의사소통하기 위해 존재하는 언어를 말합니다.

    인간적인 표현을 프로그래밍 언어를 통해 기계어 혹은 어셈블리어로 번역하여 컴퓨터가 이해할 수 있도록 하는 것이죠.

    반대로 인간이 컴퓨터의 언어를 이해하고 사용하는 것에는 어려움이 있기 때문에 그 대안으로 프로그래밍 언어를 사용한다고 볼 수도 있습니다.

    아무튼 인간과 컴퓨터의 의사소통을 위해 필요한 언어인 것이죠.

    위 사진에서 인간적인 표현에 가까울 수록 고급 언어라고 부르고, 기계적인 표현에 가까울수록 저급 언어라고 부릅니다. (저급이라고 해서 안좋고 고급이라고 해서 좋은게 아닙니다..)

     

    고급 언어의 예는 C, C++, JAVA, C#, 파이썬 등이 있고, 저급 언어의 예는 어셈블리어(기호 코드)와 기계어(0과 1의 2진수 형태)가 있습니다. 특히 기계어의 경우 기종마다 기계어가 달라 언어의 호환성이 없습니다.

     

    고급 언어의 장점은 사람 중심의 언어이다보니 특정 CPU의 동작에 대해서 자세히 알 필요가 없습니다.

    CPU를 완전히 이해하고 있지 않아도 CPU에 대해 독립적인 프로그램을 작성할 수 있는 것이죠.

    아무래도 인간 입장에서 이해하기 쉽다보니 프로그램을 개발하기 쉽고 유지 보수하기도 쉽습니다.

     

    고급 언어와 저급 언어의 특징을 표로 정리하면 아래와 같습니다.

    구분 고급 언어 저급 언어
    호환성 좋음 나쁨
    용이성 쉬움 어려움
    실행속도 느림 빠름

    1. C언어의 특징

    그렇다면 이제 본격적으로 C언어에 대해 알아보도록 하겠습니다.

     

    C언어는 1972년 벨 연구소의 데니스 리치에 의해 처음으로 만들어졌습니다.

    왜 C냐고 물으신다면, 별 다른 이유는 없습니다. 이전에 존재했던 A언어와 B언어의 개선판이라서 C라는 이름이 붙었다고 생각하시면 됩니다.

     

    C언어의 장점으로는 간결성과 이식성, 그리고 효율성이 있습니다.

     

    간결성 : 구문이 간결하고, 프로그램 개발에 꼭 필요한 핵심적인 기능들을 제공합니다.

    이식성 : 어셈블리어 수준의 저수준 지원 기능을 제공하면서도 여러 CPU에서 실행될 수 있는 프로그램을 개발할 수 있습니다.

    효율성 : 프로그램 크기도 작고, 프로그램의 실행 속도도 빠릅니다.

     

    반대로 C언어의 단점은, 배우기 어렵고 사용하기 어렵다는 점이 있습니다.

    또한 다른 언어들에 비해 사용시 주의사항이 많습니다. 다른 언어들과는 다르게 메모리까지 관리할 수 있기 때문에 능력은 많지만 사용할 때 신경써야 하는 부분이 많습니다.

     

    대신 C언어를 공부한다면 다른 언어들, 특히 C++, Java, C# 등 C를 기반으로 만들어진 다른 언어들을 이해하는 데에 도움이 되고, 프로그래밍의 기본 개념을 이해하는 데도 도움이 됩니다.

    그리고 C언어는 다른 언어들에 비해 로우레벨(컴퓨터 언어에 가까운 레벨)이기 때문에 속도가 빨라서 성능 위주의 게임, 서버, 시스템 프로그램 등에 많이 쓰입니다. 또한 요새 각광받고 있는 임베디드 프로그램 개발에도 많이 쓰이죠.


    2. C언어 프로그래밍의 동작

    위 그림이 C언어의 동작 과정을 간략하게 보여주는 그림입니다.

     

    각 단계를 자세히 살펴보면 아래와 같습니다.

     

    소스코드 작성 : 소스코드 편집기를 이용해 소스코드를 작성합니다.

    전처리기 : #include, #define 등을 이용해 컴파일될 소스 파일을 준비합니다.

    컴파일 : 컴파일러는 각각의 소스 파일을 컴파일해서 오브젝트(.obj)파일을 생성합니다.

    링크 : 링커는 오브젝트(.obj) 파일들과 라이브러리(.lib)를 합쳐서 하나의 실행파일(.exe)파일을 생성합니다.

    실행 : 실행파일을 이용하여 실행합니다.

    디버깅 : 실행할 때 발생하는 에러를 찾습니다.

     

    단계 설명에서 전처리, 컴파일, 오브젝트파일, 링커, 라이브러리, 실행파일 등 처음 보는 내용이 있을 수 있습니다.

    이해를 돕기 위해 위 과정을 조금 더 단순히 말하면 기계가 인간의 명령을 이해할 수 있도록 변환해 주는 과정이라고 생각하면 되겠습니다.

    전처리 과정을 통해 기계어로 바꾸기 전에 필요한 것들을 불러오고, 컴파일러를 통해 컴파일하는 것이 기계어로 바꾸는 핵심 과정이고, 링킹 과정을 통해 실행 가능한 코드로 만들어줍니다.

     

    아래 C++ 수업을 정리한 글에서도 비슷하게 설명되어 있으니 참고하시면 되겠습니다 :)

     

     

    [객체지향프로그래밍] 0. C++? 그게 뭔데?

    안녕하세요! 코딩하는 경제학도 쏘코입니다. 본 카테고리의 포스팅에서는 학교에서 듣는 객체지향프로그래밍 수업을 정리하도록 하겠습니다. 아주 기초적인 내용은 짧게 다루거나 생략하고 넘

    ssocoit.tistory.com

     

    C/C++ 컴파일러는 C와 C++ 컴파일러의 역할을 동시에 합니다. C++는 C와 호환성이 있지만, C는 C++와 호환성이 없습니다. (C++쪽이 더 늦게 나온 업그레이드버전이기 때문이라고 생각하시면 됩니다. 그렇다고 C++이 C보다 무조건 더 좋다.. 이런건 절대 아닙니다!)

     

    또한 소스파일의 확장자가 .c이면 C컴파일을 수행하고, .cpp이면 C++ 컴파일을 수행합니다. 확장자와 컴파일에 관해서는 아래 Visual Studio를 사용하시면 쉽게 이해하실 수 있습니다.

     


    3. Visual Studio

    본 카테고리에서 진행하는 과정은 Visual Studio를 기반으로 할 예정입니다. 따라서 VS에 대한 이해가 필요하겠죠?

    프로그램이 얼마냐..는 걱정하지 마세요! 무료입니다 ㅎㅎ

     

    Visual Studio는 윈도우 플랫폼에서 가장 많이 사용되는 C 개발환경입니다.

    VS의 장점으로는 분할컴파일이 있습니다.

    대규모의 프로그램을 개발하거나 여러 명의 프로그래머가 동시에 개발을 진행할 때는 소스파일을 여러 개로 나누어 작성해야 하는 경우가 있을 수 있습니다. 이럴 때 여러 object들을 모아서 하나의 project로 진행할 수 있게 해주는 기능을 지원합니다. 매우 편리하겠죠?

     

    VS 프로젝트에 포함되는 정보는

    프로그램을 만들기 위해 사용되는 소스파일이나 헤더파일에 대한 정보,

    소스 파일을 컴파일 할 때 사용되는 컴파일 옵션,

    오브젝트 파일이나 라이브러리를 링크할 때 사용되는 링크 옵션 등이 포함됩니다.

     

    그리고 VS를 통해 개발을 시작할 때는 프로젝트를 먼저 생성하고, 프로젝트 내에서 사용될 소스파일(*.c)를 생성합니다.

    위 사진에서 Text.c, Module1.c, Module2.c가 하나의 소스파일들이 됩니다.

     

    또한 솔루션이라는 요소도 존재합니다. 이 솔루션(*.sin)은 여러 프로젝트(*.vcxproj)들을 하나로 묶어서 관리할 수 있게 도와주는 요소입니다. 모든 프로젝트는 최소한 하나 이상의 솔루션에 속해 있어야 합니다.

    이 말은 솔루션 - 프로젝트 - 소스파일 순으로 엮인다는 말이 되겠죠?

    그림판으로 표현한 구조

     

    구조를 살펴봤으니, 실제로 VS를 켜고 프로젝트를 생성하면 아래와 같은 구조로 프로그램이 작동합니다.

     

    동작을 조금 더 자세히 하나하나 살펴보면 아래와 같습니다.

     

    프로젝트 생성 : 프로젝트의 종류, 프로젝트명, 프로젝트의 위치를 지정합니다.

    소스파일 생성 : 소스 파일 확장자를 .c로 지정하고 생성합니다.

    소스파일 작성 : 소스 파일의 내용을 작성합니다.

    빌드 : 전처리기를 처리하고 컴파일과 링크를 수행합니다.

    실행 : VS안에서 소스파일을 직접 실행합니다.

    디버깅 : 프로그램의 실행 에러를 찾습니다.

     

     

    아래는 위에서 살펴봤던 일반적인 C 프로그램의 개발 과정(좌측)과 VS를 이용한 C 프로그램의 개발 과정(우측)의 그림입니다.

    오른쪽의 VS를 이용한 C 프로그램의 개발 과정에서 소스파일작성부터 디버깅까지의 과정이 왼쪽 그림이라고 생각하시면 됩니다!!

     

     


    이번 포스팅에서는 C의 특징과 우리가 사용할 VS에 대한 간략한 내용을 알아보았습니다.

    실제로 C 코드에 대한 내용은 전혀 없었기 때문에 코딩에 대한 사전 지식이 없어도 어려움을 느낄 부분은 많지 않기 때문에 빠르게 훑으실 수 있었을 것이라고 생각합니다. (물론 어려운 단어들은.. 좀 있긴 한데 우선 그냥 넘어가셔도 무방합니다.)

     

    다음 포스팅부터는 진짜 C언어에 대한 문법 및 사용법에 대해서 알아보도록 하겠습니다. 이제부터 시작입니다! 빠샤!

    반응형
    • 네이버 블로그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기