Programming language_study!/A,B,C! C언어_공부하기
C언어의 특징 및 장단점_ChatGPT와 공부하는 C언어
JayPotter
2024. 5. 21. 01:08
728x90
오늘은 프로그래밍 언어 기초인 C언어에 대해 공부를 할 거다.
C언어를 공부하기 전!
C언어의 특징들과 장단점에 대해 알아보고 C언어를 공부를 시작하도록 하겠다!
C언어의 주요 특징들!
- 저수준 언어: C는 어셈블리 언어와 고수준 언어 사이에 위치한 중간 수준 언어이다.
시스템 하드웨어와 가까운 저수준 작업을 수행할 수 있으면서도 고수준 언어의 장점도 제공한다. - 이식성: C로 작성된 프로그램은 다양한 하드웨어 플랫폼에서 컴파일러만 있으면 실행될 수 있다.
이는 C가 많은 운영 체제와 컴퓨터 아키텍처에서 사용되는 주요 이유 중 하나다. - 강력한 표준 라이브러리: C는 표준 라이브러리를 통해 다양한 기능을 제공한다.
파일 입출력, 문자열 처리, 메모리 관리 등 많은 기본적인 작업을 수행할 수 있는 함수들이 포함되어 있다. - 포인터와 메모리 관리: C는 포인터를 통해 메모리 주소를 직접 조작할 수 있는 강력한 기능을 제공한다.
이를 통해 효율적인 메모리 사용이 가능하지만, 동시에 메모리 누수나 버퍼 오버플로우 등의 문제가 발생할 수
있으므로 주의가 필요하다. - 함수 기반 구조: C는 함수 단위로 프로그램을 작성하는 구조적 프로그래밍을 지향한다.
이는 코드의 재사용성과 가독성을 높여준다. - 컴파일 언어: C는 컴파일러를 사용하여 소스 코드를 기계어로 변환하여 실행한다.
이는 프로그램 실행 속도를 빠르게 하며, 최적화된 기계어 코드를 생성할 수 있다. - 저수준 접근과 고수준 추상화: C는 하드웨어에 대한 저수준 접근을 허용하면서도,
다양한 자료형과 구조체를 통해 고수준의 데이터 추상화를 지원한다. - 유연성: C는 매우 유연한 언어로, 시스템 프로그래밍, 임베디드 시스템, 게임 개발, 운영 체제 개발 등
다양한 분야에서 사용된다.
C언어가 가지고 있는 장점들!
- 고성능: C는 컴파일러가 기계어로 직접 번역하여 실행되므로, 높은 성능을 제공한다.
이는 시스템 프로그래밍이나 임베디드 시스템과 같은 성능이 중요한 분야에서 유리하다. - 이식성: C로 작성된 코드가 다양한 플랫폼에서 쉽게 컴파일되고 실행될 수 있다.
이를 통해 코드의 재사용성과 호환성이 높다. - 풍부한 표준 라이브러리: C는 표준 라이브러리를 통해 많은 기본적인 기능을 제공하여,
프로그래머가 반복적인 작업을 쉽게 처리할 수 있게 한다. - 포인터와 직접 메모리 접근: 포인터를 사용하여 메모리 주소를 직접 조작할 수 있는 기능을 제공함으로써,
메모리 관리와 시스템 자원에 대한 세밀한 제어가 가능하다. - 모듈화와 코드 재사용: 함수 기반의 구조적 프로그래밍을 통해 코드의 모듈화를 촉진하고,
재사용 가능한 코드를 쉽게 작성할 수 있다. - 작고 효율적인 런타임: C 언어는 비교적 작은 런타임을 가지고 있어,
메모리 사용이 제한된 환경에서도 효율적으로 동작할 수 있다.
C언어가 가지고 있는 단점들!
- 메모리 관리의 복잡성: 프로그래머가 직접 메모리를 관리해야 하므로! 메모리 누수, 버퍼 오버플로우,
댕글링 포인터와 같은 오류가 발생할 가능성이 높다! - 안전성 문제: C는 타입 검사가 엄격하지 않으며, 포인터 조작을 통해 잘못된 메모리 접근이 쉽게 발생할 수 있다.
이는 보안 취약점으로 이어질 수 있다!(보안 취약 == 쉽게 열리는 현관...) - 표준 라이브러리의 한계: C 표준 라이브러리는 비교적 기본적인 기능만을 제공하며,
고급 기능을 구현하려면 많은 수작업이 필요하다..!(노동해라, 인간.) - 추상화 수준 낮음: 다른 고수준 언어에 비해 추상화 수준이 낮아,
복잡한 데이터를 다루기 어렵고 코드가 매우 길고 더러워질 수 있다! - 객체지향 프로그래밍 미지원: C는 객체지향 프로그래밍(OOP)을 직접적으로 지원하지 않으므로,
OOP 패러다임이 필요한 경우에는 C++와 같은 다른 언어를 고려해야 한다... - 디버깅 어려움: 포인터와 메모리 관련 버그는 디버깅이 매우 어려울 수 있다.
특히, 메모리 누수나 댕글링 포인터 문제는 찾기 어렵다..!
C언어 특징과 장단점들을 공부하면서 몰랐던 내용들.
- 저수준 언어: 하드웨어와 가까운 수준에서 작동하며, 메모리와 프로세서 같은 시스템 자원에
직접 접근할 수 있는 언어(예: 어셈블리어). - 고수준 언어: 사람에게 친숙한 문법(한글 문법 혹은 영어 문법)을 사용하고, 하드웨어보다는 논리적이고
추상적인 개념을 더 많이 다루는 언어 (예: Python, Java). - 컴파일러: 소스 코드를 기계어 또는 중간 코드로 변환하여 실행 가능한 프로그램을 만드는 도구.
- 컴퓨터 아키텍처: 컴퓨터 시스템의 구조와 동작 원리를 정의하는 설계 개념 및 원리.
- 라이브러리: 자주 사용되는 함수나 클래스의 집합으로, 개발자가 재사용할 수 있도록 모아 놓은 코드 묶음.
- 메모리 누수: 프로그램이 더 이상 사용하지 않는 메모리를 해제하지 않아,
점차적으로 사용 가능한 메모리가 줄어드는 현상.(저장공간이 줄어드는 거..) - 버퍼 오버플로우: 프로그램이 버퍼의 경계를 넘어서 데이터를 쓰는 현상으로,
이는 메모리 손상이나 보안 취약점을 초래할 수 있음. - 구조적 프로그래밍: 함수와 블록 구조를 사용하여 프로그램을 체계적으로 작성하는 프로그래밍 패러다임.
- 기계어: CPU가 직접 실행할 수 있는 바이너리 코드.
- 데이터 추상화: 데이터의 복잡한 세부 사항을 숨기고, 사용자에게 간단한 인터페이스만을 제공하는 것.
- 시스템 프로그래밍: 운영 체제, 드라이버, 임베디드 시스템과 같은 시스템 소프트웨어를 개발하는 프로그래밍.
- 임베디드 시스템: 특정 기능을 수행하기 위해 독립적으로 설계된 전자 시스템 (예: 가전제품, 자동차의 제어 시스템).
- 포인터: 다른 변수나 메모리 주소를 가리키는 변수.
- 메모리 주소: 컴퓨터 메모리 내의 특정 위치를 식별하는 값.
- 모듈화: 프로그램을 독립적인 모듈로 나누어 관리하고 개발하는 방법.
- 런타임: 프로그램이 실행되는 동안의 시간.
- 댕글링 포인터: 참조하던 메모리가 해제된 후에도 해당 메모리를 가리키고 있는 포인터.
- 객체지향 프로그래밍: 객체와 클래스 개념을 사용하여 데이터를 구조화하고,
상속, 다형성, 캡슐화 등을 지원하는 프로그래밍 패러다임. - 디버깅: 프로그램의 오류를 찾고 수정하는 과정.
ChatGPT와 C언어 특징과 장단점들을 공부했는데요.
생각보다. 배워야 할 개념들이 많다는 걸 느꼈습니다..(IT는 어려워..)
하지만 ChatGPT를 활용하여 쉽게 이해하고 배우며 모르는 개념과 단어들을 찾아보면서
재미있게 공부했습니다!
이렇게 저는 책과 인터넷, ChatGPT를 활용하여 C언어를 공부할 겁니다!
여러분들에게도 이 내용이 도움 됐으면 좋겠습니다! 감사합니다! POW!
<여기도 구경하고 가세요!>
https://www.youtube.com/watch?v=PIaqUGb_xCA
반응형