오늘부터 정보처리산업기사의 프로그래밍 언어 파트를 시작한다. 여기에는 절차지향 프로그래밍 언어인 C와 객체지향 언어인 Java, 그리고 컴파일 언어를 벗어난 스크립트 언어의 Python을 공부하게 된다.
나의 경우 C는 2021년 봄에 42서울 라피신 과정에서 간단한 shell과 C를 해본적이 있긴 하다. 그러나 제대로 해보진 않았기 때문에 그냥 초짜라고 생각해도 된다. 그 이후에는 회로나 네트워크와 관련된 공부를 더 많이 했으니... 최근에도 JavaScript 기반의 Vue.js나 React, 그리고 Python을 이용한 딥러닝 프로그래밍을 해본 것이 다이다. 어차피 C#과 Spring Boot도 해야 하기에 C와 Java도 공부하긴 해야 했다.
그렇다면 Java의 경우 뭘로 실습할지는 정하진 않았다. 전에 리액트를 하면서 IntelliJ를 사용해봤기에 그걸로 할까, C처럼 그냥 터미널에서 하나하나 해볼까 고민중이다. C의 경우 mac에서 제공하는 clang 컴파일러를 이용하여 컴파일한 후, 생성된 a.out파일을 실행해주면 원하는대로 작동하게 된다.
기본적으로 mac에서 x code command line을 설치했다면, 다음과 같이 컴파일러가 설치되어 있을 것이다. gcc나 clang의 버전을 먼저 확인해준다.
gcc --version
or
clang --version
macOS는 Apple LLVM 기반 clang을 기본 C 컴파일러로 채택하고 있기 때문에 gcc라고 입력해도 호환용 이름(alias)처럼 작동하여 Apple clang version 이런 식의 출력이 나오게 된다.
그렇다면 gcc와 clang이 무었일까? 앞서 말했듯 둘 다 컴파일러다. C나 Java는 컴파일러 언어라고 한다. 소스코드가 바로 실행되는 것이 아니라 컴파일을 거쳐 생성된 실행 파일을 실행하게 되는 것이다. 속도는 스크립트 언어보다 일반적으로 더 빠르지만, 개발 시 번거러움이 좀 발생한다고 한다. 우리가 대강 소스코드를 컴파일러에 넣어 실행파일을 만든다고 했지만, 뜯어보면 소스 코드(main.c) → 전처리 → 컴파일 → 어셈블 → 링크 → 실행 파일의 과정을 거치게 된다.
gcc는 GNU Compiler Collection의 약자로 리눅스 GNU에서 제공하는 컴파일러로, 소스 코드를 기계어로 변환하는 프로그램이다. clang은 LLVM 프로젝트의 컴파일러인 것이다. 근본적으로 큰 차이는 없다고 봐도 무방하다.
vi hello.c라고 작성하면 hello.c라는 파일을 생성하고 편집기로 진입하게 된다. i를 눌러 편집 모드로 변환하고 소스코드를 작성한다. 작성이 완료되었다면 esc를 누른 후, :wq를 작성한 후 엔터를 눌러주면 저장된다.
gcc hello.c or clang hello.c를 통해 컴파일을 해준다. 그러면 a.out이라는 기본 실행파일이 생성된다. 따로 지정해준 이름이 없기에 assembler output의미로 생성되는 파일인 것이다. gcc main.c -o test와 같이 output 옵션으로 이름을 지정해주면 test라는 이름의 실행파일이 생성된다.
./a.out과 같이 상대경로와 실행파일명을 적어주면 실행된다.