UNIT 76 심사문제 질문입니다.
, Unknown Lastname 도작사님이 작성#define PLATFORM_UNKNOWN 0 #define PLATFORM_IOS 1 #define PLATFORM_ANDROID 2 #define PLATFORM_WIN32 3 #define PLATFORM_LINUX 4 #define PLATFORM_MAC 5
에서 각 매크로 옆에 숫자의 의미가 궁금합니다.
76 첫번째 심사문제 중에#if TARGET_PLATFORM == LINUX 상태에서 #define LINUX , #define MAC을 선언하면 #define printf가 컴파일 되고,#if TARGET_PLATFORM == MAC 상태에서 #define LINUX , #define MAC을 동시에 선언하면 #define printf printf가 컴파일 되는데 이 원리가 궁금합니다...
그리고 #define printf 가 printf를 사용못하게 하는 매크로, #define printf printf가 printf를 사용 가능하게 하는 매크로라고 설명이 되어있는데, 원리가 잘 이해가 되지 않습니다...
Re: UNIT 76 심사문제 질문입니다.
, 도장_ 관리자님이 작성UNIT 75, 76 본문을 천천히 복습하는 게 좋을 것 같습니다.
숫자에는 아무 의미가 없습니다. 숫자는 겹치지 않으면 됩니다.
if(platform == 1) {
printf("Windows\n");
}
else if(platform == 2) {
printf("Mac OS\n");
}
else if(platform == 3) {
printf("Linux\n");
}
else if(platform == 4) {
printf("Android\n");
}
else if(platform == 5) {
printf("iOS\n");
}
else {
printf("Unknown OS\n");
}
이렇게 작성하면 숫자의 의미가 암호가 되어 버립니다. 숫자가 4일 때는 안드로이드라는 것을 암기해야 합니다.
#define PLATFORM_WINDOWS 1
#define PLATFORM_MACOS 2
#define PLATFORM_LINUX 3
#define PLATFORM_ANDROID 4
#define PLATFORM_IOS 5
if (platform == PLATFORM_WINDOWS) {
printf("Windows\n");
}
else if (platform == PLATFORM_MACOS) {
printf("Mac OS\n");
}
else if (platform == PLATFORM_LINUX) {
printf("Linux\n");
}
else if (platform == PLATFORM_ANDROID) {
printf("Android\n");
}
else if (platform == PLATFORM_IOS) {
printf("iOS\n");
}
else {
printf("Unknown OS\n");
}
이렇게 정의하면 코드도 읽기 쉬워지고 직관적이 됩니다.숫자 4가 아니라 PLATFORM_ANDROID라고 쓰는 것이 좋습니다.
숫자 값은 내부에서 바뀌어도 코드를 수정할 필요는 없어집니다.
숫자로 쓰면 회사의 구성원들은 숫자 4는 ANDROID라고 알고 있지만,
신규 직원이 들어와서 이러한 코드 약속을 모르기 때문에 코드만 보고
4는 리눅스인가? 라고 생각하고 작성할 수도 있습니다.
#define PLATFORM_WINDOWS 1
#define PLATFORM_MACOS 1
#define PLATFORM_LINUX 1
#define PLATFORM_ANDROID 1
#define PLATFORM_IOS 1
이렇게 모든 상수를 1로 통일하면 if문이 무력화됩니다. 아무 쓸모가 없습니다.
그래서 숫자가 중복되지 않게 정의할 뿐입니다.
#if TARGET_PLATFORM == PLATFORM_LINUX #define printf printf #define fprint fprintf #else #define printf #define fprintf #endif이건 매크로 #if, #else 이용을 묻는 것입니다. 매크로로 정의한 원칙일 뿐이지 C 언어나 표준 라이브러리의 원칙이 아닙니다.
플랫폼에 따라 호출할 함수가 다른 일은 흔하고 이러한 매크로 작성은 매우 흔합니다.
자바에서 UI는 중립적인 자바 코드로 작성하지만, 자바가 실행되는 환경이 윈도, 리눅스, 맥OS이냐에 따라 실제로 선을 그리는 함수는 각각 달라집니다. 실제 운영체제/하드웨어의 선을 그리는 기능을 호출해야 하겠지요.
자바에서 drawLine() 메서드를 작성했다면, 윈도 환경에서 실행된다면 Win32 API인 LineTo() 메서드를 호출해야만 선을 그릴 수 있습니다. 윈도는 자바를 이해하지 못합니다.
리눅스라면 X-Windows 환경이고 Xlib 기반이니 XDrawLine() 함수를 호출해야 선을 그릴 수 있습니다.
따라서 실제로 시스템 레벨에서 프로그래밍을 한다면 추상적인 레벨에서 draw_line() 함수를 출력했든, printf() 함수를 출력했든, 실제 운영체제에서 제공하는 API를 호출해야 선을 그릴 수 있고, 문자를 출력할 수 있습니다. 이런 건 운영체제 자체를 만드는 과정이니 이에 대한 책을 보면 됩니다. <밑바닥부터 만드는 컴퓨팅 시스템> 같은 책도 있고, 운영체제 만들기 관련 책도 출간되어 있습니다. 단, 자동차 공학과 엔진을 이해하는 사람은 단 한 명도 없으며, 그럼에도 대한민국에는 매일 천만 대 이상의 차가 돌아다니고, 사람들은 운전을 하고 있습니다. 바꿔말하면 학습자의 취업 가치와는 아무 상관 없는 공부라는 뜻입니다. 그냥 정말 좋아서 취미로 할 사람만 하면 되는 게 운영체제 만들기입니다.
리눅스라면 X-Windows 환경이고 Xlib 기반이니 XDrawLine() 함수를 호출해야 선을 그릴 수 있습니다.
따라서 실제로 시스템 레벨에서 프로그래밍을 한다면 추상적인 레벨에서 draw_line() 함수를 출력했든, printf() 함수를 출력했든, 실제 운영체제에서 제공하는 API를 호출해야 선을 그릴 수 있고, 문자를 출력할 수 있습니다. 이런 건 운영체제 자체를 만드는 과정이니 이에 대한 책을 보면 됩니다. <밑바닥부터 만드는 컴퓨팅 시스템> 같은 책도 있고, 운영체제 만들기 관련 책도 출간되어 있습니다. 단, 자동차 공학과 엔진을 이해하는 사람은 단 한 명도 없으며, 그럼에도 대한민국에는 매일 천만 대 이상의 차가 돌아다니고, 사람들은 운전을 하고 있습니다. 바꿔말하면 학습자의 취업 가치와는 아무 상관 없는 공부라는 뜻입니다. 그냥 정말 좋아서 취미로 할 사람만 하면 되는 게 운영체제 만들기입니다.
운전면허 시험에 합격하려면 운전만 할 줄 알면 되는데, 자동차 차동 기어를 공부하면 합격은 영원히 못하겠지요.
심지어 전기차는 차동 기어가 필요하지 않습니다.
프로그래밍 업계에 깊이 알면 좋다는 쓸데없는 미신이 있는데, 자신이 하는 일에 대해서 깊이 알아야 할 필요가 있을 때 필요한 만큼만 공부하는 게 핵심입니다.
아마존 AWS 가상화 서비스 사용한다고 하지만, C 언어로 하드웨어 하이퍼바이저 코드 작성하고 그거 접근해서 가상화 서비스 컨테이너 직접 만들 줄 아는 사람은 거의 없습니다.
인공지능도 마찬가지입니다. 밑바닥부터 인공지능 코딩해서 할 수 있는 사람은 없습니다. 대부분은 데이터 가공하고 텐서플로 가져다가 머신 러닝 돌리는 게 전부입니다. 텐서플로 같은 머신 러닝 엔진 자체를 만들 수 있는 사람은 박사급 이상이고, 국내에도 거의 없습니다. 인공지능 AI 그림도 마찬가지, 글쓰기도 마찬가지입니다. 허깅페이스에서 이미 잘 만들어진 모델이 이미 14만 7천개가 있습니다. 대한민국 현업들 지난 2-3년 모델 구축한다고 그래픽 카드, 머신러닝 개인이 구축한다고 600만원씩 장비 맞춰도 모델 하나 제대로 못 만들고, 이미 전 세계 대학교에서 언어 모델 AI 보유하고 있는 건 스탠퍼드였나, 미국 대학에 하나, 중국 칭화대에 하나입니다. 한 번 학습에 50억씩 들어가는데? 이거 잘못되었네? 다시 학습 3주 돌려보자. 해도 50억 또 들어가는데요?
이미 LLM 대규모 언어 모델도 잘 만들어진 모델 가져다가 쓰고, 여기에 자기 회사 데이터 조금 학습시켜서 결과물 뽑아내는 것만 합니다. 윗단에 응용만 하는 겁니다.
전 세계에서 자동차 엔진 직접 만드는 회사 몇 없었습니다. 한국도 현대차가 일본 엔진 가져다 쓰다가 조금 개발해본 게 세타 엔진이죠. 2004년부터 만든 겁니다. 이제 전기차 시대라서 이 세타 엔진도 필요없습니다.
인공지능도 마찬가지입니다. 밑바닥부터 인공지능 코딩해서 할 수 있는 사람은 없습니다. 대부분은 데이터 가공하고 텐서플로 가져다가 머신 러닝 돌리는 게 전부입니다. 텐서플로 같은 머신 러닝 엔진 자체를 만들 수 있는 사람은 박사급 이상이고, 국내에도 거의 없습니다. 인공지능 AI 그림도 마찬가지, 글쓰기도 마찬가지입니다. 허깅페이스에서 이미 잘 만들어진 모델이 이미 14만 7천개가 있습니다. 대한민국 현업들 지난 2-3년 모델 구축한다고 그래픽 카드, 머신러닝 개인이 구축한다고 600만원씩 장비 맞춰도 모델 하나 제대로 못 만들고, 이미 전 세계 대학교에서 언어 모델 AI 보유하고 있는 건 스탠퍼드였나, 미국 대학에 하나, 중국 칭화대에 하나입니다. 한 번 학습에 50억씩 들어가는데? 이거 잘못되었네? 다시 학습 3주 돌려보자. 해도 50억 또 들어가는데요?
이미 LLM 대규모 언어 모델도 잘 만들어진 모델 가져다가 쓰고, 여기에 자기 회사 데이터 조금 학습시켜서 결과물 뽑아내는 것만 합니다. 윗단에 응용만 하는 겁니다.
전 세계에서 자동차 엔진 직접 만드는 회사 몇 없었습니다. 한국도 현대차가 일본 엔진 가져다 쓰다가 조금 개발해본 게 세타 엔진이죠. 2004년부터 만든 겁니다. 이제 전기차 시대라서 이 세타 엔진도 필요없습니다.
지금 당장 LLM 경량 모델 받아서 노트북에 설치해서 GPU가 없어도 CPU 100% 사용해도 돌리면 문장 이해하고 문장으로 대답하고, 코드도 작성해줍니다. 이 모델을 직접 만들 필요가 없어요(모델 만드는 비용 50억 단위가 한 번 학습인데 누가 돈 줘요?).
적당히 학습하고 넘어가세요. 숫자 1, 2, 3, 4의 의미가 여기서 뭐야 같은 거 고민하지 마세요. 그냥 넘어가세요.
#if 이해 안 되면 넘어가세요. 이런 게 있네... 하면 됩니다. 어차피 C 언어로 밥벌이 하는 사람이 아니면 쓸 일이 많지 않습니다. 어차피 실무에서 C 언어 쓰게 되면 매일 쓰게 되고, 적당히 사수에게 까이면서 배우면 됩니다. 평생 C 언어로 밥벌이할 사람은 대한민국에도 거의 없습니다. 웹 앱, 웹 프로그래밍, 프런트 엔드이니 자바스크립트하고 있습니다. 게임이면 C#, C++이고, SI쪽이면 자바가 메인이죠.
C 언어는 임베디드, 하드웨어 제어인데 요즘은 다 안드로이드 기반입니다. TV에 뭐 들어가요? 안드로이드 들어갑니다. 자바 기반이죠. 그 밑단에 하드웨어 건드리는 C는 잘 안 합니다. 정말 특수 용도 아니면 이걸로 밥벌이 할 가능성이 거의 없습니다.
학교가 컴공이면 선배들 취업해서 어떤 언어 쓰나 조사해보세요.
UNIT 76까지 했으면 많이 공부한 겁니다. 책 끝까지 공부 안 해도 이 정도면 다른 책, 다른 언어로 넘어가도 됩니다.
C 언어는 임베디드, 하드웨어 제어인데 요즘은 다 안드로이드 기반입니다. TV에 뭐 들어가요? 안드로이드 들어갑니다. 자바 기반이죠. 그 밑단에 하드웨어 건드리는 C는 잘 안 합니다. 정말 특수 용도 아니면 이걸로 밥벌이 할 가능성이 거의 없습니다.
학교가 컴공이면 선배들 취업해서 어떤 언어 쓰나 조사해보세요.
UNIT 76까지 했으면 많이 공부한 겁니다. 책 끝까지 공부 안 해도 이 정도면 다른 책, 다른 언어로 넘어가도 됩니다.
평생 차동 기관, 자동차 엔진 연구한 현대차 연구소 박사들보다
전기차 테슬라 만들고 창업한 일론 머스크가 더 칭송받고, 더 부자입니다.
내연기관차 생산은 2035년 이후엔 전 세계 거의 대부분의 자동차 업체가 판매 중단합니다. 사라지는 내연 기관 엔진 연구?
C 언어는 운영체제 개발 영역에만 남아있습니다. 미국 마이크로소프트 취업해서 윈도 운영체제 개발하는 것이요. 근데 요즘은 Rust로 대체하는 중입니다. Rust 공부하는 게 더 낫습니다. 목적하는 진료가 이쪽이라면 말이죠.
C 언어는 운영체제 개발 영역에만 남아있습니다. 미국 마이크로소프트 취업해서 윈도 운영체제 개발하는 것이요. 근데 요즘은 Rust로 대체하는 중입니다. Rust 공부하는 게 더 낫습니다. 목적하는 진료가 이쪽이라면 말이죠.
일론 머스크는 내연 기관 엔진도 모르고, 차동 기관도 모릅니다.
뭘 깊이 알아야 한다는 강박은 버리세요. 여기 답변에도 여러 차례 다른 분들의 질문에도 썼지만, 방향이 중요합니다.
방향을 잡으세요. 인기 언어는 입문서 다 공부하고, 파이썬, 자바, C/C++, 자바스크립트. 각각을 맛만 보고, 네카라쿠배가 목표면 거기는 알고리즘 코딩 테스트로 사람 뽑아서 필요한 직무 스킬은 직접 가르친다 주의이니까 알고리즘 백준온라인 가서 열심히 문제풀이하면 됩니다.
네카라쿠배 취업하는 애들도 당연히 SKY 애들 위주입니다. 똑똑한 애들이 알고리즘 문제 풀이도 더 잘 할거고, 입사해서 리액트 가르치면 쭉쭉 흡수해서 실무에 쓸 수 있을 거고... 기초 능력 좋은 애들 뽑아서 가르치면 된다가 돈 많은 회사가 할 수 있는 사치입니다.
네카라쿠배 취업하는 애들도 당연히 SKY 애들 위주입니다. 똑똑한 애들이 알고리즘 문제 풀이도 더 잘 할거고, 입사해서 리액트 가르치면 쭉쭉 흡수해서 실무에 쓸 수 있을 거고... 기초 능력 좋은 애들 뽑아서 가르치면 된다가 돈 많은 회사가 할 수 있는 사치입니다.
스타트업은 지금 당장 필요한 전력이니까
나는 네카라쿠배 준비하는 SKY 애들하고 알고리즘 코딩 테스트 대결해서 질 거 같다, 그러면 스타트업에서 당장 먹히는 리액트 배우고, 그쪽에서 코딩하면서 실력을 쌓아볼래 하는 것도 방향입니다. 흔히 말하는 부트캠프지만, 2000년에는 IT 코딩 학원 6개월 출신이라고 비하하고 깔보고 무시하던 그런 인식이 있지만, 잘 하는 사람은 알아서 열심히 공부해서 잘 하고, 20여년 지난 지금 교수하는 분도 있습니다. 컴공 출신 아니어도 서울대 출강하는 겸임교수도 있고, 전임 교수도 있습니다. 다 서울대 컴공 아님. 컴공 자체도 아님. 학부도 전혀전혀 다른 곳임. 언급하면 인물 특정되니까 생략합시다.
숫자 1,2,3,4의 의미가 뭐냐 고민하지 말고,
인생의 방향을 고민하세요.