GCC (GNU Compiler Collection)

Tabber·2026년 2월 1일

Swift

목록 보기
9/15
post-thumbnail

GCC?

GCC는 LLVM이 등장하기 전까지 오픈 소스 세계를 지배했던 절대강자이자, 현재까지도 리눅스 커널을 비롯한 수많은 시스템의 근간을 이루고 있는 컴파일러에요.

GCC의 정의와 위상

GCC는 1987년 리처드 스톨먼(Richard Stallman)이 GNU 프로젝트의 일환으로 만든 컴파일러에요.

  • 초기 의미 : GNU C Compiler (C언어만 지원)
  • 현재 의미 : GNU Compiler Collection (C, C++, Java, Fortran, Go 등 다양한 언어 지원)

GCC는 지난 수십 년간 표준 컴파일러로 군림하며 “가장 신뢰할 수 있고, 거의 모든 하드웨어 아키텍처를 지원하는 컴파일러” 라는 명성을 쌓아왔습니다.

GCC의 구조적 특징 - “결합된 구조(Monolithic)”

LLVM이 각 단계를 모듈화하여 떼었다 붙였다 할 수 있는 ‘레고 블록’ 같다면, GCC는 거대한 ‘한 덩어리’에 가까워요.

  • 강한 결합 : Frontend와 Backend가 밀접하게 연결되어 있어, 새로운 프로그래밍 언어를 추가하거나 새로운 CPU 아키텍처를 지원하려면 컴파일러의 핵심 로직을 깊숙이 건드려야 했어요.
  • 재사용의 어려움 : 컴파일러의 특정 기능(ex. 코드 분석 기능)만 따로 떼어내서 IDC(Xcode 등)의 자동 완성 기능에 활용하기가 매우 어려웠어요.

Apple은 왜 GCC를 버렸을까? (LLVM의 탄생 배경)

과거 Xcode 도 GCC를 사용했어요! 하지만 Apple 은 다음과 같은 치명적인 한계에 부딪혔어요.

  1. 컴파일 속도와 메모리 효율

Objective-C의 복잡한 문법을 GCC로 처리하기엔 너무 무거웠고, 컴파일 속도가 개발자들의 인내심을 시험할 정도로 느려졌어요.

  1. IDE와의 연동 문제 (가장 결정적인 이유에요.)

개발자가 코드를 칠 때 실시간으로 에러를 잡아주는 ‘Syntax Highlighting’이나 ‘Code Completion’ 기능이 필요했어요. 하지만 GCC는 설계상 컴파일러 내부의 정보를 외부 도구(Xcode)에 실시간으로 공유하기가 매우 까다로웠어요.

  1. 라이선스 문제 (GPL v3)

GCC의 라이선스인 GPL(General Public License)은 코드를 수정하면 수정한 코드를 공개해야 할 의무가 생기는 경우가 많아요. 기업인 Apple 입장에서는 자사의 최적화 기술이나 보안 관련 코드를 강제로 공개해야하는 상황이 부담스러웠어요. (반면 LLVM은 훨씬 자유로운 Apache 2.0/MIT 라이선스를 따르고 있어요.)

GCC vs LLVM 한눈에 비교

구분GCCLLVM (+ Clang)
철학하나의 거대한 완성된 도구조립 가능한 라이브러리 형태
확장성새로운 언어/아키텍처 추가가 어려움매우 쉬움 (Swift 탄생의 기반)
컴파일 속도상대적으로 느림최적화 단계가 효율적이고 빠름
에러 메시지난해하고 불친절함개발자가 이해하기 쉽고 정확함
주요 사용자리눅스 커널, 임베디드 시스템Apple, Google(Android), Rust 등
profile
iOS 정복중인 Tabber 입니다.

0개의 댓글