2023 방통대 C 스터디 강의노트
한국방송통신대학교 컴퓨터과학과의 C언어 스터디에 사용한 자료입니다.
배움은 끝이 없기에 강의노트라 하더라도 오류가 있을 수 있으며, 이 점에 대해서는 둥글게 지적 부탁드립니다.
읽기 전 아래 내용을 숙지하여주시기 바랍니다.
•
강의 노트에서 중요한 부분은 이렇게 노란색 전구()로 강조합니다.
•
한국어로 번역했을 때 뜻이 명확하지 않은 일부 용어는 의미를 분명히 하기 위해 한국어로 뜻을 번역하지 않고 영어 원문을 그대로 사용하거나 말음을 한국어로 표기합니다.
•
강의 노트는 스터디 내용을 대체할 수 없으며 이해를 위한 자세한 내용은 스터디에서 언급합니다.
•
강의 노트는 Light 테마에서 보시는것을 권장합니다.
•
스터디는 Windows 11, Visual Studio IDE 환경에서 진행합니다.
◦
mac인 경우 패러렐즈를 이용해 Windows 11 ARM을 설치하여 동일하게 진행할 수 있습니다.
•
•
Email: admin@varofla.com
#방통대 2023 C 스터디 강의노트 태그 전체 글보기
C?
C언어는 1972년에 벨 연구소의 데니스 리치와 켄 톰슨이 개발한 프로그래밍 언어입니다. 초기에는 유닉스 운영체제의 개발 목적으로 만들어졌으며, 이후에는 시스템 프로그래밍 언어로 널리 사용되었습니다.
C언어는 절차적 프로그래밍 언어로, 명령어들의 집합으로 구성되어 있습니다. 프로그래머는 변수, 함수, 구조체 등을 이용하여 프로그램을 작성하며, 이를 컴파일러를 통해 컴퓨터가 실행할 수 있는 기계어로 변환합니다. C언어는 이식성이 높고, 강력한 기능을 가지고 있어서, 다양한 분야에서 사용되고 있습니다.
여기서 절차적 프로그래밍 언어라는 것은 프로그래밍 언어가 순서적이라는 관점을 가졌다는 뜻입니다. 이러한 관점을 프로그래밍 패러다임 이라 부르는데요, 절차적 프로그래밍 언어인 C언어는 작성한 순서대로, 즉 A→B→C로 코드를 작성하면 반드시 A→B→C로 작동하는 성질을 가졌습니다.
주요 프로그래밍 패러다임으로는 아래가 있습니다.
•
절차적 프로그래밍(Procedural Programming): 프로그램 실행의 순서를 중심으로 작성
•
객체지향 프로그래밍(Object-Oriented Programming): 프로그램을 객체 단위로 작성하여 객체 간의 상호작용을 중심
•
병행성 프로그래밍(Concurrent Programming): 대량의 요청을 처리하기 위해 병렬적으로 실행되는 코드를 작성하는 패러다임으로 함수가 비동기적으로 작동함
C언어는 시스템 프로그래밍, 임베디드 시스템, 게임 개발, 네트워크 프로그래밍, 데이터베이스 관리 시스템 등 다양한 분야에서 사용됩니다. 또한, C언어를 기반으로 한 다른 프로그래밍 언어들도 많이 개발되었습니다.
•
C++: C언어의 기능을 확장하여 객체지향 프로그래밍 기능을 추가한 언어입니다. C++은 C언어의 문법과 구조를 거의 그대로 사용하며, C언어와의 호환성이 높은 언어입니다.
•
C#: C++의 문법을 기반으로 하여 마이크로소프트에서 개발한 객체지향 프로그래밍 언어입니다. Windows 운영체제와 밀접한 연관이 있으며, .NET 프레임워크에서 사용됩니다.
•
Python: C언어와 달리 코드를 간결하게 작성할 수 있는 인터프리터 언어입니다. C언어와 마찬가지로 다양한 운영체제에서 사용할 수 있습니다.
•
Java: C언어와 비슷한 문법을 가지고 있으며, 객체지향 프로그래밍 언어입니다. Java는 C언어와 달리 운영체제에 독립적으로 실행될 수 있도록 설계되었습니다.
•
PHP: 서버 측 웹 개발에 많이 사용되는 언어 중 하나입니다. C언어와 문법적으로 유사하며, 웹 페이지에서 동적인 콘텐츠를 생성할 수 있습니다.
•
JavaScript: 웹 페이지에서 동적인 기능을 추가하기 위해 사용되는 스크립트 언어입니다. C언어와 문법적으로 비슷하지만, 객체지향 프로그래밍 기능도 지원합니다.
•
Rust: C언어의 보안적인 문제를 해결하기 위해 메모리 관리와 보안성을 강조하는 언어입니다. 최근 들어 각광받고 있으며 여러 분야에서 적용이 이루어지고 있습니다.
C vs Python
최근 Python 과목이 추가되며 수업에서 C와 Python을 모두 접해보신 분들은 Python이 훨씬 쉽게 느껴지실지도 모르겠습니다. 그러나 두 언어는 각자 목표가 뚜렷하기 때문에 용도에 따라 사용하는편이 좋습니다. 몇 가지 관점에서 이들을 비교하며 알아보겠습니다.
•
문법: C언어는 문법이 엄격하며 복잡한 편입니다. 당장 변수 하나를 만든다 하더라도 변수의 타입을 정해야 하며 모든 변수 타입을 숙지하여야 합니다. 반면 Python은 변수 타입을 알아서 추론하는 등 문법이 직관적인 편입니다. 아래는 같은 문자열 복사 동작을 C와 Python 3에서 작성한 예시입니다.
•
실행 방식: C언어와 파이썬을 다른 관점에서 비교한다면 바로 컴파일 언어와 인터프리터 언어라는 차이가 있습니다. C는 코드를 작성한 후 소스코드를 기계어로 번역하는 컴파일러를 거친 후 실행 파일을 얻어내지만, Python은 컴파일 과정 없이 실시간으로 인터프리터가 코드를 번역하며 작동합니다.
•
성능: 위의 코드 실행 방식의 차이로 인해 프로그램의 실행 시간 자체를 본다면 C언어가 Python에 비해 월등히 빠른 속도를 가지고 있습니다. 이외에도 똑같은 동작을 수행한다고 할 때 Python은 높은 추상화 계층을 통해 어려운 내용은 모두 숨겨두었기 때문에 쉽게 코드를 작성할 수 있는 반면 이로 인한 오버헤드가 크지만, C언어는 상대적으로 저수준의 API를 사용하기 때문에 속도가 빠릅니다.
•
사용 분야: 앞서 언급한 내용처럼 C언어는 속도가 매우 빠르고 효율적이라 빠른 속도를 요하는 운영체제, 임베디드, 장치 드라이버 등에 사용됩니다. 반면 Python은 개발의 편의성이 높고 여러 모듈을 활용할 수 있어 프로토타이핑, 인공지능, 데이터 분석에 주로 사용됩니다.
•
라이브러리: Python은 C와는 다른 프로그래밍 패러다임을 지향하고 있는데요, Python은 좋은 코드 가독성과 높은 생산성이라는 장점을 통해 많은 사용자와 커뮤니티를 보유하고 있습니다. 이때문에 커뮤니티에서 만들어진 많은 모듈(라이브러리)을 공유받아 활용할 수 있으며 C의 코드를 Python에 바인딩해 데이터 분석과 같이 높은 속도를 요구하는 분야에서도 무리없이 사용할 수 있습니다. 반면 C에서는 시스템에서 제공하는 기본 라이브러리(Standard Library)를 제외하면 대부분 직접 기능을 만들어야 합니다. 아래 두 코드는 tcp 서버를 C와 Python 3에서 구현한 예시입니다.
•
메모리 관리: C언어는 포인터를 이용해 메모리를 직접 관리해야 하는 반면 Python은 Garbage Collection이라는 기능이 있어 사용자가 메모리에 관여를 하지 않아도 잘 작동합니다. 이는 양날의 검이라 할 수 있는데요, C에서는 포인터를 이용해 코드를 최적화할 수 있지만 잘못 사용하면 오류가 발생할 수 있습니다.
종합하자면 C언어는 코드 실행 효율이 좋고 강력한 성능을 가졌기 때문에 시스템 프로그래밍, 임베디드 시스템, 게임 개발, 네트워크 프로그래밍 등 하드웨어와 밀접한 분야에서 많이 사용됩니다. 반면, 파이썬은 개발의 효율이 좋고 다양한 커뮤니티가 있어 데이터 분석, 인공지능, 웹 개발 등의 분야에서 주로 사용됩니다.
임베디드와 C언어
아래 내용은 Notion AI로 자동 생성되었습니다.
임베디드 시스템은 다양한 분야에서 사용되는데, 예를 들어 자동차, 가전제품, 의료기기, 산업용 로봇 등에서 사용됩니다. 이러한 임베디드 시스템은 작은 용량과 저전력 소비가 필요하므로, C언어와 같은 저수준 언어를 사용하여 개발됩니다. 또한, C언어는 하드웨어와 소통하기 쉽기 때문에, 이러한 임베디드 시스템에서 매우 중요한 역할을 합니다.
이러한 임베디드 시스템에서 C언어는 하드웨어와의 쉬운 연동성과 빠른 실행 속도, 그리고 작은 메모리 사용량으로 인해 매우 많은 사용자들에게 선호됩니다. 또한, C언어는 시스템의 성능을 최대한 끌어올리기 위해 하드웨어를 직접적으로 다룰 수 있는 저수준의 기능을 가지고 있습니다.
C언어는 하드웨어와의 상호작용이 용이하기 때문에, 센서와 모터 등의 하드웨어를 제어하는 임베디드 시스템 개발에 적합합니다. 또한, C언어는 높은 이식성을 가지고 있어서, 다양한 임베디드 시스템에서 사용할 수 있습니다.
요약하면, 임베디드 시스템에서 C언어는 하드웨어와의 쉬운 연동성과 빠른 실행 속도, 그리고 작은 메모리 사용량으로 인해 매우 중요한 역할을 합니다. 따라서 임베디드 시스템 개발을 공부하고자 하는 분들은 C언어를 꼭 학습해야 합니다.