본문 바로가기
📚 STUDY/🔥 C

[1-2] 장점과 단점

by 엄지잉 2024. 8. 21.
  • C의 본 용도는 OS 혹은 시스템 SW를 제작하는 것
  • C는 저급언어로, OS처럼 시스템을 제어하는 언어들은 바이트 단위와 메모리 주소값 등의 기계 수준 개념까지 다룰 수 있어야 함. (대부분 직접 제어하지 않고, 미리 짠 알고리즘에 의해 작동)
  • C는 작은 언어임. (다른 언어에 비해 매우 한정된 특징들을 제공함) ➡ 최대한 특징을 적게 갖고 있기 때문에, 표준 함수들로 이루어진 '라이브러리'에 매우 크게 의존함.
  • C는 관대한 언어임. 당신이 스스로 무엇을 하고 있는지 알고있다고 가정하기 때문에, 에러가 발생했을 때 구체적으로 무엇이 일어났는지에 대해 알려주지 않음.

 

📌 장점

1. 효율성

- C는 어셈블리어를 대체하기 위해 만들어졌기에, C언어로 짜인 프로그램들은 한정된 메모리 내에서 최대한 빨라야 했음.

 

2. 확장성

- 어떤 프로그램이 일반 가정집 컴퓨터이든, 슈퍼컴퓨터이든 다 실행되어야 했다면, 대부분은 C언어를 이용해 프로그래밍됨.

- 확장성이 좋은 이유 중 하나는 C가 초창기에 UNIX와 관련이 있었기 때문이고, 후에 ANSI와 ISO에 의해 규격화되었기에 여러 가지로 나뉘지 않았기 때문임. + C 컴파일러들은 상대적으로 규모가 작고, 프로그래밍하기도 쉬움.

 

3. 강력함

- C의 다양한 자료형, 연산자들은 C를 강력한 언어로 만들어줌.

 

4. 유연성

- C는 시스템 프로그램, 임베디드 시스템, 상업적인 데이터 처리 등 온갖 애플리케이션 제작에 사용됨.

- 다른 언어에서 허용되지 않는 기능이 C에서는 대부분 허용됨. (ex, C는 한 문자가 정숫값이나 실숫값에 추가될 수 있게 허용함)

 

5. 표준 라이브러리

- 인풋/아웃풋, 문자열 처리, 메모리 할당 등 여러가지 유용한 함수 수백가지를 가진 저장고

 

6. UNIX와의 통합

- UNIX, Linux와 만났을 때 최고의 호흡을 보임.

 

📌 단점

1. 에러나기가 쉬울 수 있음.

- 유연성의 이면. 실행하기 전까지 에러가 있는지 없는지 모름.

 

2. 이해하기 어려울 수 있음.

- 다른 언어에는 없는 기능이 있고, 이런 기능들이 잘못 이해하는 경우가 많음. (원작자는 ㄱㅊ, 타인은 이해 어려울수도)

 

3. 수정하기 어려울 수 있음.

- C로 짜인 규모가 큰 프로그램들은 유지보수할 생각으로 만든 것이 아니라면, 수정하기 매우 어려움. (최근에 나오는 언어들은 주로 클래스, 패키지 같은 큰 프로그램을 여러 단위로 나누어 관리하기 쉽게 만드는데 C에는 그런 기능❌)

 

📌 C를 효과적으로 사용하는 법 (장점은 살리되, 단점은 피하자.)

1. 실수를 줄이는 방법을 익히자.

 

2. SW 도구를 사용하자.

- 제일 유명한 C 도구 중 하나는 lint임. 다른 유용한 도구는 디버거임. C 프로그래밍하는 사람에게는 필수.

 

3. 코드 라이브러리들을 활용해 코드를 안정화하자.

- 하도 많은 사람들이 사용해 그들이 미리 짜놓은 코드가 존재, 이를 활용할 수 있음.

- 좋은 라이브러리는 에러 줄이는데 도움이 되고, 시간이 절약됨.

- 자주 사용되는 라이브러리 : UI 개발, 그래픽, 커뮤니케이션, DB 관리, 네트워크 등 ..

 

4. 실용적인 코딩 버릇을 들이자.

- 코딩할 때의 스타일은 스스로 습득하게 되는 것임. 버릇을 잘 들인다면, 프로그램이 좀 더 탄탄하고 읽기 쉬우며, 유지보수하기 손쉬움. C는 특히 더 중요함!

 

5. 허세 부리지 말고, 코드는 간결하게 하자.

- 최대한 간결하면서 가독성 있는 방식으로 사용하자. 너무 짧게 쓰면 오히려 독이 됨.

 

6. 표준을 지키자.

- 대부분의 C 컴파일러는 C89나 C99에 속하지 않는 새로운 C언어의 기능이나 라이브러리를 지원함. 하지만, 확장성을 위해선 최대한 이런 새로운 기능은 정말로 필요하지 않는 이상 지양하는 것이 좋음.

 

 

💡 본 내용은 K.N.King의 C Programming: A Modern Approach 책을 참고하였습니다.

'📚 STUDY > 🔥 C' 카테고리의 다른 글

[2-3] 주석  (0) 2024.08.22
[2-2] 간단한 프로그램의 일반적인 구조  (0) 2024.08.22
[2-1] 간단한 프로그램 짜기  (0) 2024.08.22
Q&A (lint에 관하여)  (2) 2024.08.21
[1-1] C의 역사  (2) 2024.08.21