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

 

반응형