| description | ๊ณ ์์ค ์ธ์ด์ ์ ์์ค ์ธ์ด ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์ ๋น๊ต |
|---|
์ฐ๋ฆฌ๋ ์ง๋ ์ฅ๊น์ง ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ง์น ๊ณ ์ฐจ์์ ๊ฐ์ ์ปดํจํฐ์ฒ๋ผ ๋ฐ๋ผ๋ดค์ด์.
{% hint style="success" %}
์ฆ, ๋ธ๋ผ์ฐ์ ๋ HTML, CSS, JavaScript ๋ฑ '๋ช
๋ น์ด'๋ฅผ ๋ฐ์์ DOM(Document Object Model)์ ์กฐ์ํ๋ ๊ตฌ์กฐ์
๋๋ค.
{% endhint %}
- DOM API
- ์ด๋ฒคํธ ํธ๋ค๋ฌ
- Ajax / Fetch ๋ฑ ํต์ API
์ด๋ฌํ ๊ณ ์์ค API๋ ์ด์์ฒด์ ์ I/O ์ฅ์น์ ๋ณต์ก์ฑ์ ๊ฐ์ถฐ์ค๋๋ค.
๊ทธ๋ผ ์ด๋ฒ ์ฅ์์๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๊ฐ์ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๋ฉด ์ด๋ป๊ฒ ๋ค๋ฅผ์ง ์ง์ ๋น๊ตํด ๋ด ์๋ค.
[์ฌ์ฉ์ ์ธํฐ๋์
ํ๋ก๊ทธ๋จ ๊ตฌ์กฐ ๋น๊ต]
ํ๋ก๊ทธ๋จ A (๊ณ ์์ค)
โโ ์น ๋ธ๋ผ์ฐ์ (DOM, JS๋ก ์ ์ด)
โโ ์ด์์ฒด์
โโ I/O ์ฅ์น (ํค๋ณด๋, ํ๋ฉด ๋ฑ)
ํ๋ก๊ทธ๋จ B (์ ์์ค)
โโ ์ง์ OS API ํธ์ถ (์: C ์ธ์ด)
โโ ์ด์์ฒด์
โโ I/O ์ฅ์น
๐ ์น ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฐ์ ์ฌ์ฉ์๊ฐ ๋ค๋ฃจ๊ธฐ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
๐ ์์คํ
์์ค ํ๋ก๊ทธ๋๋ฐ(C ์ธ์ด ๋ฑ)์ ํ๋์จ์ด์ OS ๋์์ ๋ ์ ํํ ์ดํดํ๊ณ ์ ์ดํ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ๋ง๋ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉ์๊ฐ ์๊ฐํ ๋๋ฌผ์ ์ปดํจํฐ๊ฐ ์ง๋ฌธ์ ํตํด ์ถ์ธกํ๋ ๊ฐ๋จํ ์ง์ ๊ธฐ๋ฐ ๊ฒ์์ ๋๋ค.
์ปดํจํฐ: ๋๋ฌผ์ ์๊ฐํด๋ณด์ธ์.
์ปดํจํฐ: ๋๋ฌผ์ด ์ง์ต๋๊น?
์ฌ์ฉ์: ์
์ปดํจํฐ: ๊ฐ์
๋๊น?
์ฌ์ฉ์: ์๋์
์ปดํจํฐ: ์ก์ต๋๋ค. ๋ฌด์จ ๋๋ฌผ์
๋๊น?
์ฌ์ฉ์: ์ผ๋ฅด๋ฒ ๋ก์ค
์ปดํจํฐ: "๋จธ๋ฆฌ๊ฐ 3๊ฐ์
๋๊น?" ๋ผ๋ ์ง๋ฌธ์ผ๋ก ๊ตฌ๋ถํ๊ฒ ์ต๋๋ค.
- ์ง๋ฌธ์ ํตํด ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ผ ๋ด๋ ค๊ฐ
- ์(Leaf) ๋ ธ๋์ ๋๋ฌํ๋ฉด ๋๋ฌผ์ ์ถ์ธก
- ์ถ์ธก ์คํจ ์ ์๋ก์ด ๋๋ฌผ๊ณผ ์ง๋ฌธ์ ๋ฐ์ ํธ๋ฆฌ ํ์ฅ
- ๋ค์ ๋ผ์ด๋๋ถํฐ๋ ๋ ๋๋ํด์ง (ํ์ตํจ)
๊ทธ๋ฆผ์ ๋ณด๋ฉด ๋๋ฌผ์ ๋ํ ์ง์์ผ๋ก ์ด๋ค์ง ํธ๋ฆฌ๋ฅผ ๋ฐ๋ผ ๋ด๋ ค๊ฐ๋, ์ง๋ฌธ์ ๋์ง๋ฉด์ ์ด๋ ๊ฒฝ๋ก๋ก ๋ด๋ ค๊ฐ์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
- ์ ๋๋ก ๋๋ฌผ์ ์ถ์ธกํ๋ฉด ๊ธฐ๋ปํ๋ค.
- ๋๋ฌผ์ ๋งํ์ง ๋ชปํ๋ฉด ์ฌ์ฉ์์๊ฒ ์ ๋ต์ ๋ฌผ์ด๋ณธ ํ ํด๋น ๋๋ฌผ์ ๋ง์ง๋ง์ ํ์ธํ ๋๋ฌผ๊ณผ ๊ตฌ๋ถํ๋ ๋ฐ ํ์ํ ์ง๋ฌธ์ ์์ฒญํด์, ๊ทธ ์ ๋ณด๋ฅผ ํธ๋ฆฌ์ ์ถ๊ฐํ๊ณ ์ฒ์๋ถํฐ ๋ค์ ์์ํ๋ค.
์ด ํ๋ก๊ทธ๋จ์ (์์๋์ ์ผ์ชฝ์์) ์ง์ ํธ๋ฆฌ๋ฅผ ๋ฐ๋ผ ๋ด๋ ค๊ฐ๋ฉด์ ์ง๋ฌธ์ ๋์ง๊ณ ๋ต์ ์ป์ต๋๋ค.
์ค๋ฅธ์ชฝ์์ ๊ฒฝ๋ก์ ๋์ ๋๋ฌํ๋ฉด ๋ต์ ๋งํ๋์ง ์ฌ๋ถ์ ๋ฐ๋ผ ์๋ ์ฒด๋ฅผ ํ๊ฑฐ๋ ๋๋ฌผ์ ๋ํ ์ง ์์ ์ง์ ๊ธฐ๋ฐknowledge base์ ์ถ๊ฐํฉ๋๋ค.
์ด ์์๋๋ฅผ ์ฝ๋๋ก ๋ฐ๊พธ๋ฉด ์๋์ ๊ฐ์ ํ๋ฆ์ด ๋ฉ๋๋ค:
if (isLeaf(node)) {
if (userAnswer === node.answer) {
alert("๋ง์ท์ต๋๋ค!");
} else {
learnNewAnimal();
}
} else {
if (userAnswer === "์") {
node = node.yes;
} else {
node = node.no;
}
}| ๊ตฌ๋ถ | ์ ํ๋ฆฌ์ผ์ด์ ์์ค (JS/์น) | ์์คํ ์์ค (C/์ฝ์) |
|---|---|---|
| ์ฌ์ฉ์ ์ธํฐํ์ด์ค | HTML + CSS + DOM ์กฐ์ | ์ฝ์ ์ถ๋ ฅ, scanf/printf |
| ๋ฐ์ดํฐ ์ ์ฅ | LocalStorage, ์๋ฒ | ํ์ผ I/O, ๋ฉ๋ชจ๋ฆฌ ์ง์ ์ ์ด |
| ์ ๋ ฅ ์ฒ๋ฆฌ | prompt, click ์ด๋ฒคํธ |
scanf, getchar() ๋ฑ |
| ํ์ฅ์ฑ | ๋น ๋ฅด๊ณ ์ง๊ด์ | ๋ณต์กํ์ง๋ง ๊ฐ๋ ฅํจ |
์น ๋ธ๋ผ์ฐ์ ๋ ์ด๋ฏธ ๋ง์ ๊ธฐ๋ฅ์ด ์ถ์ํ๋์ด ์์ง๋ง, ์์คํ ํ๋ก๊ทธ๋๋ฐ์ ๋ฉ๋ชจ๋ฆฌ, ํ์ผ, ๋ฒํผ ๋ฑ ์ธ์ธํ ๋ถ๋ถ๊น์ง ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.
์์ ์์ฒญํ์ ์์ ํ๋ฆ๋๋ ์๋์ ๊ฐ์ด ์ด์ด์ง๋๋ค.
graph LR
A[ํ๋ก ํธ์๋: ์
๋ ฅํผ] --> B[JSON ์์ฑ]
B --> C[API๋ก ์๋ฒ ์ ์ก]
C --> D[DB์ ์ ์ฅ (์: MongoDB)]
D --> E[API๋ก ํด๋ผ์ด์ธํธ์ ์ฌ์ ์ก]
E --> F[ํ๋ก ํธ์๋ ๋ ๋๋ง (React, Vue)]
โ ์ด ํ๋ฆ์ ํ๋์ ์ธ SPA ํ๋ ์์ํฌ์์ CRUD ์ฒ๋ฆฌ์ ์ ํ์ ์ธ ๊ตฌ์กฐ์ ๋๋ค.
๋ธ๋ผ์ฐ์ ๊ฐ '์ปดํจํฐ ๊ฐ์ ํ๋ก๊ทธ๋จ'์ด๋ผ๋ ๋น์
๊ณ ์์ค ํ๋ก๊ทธ๋๋จธ๋ DOM API๋ง ์๋ฉด ๋์ง๋ง,
์์คํ ํ๋ก๊ทธ๋๋จธ๋ '๊ทธ ์๋'๊น์ง ๋ด์ผ ํฉ๋๋ค.
๋๋ฌผ ๋งํ๊ธฐ ๊ฒ์์ ์ง๋ฌธ์ ๋์ง๊ณ ๊ทธ์ ๋ฐ๋ผ ์/์๋์ค๋ก ๊ฐ์ง๋ฅผ ๋ป๋ ์ด์ง ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์:
์ง๋ฌธ: ๋๋ฌผ์ด ์ง์ต๋๊น?
โโ ์ โ ์ง๋ฌธ: ๋จธ๋ฆฌ๊ฐ 3๊ฐ์
๋๊น?
โ โโ ์ โ ์ผ๋ฅด๋ฒ ๋ก์ค
โ โโ ์๋์ โ ๊ฐ
โโ ์๋์ โ ๊ณ ์์ด
{
"question": "๋๋ฌผ์ด ์ง์ต๋๊น?",
"yes": {
"question": "๋จธ๋ฆฌ๊ฐ 3๊ฐ์
๋๊น?",
"yes": { "animal": "์ผ๋ฅด๋ฒ ๋ก์ค" },
"no": { "animal": "๊ฐ" }
},
"no": {
"animal": "๊ณ ์์ด"
}
}- ์ง๋ฌธ ๋
ธ๋๋
"question"ํค๋ฅผ ๊ฐ์ง - ๋๋ฌผ(์ ๋
ธ๋)์
"animal"ํค๋ง ์์ "yes","no"๋ก ์์ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Node {
int is_question; // 1์ด๋ฉด ์ง๋ฌธ, 0์ด๋ฉด ๋๋ฌผ
char text[128]; // ์ง๋ฌธ or ๋๋ฌผ ์ด๋ฆ
struct Node* yes; // ์ ๋ต๋ณ
struct Node* no; // ์๋์ ๋ต๋ณ
} Node;Node* create_animal(const char* name) {
Node* node = malloc(sizeof(Node));
node->is_question = 0;
strcpy(node->text, name);
node->yes = node->no = NULL;
return node;
}
Node* create_question(const char* question, Node* yes_node, Node* no_node) {
Node* node = malloc(sizeof(Node));
node->is_question = 1;
strcpy(node->text, question);
node->yes = yes_node;
node->no = no_node;
return node;
}| ํญ๋ชฉ | JSON ์ ์ฅ | C ๊ตฌ์กฐ์ฒด ํํ |
|---|---|---|
| ๋ ธ๋ ์๋ณ | "question" or "animal" |
is_question (1/0) |
| ์ง๋ฌธ ๋ด์ฉ | text ํ๋์ ์ ์ฅ |
char text[128] |
| ํ์ ๋ ธ๋ | "yes", "no" |
struct Node* yes, no |
| ์ถ๊ฐ ํ์ฅ์ฑ | ๊ตฌ์กฐ์ ์ผ๋ก ์ ์ฐํจ | ๋ฉ๋ชจ๋ฆฌ ์ง์ ํ ๋น ํ์ |
JSON ๊ตฌ์กฐ๋ ์น๊ณผ ์๋ฒ์์ ๋ค๋ฃจ๊ธฐ ์ข๊ณ ,
C ๊ตฌ์กฐ์ฒด๋ ์์คํ ์์ค์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ดํ ์ ์์ด ๊ฐ๋ ฅํฉ๋๋ค.
์น ๋ธ๋ผ์ฐ์ ๋ ๋ง์น ๊ณ ๊ธ ๋ฆฌ์กฐํธ์ฒ๋ผ ๋ชจ๋ ๊ฒ์ ๊ฐ์ถ ๊ณ ์์ค์ ํ๊ฒฝ์
๋๋ค. HTML, CSS, ์๋ฐ์คํฌ๋ฆฝํธ๋ง์ผ๋ก๋ ์ ์ ์ธํฐํ์ด์ค์ ์ํธ์์ฉ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๊ณ , onclick, alert, appendChild() ๊ฐ์ ๊ฐ๋จํ ์ฝ๋๋ง์ผ๋ก ๋ณต์กํ ๋์์ด ๊ฐ๋ฅํฉ๋๋ค.
ํ์ง๋งโฆ
์ด "๋ฆฌ์กฐํธ"์ ์๋์ธต์๋ ์ด๋ค ๋ ธ๋์๋ค์ด ํผ๋ ํ๋ฆฌ๋ฉฐ ์์คํ ์ ๊ตด๋ฆฌ๊ณ ์์๊น์?
์ฐ๋ฆฌ๋ ์ด์ ๋ธ๋ผ์ฐ์ ๋ผ๋ ๊ฐ์ ๋จธ์ ์ ์๋ฝํจ์ ์ ์ ๋ ๋, C ์ธ์ด๋ก ๊ตฌํํ ํฐ๋ฏธ๋ ๊ธฐ๋ฐ์ ๋๋ฌผ ์ถ์ธก ๊ฒ์์ ํตํด, ์ด ๊ณ ๊ธ ๊ตฌ์กฐ์ ์๋์์ ์ค์ ๋ก ์ด๋ค ์ผ๋ค์ด ๋ฒ์ด์ง๊ณ ์๋์ง๋ฅผ ๋ค์ฌ๋ค๋ณด๋ ค ํฉ๋๋ค.
[HTML/CSS/JS ์ฝ๋]
โ
[DOM ํธ๋ฆฌ๋ก ๋ณํ]
โ
[์ด๋ฒคํธ ๋ฃจํ & ์๋ฐ์คํฌ๋ฆฝํธ ์ธํฐํ๋ฆฌํฐ]
โ
[ํํ ๊ณ์ธต (๋ ๋๋ง ์์ง)]
โ
[OS I/O, GPU, ์ฌ์ด๋ ๋ฑ ํ๋ถ ์ธํฐํ์ด์ค]
- ๋ธ๋ผ์ฐ์ ๋ ์ฐ๋ฆฌ๊ฐ ์ง์ ๋ค๋ฃจ๊ธฐ ์ด๋ ค์ด I/O, ์ฅ์น ์ ์ด, ์ ๋ ฅ ์ฒ๋ฆฌ ๋ฑ ๋ณต์กํ ์์คํ ์์ค์ ์์๋ค์ ๋ชจ๋ ๊ฐ์ถฐ์ค๋๋ค.
- ์ด๋ฐ ๊ตฌ์กฐ ๋๋ถ์ ์ฐ๋ฆฌ๋ โ๋๋ฌผ์ด ์ง์ต๋๊น?โ๋ฅผ ํ๋ฉด์ ๋์ฐ๊ณ ๋ฒํผ๋ง ๋ง๋ค์ด๋, ๊ฒ์์ด ์คํ๋ฉ๋๋ค.
- ํ์ง๋ง ์ด ํธ๋ฆฌํจ์ ๋๊ฐ๊ฐ ์์ต๋๋ค: ์ฐ๋ฆฌ๊ฐ ๋ฌด์์ ํต์ ํ๊ณ ์๋์ง, ์ด๋ป๊ฒ ๋์๊ฐ๋์ง๋ ์ ์ ์์ต๋๋ค.
- ๋ธ๋ผ์ฐ์ ์์
alert()ํ๋ฉด ํ์ ์ด ๋จ์ง๋ง, - C์์๋
printf()๋ก ์ฝ์์ ๋ฌธ์์ด์ ์ถ๋ ฅํ๊ณ ,scanf()๋๋fgets()๋ก ์ ๋ ฅ์ ๋ฐ์์ผ ํ์ฃ . - ์ ๋ ฅ์ ์ฆ๊ฐ ์ฒ๋ฆฌ๋์ง ์์ต๋๋ค. ์ฌ์ฉ์๊ฐ ์ํฐ๋ฅผ ๋๋ฌ์ผ ๋ฒํผ์ ์ ์ฅ๋ ์ ๋ ฅ์ ๋ฐ์ ์ ์์ต๋๋ค.
โ ์ด๊ฒ์ด ๋ฐ๋ก Cooked Mode (ํ์ค ์
๋ ฅ ๋ชจ๋) ์
๋๋ค. Raw Mode๋ก ๋ฐ๊พธ๋ฉด ์ํฐ ์์ด ํ ๊ธ์์ฉ ์ฝ๋ ๊ฒ๋ ๊ฐ๋ฅํ์ง๋ง, ๋ณต์กํด์ง๋๋ค.
- C์์
fgets()๊ฐ์ ํจ์๋ฅผ ๋ถ๋ฅด๋ฉด ๋ด๋ถ์ ์ผ๋ก๋read()๋ผ๋ ์์คํ ์ฝ์ ํธ์ถํด ์ด์์ฒด์ ์๊ฒ "์ ๋ ฅ ์ค!"๋ผ๊ณ ์์ฒญํฉ๋๋ค. - ์์คํ ์ฝ์ ์ผ๋ฐ ํจ์ ํธ์ถ์ด ์๋๋๋ค. **๋ฌธ๋งฅ ์ ํ(context switch)**์ด ์ผ์ด๋๋ ์ค์ํ ํ์์ ๋๋ค.
๐ ๋ฌธ๋งฅ ์ ํ์ด๋?
์ด์์ฒด์ ๋ ํ์ฌ ํ๋ก๊ทธ๋จ์ด ์์ฒญ์ ๋ง์น ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๋์, ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ด ์คํ๋ ์ ์๋๋ก CPU๋ฅผ ๋๊น๋๋ค.
์ด๋ฅผ ์ํด ํ์ฌ ํ๋ก๊ทธ๋จ์ ์ํ(๋ฌธ๋งฅ)๋ฅผ ์ ์ฅํ๊ณ , ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ ์ํ๋ก ๋ ์ง์คํฐ, ์คํ ๋ฑ์ ๋ณต์ํฉ๋๋ค.
- ์์ ์๋ ์ปดํจํฐ์ ํค๋ณด๋๋ฅผ ์ฐ๊ฒฐํ ์ผ์ด๋ธ์ด ์์์ฃ . ์ง๊ธ์ ์ด๋ฐ ์ ์ด ์ํํธ์จ์ด์ ์ผ๋ก ์๋ฎฌ๋ ์ด์ ๋ฉ๋๋ค.
- ํฐ๋ฏธ๋ ์ ๋ ฅ์ ์ฒ๋ฆฌํ๋ ์ฅ์น ๋๋ผ์ด๋ฒ๋ ์ ๋ ฅ์ ์ ๋ ฅ ๋ฒํผ์ ์ ์ฅํ๊ณ , ํ๋ฉด์๋ ์์ฝ(echo) ๊ธฐ๋ฅ์ ํตํด ์ฌ์ฉ์ ์ ๋ ฅ์ ๋ณด์ฌ์ค๋๋ค.
- ๋๋ผ์ด๋ฒ๋ ENTER ํค๊ฐ ์ ๋ ฅ๋์ด์ผ ์ ๋ ฅ์ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์๊ฒ ์ ๋ฌํฉ๋๋ค.
[์ฌ์ฉ์ ํค ์
๋ ฅ]
โ
[ํฐ๋ฏธ๋ ๋๋ผ์ด๋ฒ์ ์
๋ ฅ ๋ฒํผ์ ์ ์ฅ]
โ (ENTER ์
๋ ฅ ์)
[์ด์์ฒด์ ๊ฐ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ ๊นจ์]
โ
[์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ ๋ฒํผ์์ ๋ฌธ์์ด์ ์ฝ์]
โ
[์ถ๋ก ๋ก์ง ์ํ โ ๋ค์ ์ง๋ฌธ ์ถ๋ ฅ]
โ
[ํฐ๋ฏธ๋ ์ถ๋ ฅ ๋ฒํผ โ ๋์คํ๋ ์ด]
์ด ํ๋ฆ์ด ๋ฐ๋ก ํ์ค I/O (stdio) ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฅ์น ๋๋ผ์ด๋ฒ์ ํ์
๊ตฌ์กฐ์
๋๋ค.
- ์ผ๋ฐ FIFO ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ผ ๋๋ง๋ค ๋ชจ๋ ์์๋ฅผ ํ ์นธ์ฉ ์์ผ๋ก ๋น๊ฒจ์ผ ํฉ๋๋ค.
- ๊ณ์ฐ์ด ๋ง๊ณ ๋นํจ์จ์ ์ด์ฃ .
- ํ๋ฅผ ์ ๋ชจ์์ผ๋ก ์๊ฐํฉ๋๋ค.
- ์์์ ๋นผ๊ณ , ๋ค์์ ๋ฃ๊ณ , ์ธ๋ฑ์ค๋
(ํ์ฌ + 1) % ๋ฒํผ ๊ธธ์ด๋ก ๊ณ์ฐ. - ๊ณต๊ฐ ์ฌํ์ฉ์ด ๊ฐ๋ฅํ๊ณ , ์ค๋ฒํค๋๊ฐ ์ ์ต๋๋ค.
g o
r
f
in โ ๋ฒํผ ์ถ๊ฐ
out โ ๋ฒํผ ์ฝ๊ธฐ
์ด ๊ตฌ์กฐ๋ ์ฅ์น ๋๋ผ์ด๋ฒ, ๋คํธ์ํฌ ๋ฒํผ, ํค๋ณด๋ ์ ๋ ฅ ์ฒ๋ฆฌ ๋ฑ์์ ์์ฃผ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.
| ์ญํ | ์ค๋ช |
|---|---|
| ์ ๋ ฅ ๋ฒํผ | ํ ๋ฒ์ ์์คํ ์ฝ๋ก ๋ค๋ ์ ๋ ฅ์ ๋ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ |
| ์ถ๋ ฅ ๋ฒํผ | ์ถ๋ ฅ ์์ฒญ์ด ์์ ๋๊น์ง ๋ฐ์ดํฐ ๋์ โ ๋ฑ ์ ํธ์ ๋ง์ถฐ ํ ๋ฒ์ ์ถ๋ ฅ |
| ์ฑ๋ฅ ํฅ์ | ์์คํ ์ฝ ํธ์ถ ์๋ฅผ ์ค์ฌ ๋ฌธ๋งฅ ์ ํ ๋น์ฉ ์ ๊ฐ |
| ๊ตฌ์กฐ | ๋ด๋ถ์ ์ผ๋ก ๋ง ๋ฒํผ ๊ตฌ์กฐ ํ์ฉ (FIFO์ง๋ง ํ์ชฝ๋ง ์์ง์ด๋ ํ ํํ) |
- ํ๋ก๊ทธ๋จ ์์
- ์ฌ์ฉ์์๊ฒ ์ง๋ฌธ ์ถ๋ ฅ (
printf) scanf๋ก ์ ๋ ฅ ๋๊ธฐ (ENTER ์ ๊น์ง๋ ์ฌ๋ฆฝ ์ํ)- ๋๋ต์ ๋ฐ๋ผ ์ง์ ํธ๋ฆฌ ํ์
- ์ถ์ธก ์คํจ ์, ์๋ก์ด ๋๋ฌผ/์ง๋ฌธ ์ ๋ ฅ ๋ฐ์ ์ง์ ํธ๋ฆฌ ํ์ฅ
- ๋ฃจํ ๋ฐ๋ณต
์ง์ ํธ๋ฆฌ๋ C์์๋ ๋์ ๊ตฌ์กฐ์ฒด๋ก ๊ตฌํ๋๋ฉฐ, ๋งํฌ๋ ํธ๋ฆฌ๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค.
์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ DOM ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋ฐฉ์๊ณผ ๊ตฌ์กฐ๋ ๋น์ทํ์ง๋ง, ์ง์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น/ํด์ (malloc/free)๊ฐ ํ์ํฉ๋๋ค.
๋ธ๋ผ์ฐ์ ์์ ์์ฃผ ์ฝ๊ฒ ๊ตฌํํ๋ "์ง๋ฌธ โ ์/์๋์ โ ๋ค์ ์ง๋ฌธ" ํ๋ฆ์
C ๊ธฐ๋ฐ์ผ๋ก ๋ด๋ ค์ค๋ฉด ํ ๋จ๊ณ ํ ๋จ๊ณ ๋ชจ๋ ์ฐ๋ฆฌ๊ฐ ์ง์ ์ง์ผ ํ ๊ตฌ์กฐ๊ฐ ๋ฉ๋๋ค.
- HTML์
<div>ํ๋๊ฐ C์์ ๊ตฌ์กฐ์ฒด ํธ๋ฆฌ์ ๋ ธ๋ onclick์ด๋ฒคํธ๊ฐ C์์ ์ฌ์ฉ์ ์ ๋ ฅ์ ๊ธฐ๋ค๋ฆฌ๋ ์์คํ ์ฝdocument.appendChild()๊ฐ C์์mallocํ ํฌ์ธํฐ๋ฅผ ์ฐ๊ฒฐํ๋ ํธ๋ฆฌ ํ์ฅ
| ๋น๊ต ํญ๋ชฉ | ๋ธ๋ผ์ฐ์ ํ๊ฒฝ | C ํฐ๋ฏธ๋ ํ๊ฒฝ |
|---|---|---|
| UI ๊ตฌ์ฑ | HTML ํ๊ทธ | printf ๋ฌธ์์ด ์ถ๋ ฅ |
| ํธ๋ฆฌ ๊ตฌ์กฐ | DOM ํธ๋ฆฌ | ๊ตฌ์กฐ์ฒด ๊ธฐ๋ฐ ๋งํฌ๋ ํธ๋ฆฌ |
| ์ ๋ ฅ ์ฒ๋ฆฌ | ๋ฒํผ + ์ด๋ฒคํธ ํธ๋ค๋ฌ | scanf + ์์คํ ์ฝ (read) |
| ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ | ์๋ | ์๋ (malloc/free) |
| ๋ฒํผ๋ง | ์๋, ๊ฑฐ์ ์ ๊ฒฝ ์ ์ | ๋๋ผ์ด๋ฒ ๋ฒํผ + stdio ๋ฒํผ ์ง์ ๊ณ ๋ ค |
| ์์คํ ์ฝ | ์ถ์ํ๋จ | ์ง์ ํธ์ถํด์ผ ํจ (read, write) |
| ์ฑ๋ฅ | ๋ฌธ๋งฅ ์ ํ ์ ๊ฒฝ ์ ์จ๋ ๋จ | ๋ฌธ๋งฅ ์ ํ ๊ณ ๋ ค ํ์ (์ฌ๋ฆฝ, ์ค์ผ์ค๋ง ๋ฑ) |
| ํญ๋ชฉ | ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฐ (HTML+JS) | ์์คํ ๊ธฐ๋ฐ (C ํฐ๋ฏธ๋) |
|---|---|---|
| ์คํ ํ๊ฒฝ | ๋ธ๋ผ์ฐ์ (์นํ์ด์ง) | ํฐ๋ฏธ๋ (CLI) |
| ์ฌ์ฉ์ ์ธํฐํ์ด์ค | HTML <button>, <input> |
์ฝ์ ์ถ๋ ฅ printf, ์
๋ ฅ scanf |
| ์ง์ ํธ๋ฆฌ ๊ตฌ์กฐ | HTML <div string="์ง๋ฌธ/๋๋ฌผ"> ํธ๋ฆฌ |
๊ตฌ์กฐ์ฒด ๊ธฐ๋ฐ ์ด์ง ํธ๋ฆฌ (๋ ธ๋ ๊ตฌ์กฐ์ฒด) |
| ํธ๋ฆฌ ์ ์ฅ ๋ฐฉ์ | DOM ๋ ธ๋์ ์จ๊ฒจ์ ์ ์ฅ | ๋ฉ๋ชจ๋ฆฌ ๋ด ๊ตฌ์กฐ์ฒด + ํฌ์ธํฐ |
| ์ด๋ฒคํธ ์ฒ๋ฆฌ | onclick, $(selector).click() |
if/else, scanf() ์
๋ ฅ ๋ถ๊ธฐ |
| ์ํ ์ ํ | DOM ํ์ ๋ฐ ์์ ๋ ธ๋ ์ด๋ | ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ ์ด๋ (node = node->yes) |
| ์ด๊ธฐํ | restart() ํจ์ |
๋ฃจํธ ํฌ์ธํฐ ์ด๊ธฐํ |
| ๋ฐ๋ณต ๊ตฌ์กฐ | ์ฌ์ฉ์ ํด๋ฆญ ์ด๋ฒคํธ ์ค์ฌ | ๋ฌดํ ๋ฃจํ (while(1)) |
| ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ | ์๋ (DOM ํธ๋ฆฌ ์กฐ์) | ์๋ (malloc / free) |
| ์คํ ํ๋ฆ | ๋น๋๊ธฐ์ ์ธํฐ๋์ (์ด๋ฒคํธ ๋ฃจํ) | ๋๊ธฐ์ ํ๋ฆ (์ ๋ ฅ โ ์ฒ๋ฆฌ โ ์ถ๋ ฅ) |
<div id="root" class="invisible">
<div string="๋๋ฌผ์ด ์ง์ต๋๊น?">
<div string="๊ฐ"></div>
<div string="๊ณ ์์ด"></div>
</div>
</div>function question(new_node, html) {
$('#dialog').append(html);
if ($(new_node).length == 0) return true;
node = new_node;
$('#dialog').append($(node).attr('string') + '?');
return false;
}- ๋ฐ์ดํฐ ๊ตฌ์กฐ: ์ค์ ๊ตฌ์กฐ๋ HTML DOM, ๋ฐ์ดํฐ๋
<div>์์์string์์ฑ - ๋
ธ๋ ํ์:
$(node).children(':first-child')์์ผ๋ก DOM ํ์ - ํ์ฅ ๋ฐฉ์:
wrap()๊ณผprepend()๋ก ์๋ก์ด ์ง๋ฌธ์ ์ฝ์
typedef struct node {
char *string;
struct node *yes;
struct node *no;
} Node;
Node *newNode(char *str) {
Node *n = malloc(sizeof(Node));
n->string = strdup(str);
n->yes = n->no = NULL;
return n;
}void ask(Node *node) {
if (node->yes == NULL && node->no == NULL) {
printf("%s์
๋๊น? (y/n) ", node->string);
char response;
scanf(" %c", &response);
if (response == 'y') printf("๋ง์ท์ต๋๋ค!\n");
else {
// ์๋ก์ด ์ง๋ฌธ/๋๋ฌผ ์ถ๊ฐ...
}
} else {
printf("%s (y/n) ", node->string);
char response;
scanf(" %c", &response);
if (response == 'y') ask(node->yes);
else ask(node->no);
}
}- ๋ฐ์ดํฐ ๊ตฌ์กฐ: ๊ตฌ์กฐ์ฒด ๊ธฐ๋ฐ ์ด์ง ํธ๋ฆฌ,
malloc์ผ๋ก ์์ฑ - ๋
ธ๋ ํ์: ๋จ์ํ ํฌ์ธํฐ ์ด๋ (
node->yes,node->no) - ํ์ฅ ๋ฐฉ์:
strdup()์ผ๋ก ๋ฌธ์์ด ๋ณต์ฌ ํ ์ ๋ ธ๋ ์์ฑ
| ๊ธฐ๋ฅ | HTML+JS | C (ํฐ๋ฏธ๋) |
|---|---|---|
| ์ ๋ ฅ ๋ฐฉ์ | <button>, <input> ํด๋ฆญ โ ์ด๋ฒคํธ ๋ฐ์ |
scanf, getchar ๋ฑ์ผ๋ก ๋๊ธฐ ์
๋ ฅ |
| ์ถ๋ ฅ ๋ฐฉ์ | <div>์ ๋ฌธ์์ด append |
printf()๋ก ํฐ๋ฏธ๋์ ์ถ๋ ฅ |
| ์ธํฐ๋์ | ๋น๋๊ธฐ ์ด๋ฒคํธ ๊ธฐ๋ฐ (click) |
์์ฐจ์ ํ๋ฆ, ์ ๋ ฅ ์์ผ๋ฉด ๋๊ธฐ |
| ๋ฌธ๋งฅ ์ ํ | ๋ธ๋ผ์ฐ์ ๊ฐ ์ฒ๋ฆฌ, ์ฌ์ฉ์๋ ์ธ์ ๋ชปํจ | read() โ ์์คํ
์ฝ โ ๋ฌธ๋งฅ ์ ํ ๋ฐ์ |
| ์์คํ ์ฝ ์ฌ์ฉ | ๋ธ๋ผ์ฐ์ ๋ด๋ถ์์ ์ถ์ํ๋จ | read, write, malloc, free ๋ฑ ๋ช
์์ ํธ์ถ |
| ํญ๋ชฉ | ๋ธ๋ผ์ฐ์ ๋ฒ์ | C ๋ฒ์ |
|---|---|---|
| ๋ฉ๋ชจ๋ฆฌ ํ ๋น | ๋ธ๋ผ์ฐ์ ๊ฐ DOM์ผ๋ก ๊ด๋ฆฌ | ์ง์ malloc, free ํธ์ถ |
| ํธ๋ฆฌ ์ ์ฅ | ๋ฌธ์ ๊ตฌ์กฐ๋ก ์๋ ์ ์ฅ | ํ์ ๋ ธ๋ ๊ตฌ์กฐ์ฒด๋ก ์ ์ฅ |
| ๊ฐ๋น์ง ์ปฌ๋ ์ | ๋ธ๋ผ์ฐ์ GC ์๋ ์ฒ๋ฆฌ | ๋ช ์์ ๋ฉ๋ชจ๋ฆฌ ํด์ ํ์ |
| ๋ฉ๋ชจ๋ฆฌ ์ค๋ฅ ์ํ | ๋ฎ์ | ๋ฉ๋ชจ๋ฆฌ ๋์, dangling pointer ์ํ |
| ๊ตฌ๋ถ | ๋ธ๋ผ์ฐ์ ํ๊ฒฝ | C ํ๊ฒฝ |
|---|---|---|
| ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ | ์ ์ธ์ + ์ด๋ฒคํธ ๊ธฐ๋ฐ | ๋ช ๋ นํ + ์ ์ฐจ์ |
| ๋ฐ์ดํฐ ํํ | DOM ์๋ฆฌ๋จผํธ ์์ฑ | ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ |
| ์ ์ ์ด๋ฒคํธ | ํด๋ฆญ, ํค ์ ๋ ฅ โ ์ด๋ฒคํธ ํธ๋ค๋ฌ | ๋ฌธ์ ์ ๋ ฅ โ ์กฐ๊ฑด ๋ถ๊ธฐ |
| ๋ ๋๋ง | ๋ธ๋ผ์ฐ์ ์์ง ์๋ ์ฒ๋ฆฌ | ํ ์คํธ ์ถ๋ ฅ๋ง |
| ๋ฒํผ๋ง | ๋ธ๋ผ์ฐ์ ๋ด๋ถ ๋ฒํผ ์๋ | stdio, ๋๋ผ์ด๋ฒ, OS ๋ ๋ฒจ ๋ฒํผ |
| ๋๋ฒ๊น ๋ฐฉ์ | ์ฝ์(log), ๋ธ๋ผ์ฐ์ ํด | gdb, printf ๋๋ฒ๊น |
| ์ด์์ฒด์ ์ถ์ํ | ๊ฑฐ์ ์์ ์ถ์ํ | ์ด์์ฒด์ ํธ์ถ ์ง์ ์ฌ์ฉ |
| ์ฝ๋ ๋ณต์ก๋ | ์งง๊ณ ๊ฐ๋จ | ๊ธธ๊ณ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ํ์ |
| ๋ชฉ์ | ๋ธ๋ผ์ฐ์ ๋ฐฉ์์ด ์ ๋ฆฌ | C ๋ฐฉ์์ด ์ ๋ฆฌ |
|---|---|---|
| ์ฌ์ฉ์์ ์ธํฐ๋ํฐ๋ธ UI | โ ์ | โ ์๋์ |
| ์์คํ ๋์ ์๋ฆฌ ํ์ต | โ ํ๊ณ ์์ | โ ์์ฃผ ์ ๋ฆฌ |
| ๋น ๋ฅธ ํ๋กํ ํ์ ์ ์ | โ ๋น ๋ฆ | โ ๋๋ฆผ |
| ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ / ๊ณ ์ฑ๋ฅ | โ ๋ธ๋ผ์ฐ์ ํ๊ณ ์์ | โ ๊ฐ๋ฅ |
| ์ฅ์น ์ ์ด, ๋๋ผ์ด๋ฒ ๊ตฌํ | โ ๋ถ๊ฐ๋ฅ | โ ์์คํ ์ง์ ์ ๊ทผ ๊ฐ๋ฅ |
| ์ ์ง๋ณด์ | โ DOM ํธ๋ฆฌ ํ์ฉ | โ ํฌ์ธํฐ/๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ด๋ ค์ |
- ๋ธ๋ผ์ฐ์ ๋ฒ์ ์ ๋น ๋ฅด๊ฒ UI๋ฅผ ๊ตฌ์ฑํ๊ณ ์ฌ์ฉ์์ ์ํธ์์ฉํ๊ธฐ์ ์ต์ ํ๋์ด ์์ผ๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ๋ I/O ์ฒ๋ฆฌ๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ๋์์ฃผ๋ฏ๋ก ํ์ต์ด ์ฌ์
- C ๋ฒ์ ์ ์ ์ถ๋ ฅ, ๋ฒํผ๋ง, ์์คํ ์ฝ, ๋ฌธ๋งฅ ์ ํ ๋ฑ ์์คํ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ ๊ฐ๋ ์ ๋ชจ๋ ์ฒดํํ ์ ์์ผ๋ฉฐ, ๋ด๋ถ ๋์์ ์ ํํ ์ดํดํ๋ ๋ฐ ์ ํฉ
๋ฌผ๋ก ์ ๋๋ค! ์๋๋ **"์ถ์ํ๋ฅผ ํ์ฉํ ์ฝ๋ ๊ฐ์ "**์ด๋ผ๋ ์ฃผ์ ๋ฅผ ๋ฐํ์ผ๋ก, ๊ฐ๋ ์ฑ ์ข๊ณ ์คํ ๋ฆฌํ ๋ง ๊ตฌ์กฐ๋ก ์ ๋ฆฌํ ์ฝํ ์ธ ์ ๋๋ค.
๋๋ฌผ ์ถ์ธก ๊ฒ์์ ํด๋ณธ ์ฌ๋์ด๋ผ๋ฉด ์๊ฒ ์ง๋ง,
ํ๋ก๊ทธ๋จ์ ์๋ก ์์ํ ๋๋ง๋ค ์ง์ ํธ๋ฆฌ๊ฐ ์ด๊ธฐํ๋๋ฉฐ, "๊ฐ์ ๊ณ ์์ด" ์์ค์์ ๋ค์ ์์ํฉ๋๋ค.
"์ด์ ๋ ์ผ๋ฅด๋ฒ ๋ก์ค๊น์ง ํ์ตํ๋๋ฐ..."
์ค๋ ์คํํ๋ ๋ ๊ฐ์ ๊ณ ์์ด๋ง ์๋ ๊ฒ์์ด๋ผ๋ฉด ์ค๋ง์ค๋ฝ๊ฒ ์ฃ .
์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์ด์ ์ ํ์ต๋ ์ง์์ ์ ์ฅํ๊ณ , ๋ค์ ์คํ ์ ๋ค์ ๋ถ๋ฌ์ค๋ ๊ธฐ๋ฅ, ์ฆ ์ํ์ ์ง์์ฑ(persistence)์ด ํ์ํฉ๋๋ค.
C ์ธ์ด๋ ์ด๋ฅผ ๊ฝค ์ฝ๊ฒ ํด๊ฒฐํ ์ ์์ต๋๋ค.
๊ทธ ์ด์ ๋ ์ด์์ฒด์ ์์ค์ ์ถ์ํ๊ฐ C ์ธ์ด์ ์ ๋
น์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
์ด์์ฒด์ ๋ ํ์ผ๊ณผ ์ฅ์น๋ฅผ โ๋์ผํ ์ธํฐํ์ด์คโ๋ก ๋ค๋ฃจ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
์ฆ,
ํ์ผ์์ ์ฝ๋ ์ฝ๋ ==ํค๋ณด๋ ์ ๋ ฅ์ ๋ฐ๋ ์ฝ๋
=> ๋ ๋คfgets(),fputs()๋ฑ์ผ๋ก ๋์ผํ๊ฒ ๊ตฌํ ๊ฐ๋ฅ
์ด ๋๋ถ์ ๋๋ฌผ ์ถ์ธก ๊ฒ์์ C๋ก ๋ง๋ค๋ฉด,
- ํ์ต ๋ด์ฉ์ ํ์ผ์ ์ ์ฅ(
-o์ต์ )ํ๊ฑฐ๋ - ์ ์ฅ๋ ๋ด์ฉ์ ๋ค์ ๋ถ๋ฌ์์ ์ด์ดํ๊ธฐ(
-i์ต์ )๊ฐ ๋งค์ฐ ์์ฐ์ค๋ฝ๊ฒ ๊ตฌํ๋ฉ๋๋ค.
gta -o training.txt- ์ฌ์ฉ์๊ฐ ์ ๋๋ฌผ๊ณผ ์ง๋ฌธ์ ์
๋ ฅํ๋ฉด ํด๋น ๋ด์ฉ์ด
training.txt์ ์ ์ฅ๋จ - ๋ค์ ์คํ ์
gta -i training.txt๋ก ์ด์ ์ํ๋ฅผ ๋ถ๋ฌ์ฌ ์ ์์
์ด๊ฒ ๊ฐ๋ฅํ ์ด์ ๋?
C ํ๋ก๊ทธ๋จ์ด ํ์ผ ์์คํ
์ ์
๋ ฅ/์ถ๋ ฅ ์ถ์ํ๋ฅผ ์ง์ ํ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
๋ฐ๋ฉด ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์ C์ฒ๋ผ ์ง์ ์์คํ
์์์ ์ ์ดํ ์ ์์ต๋๋ค.
์๋ํ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ์ฌ์ฉ์๋ฅผ ๋ณดํธํ๊ธฐ ์ํด ๋ณด์ ๋ชจ๋ธ๊ณผ ์ถ์ํ ๋ ์ด์ด๋ฅผ ๋ ๋๊ฒ ์ค์ ํด๋๊ธฐ ๋๋ฌธ์ด์ฃ .
์๋ ๊ทธ๋ฆผ์ฒ๋ผ,
๋ธ๋ผ์ฐ์ ์์๋ ํ์ผ ์์คํ
๊ณผ ์ง์ ์ฐ๊ฒฐ๋๋ ์ฝ๋๊ฐ ์์ต๋๋ค.
์ฌ์ฉ์ ์ฝ๋ โ ๋ธ๋ผ์ฐ์ API โ ์ด์์ฒด์ I/O
X O O
- ํ์ผ ์์คํ ์ ์ ๊ทผํ๋ ค๋ฉด File API, IndexedDB, LocalStorage ๋ฑ ์์ ํ ๋ณ๊ฐ์ API๋ฅผ ์จ์ผ ํจ
- ์ด API๋ค์ ์ผ๊ด๋ ์ ์ถ๋ ฅ ์ธํฐํ์ด์ค๊ฐ ์๋ ์์ ํ ๋ค๋ฅธ ์ค๊ณ์ฒ ํ์ ๊ฐ์ง
- ๋ฐ๋ผ์ ๊ฒ์์ ์ํ ์ ์ฅ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ค๋ฉด ์์ ํ ๋ค๋ฅธ ๋ฐฉ์์ ์ฝ๋๋ฅผ ์๋ก ์์ฑํด์ผ ํจ
| ํญ๋ชฉ | C ํ๋ก๊ทธ๋จ | ์๋ฐ์คํฌ๋ฆฝํธ (๋ธ๋ผ์ฐ์ ) |
|---|---|---|
| ์์คํ ์ ๊ทผ | ํ์ผ/์ฅ์น ๋ชจ๋ ๋์ผํ ์ธํฐํ์ด์ค | ์ ํ์ ์ ๊ทผ๋ง ํ์ฉ |
| ์ํ ์ ์ฅ ๋ฐฉ์ | fopen, fgets, fputs ๋ฑ |
LocalStorage, IndexedDB ๋ฑ ๋ณ๋ API ํ์ |
| ํ์ต ์ง์์ฑ ๊ตฌํ ๋์ด๋ | ๋ฎ์ (ํ์ผ๋ง ๋ค๋ฃจ๋ฉด ๋จ) | ๋์ (์ถ๊ฐ ๊ธฐ์ ํ์ต ํ์) |
| ์ฅ์ | ๋จ์ํ ์ฝ๋๋ก ๋ค์ํ ์ ๋ ฅ/์ถ๋ ฅ ๊ตฌํ ๊ฐ๋ฅ | ์ฌ์ฉ์ ๋ณด์์ ๊ฐํจ, ํฌ๋ก์ค ํ๋ซํผ ํ๊ฒฝ |
| ๋จ์ | ์์คํ ์์ ์ ๊ทผ ์ ํ ์์ โ ๋ณด์ ์ํ | ๋์ผ ๊ธฐ๋ฅ ๊ตฌํ ์ API ๋ค์ํ๊ณ ๋ณต์กํจ |
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํ๋ซํผ์ ์ด๋ค ์ถ์ํ๋ฅผ ์ด๋ป๊ฒ ๋๋ฌ๋ผ ๊ฒ์ธ๊ฐ์ ๋ฐ๋ผ ์์ฐ์ฑ๊ณผ ํธ์์ฑ์ด ๋ฌ๋ผ์ง๋๋ค.
- C๋ "์์คํ ์ ๊ฐ๊น๊ฒ ์ผํ์"๋ ์ฒ ํ ์๋, ์ ์ถ๋ ฅ๊ณผ ํ์ผ ์์คํ ์ ํตํฉ๋ ์ธํฐํ์ด์ค๋ก ์ ๊ณตํฉ๋๋ค.
- ๋ธ๋ผ์ฐ์ ๋ ๋ณด์๊ณผ ์ ์ ํธ์๋ฅผ ์ค์ํ๋ฉฐ, ๋ค์ํ ์ถ์ํ๋ฅผ ๊ฐ๋ฐ์์๊ฒ์ ์จ๊ธฐ๊ณ , ๋์ ์์ ํ ๊ณ ์์ค API๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ด๋ก ์ธํด ๋์ผํ ๊ธฐ๋ฅ์ด๋ผ๋ ์์ ํ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋๋ฉฐ, ์ถ์ํ ์์ค์ ๋ฐ๋ผ ์ฝ๋์ ์ ์ฐ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ๋ ๋ฌ๋ผ์ง๋๋ค.
C๋ก ์์ฑํ ํ๋ก๊ทธ๋จ์ด ./a.out์ด๋ gta ๊ฐ์ ์ด๋ฆ์ผ๋ก ์คํ๋๋ ์๊ฐ, ๋จ์ํ ๋ฉ์ธ ํจ์๋ถํฐ ์คํ๋๋ ๊ฒ ๊ฐ์ง๋ง, ์ค์ ๋ก๋ ๊ทธ ์ด์ ์ ์์ฃผ ์ค์ํ ์ค๋น ์์
์ด ์ผ์ด๋ฉ๋๋ค.
์ด๊ฑธ ๋ด๋นํ๋ ๊ฒ ๋ฐ๋ก ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(runtime library) ์ ๋๋ค.
- ์คํ๊ณผ ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ์ด๊ธฐํ
- ํ์ค ์ ์ถ๋ ฅ ์์คํ ์ ์ํ ์ฅ์น ํ์ผ ์คํ
stdin,stdout,stderr๊ฐ์ ๊ธฐ๋ณธ ์ ์ถ๋ ฅ ํธ๋ค ์ค๋น
์ด๋ฐ ์ค๋น๊ฐ ์์ผ๋ฉด printf, scanf, fgets ๊ฐ์ ํจ์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. C์์๋ ์ด ์ค๋น๊ฐ crt0 ๋๋ crt1.o๋ผ๋ ์คํํธ์
์ฝ๋(startup object)์์ ์๋์ผ๋ก ์ํ๋ฉ๋๋ค.
ํ์ค ์ ์ถ๋ ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ์ธ ๊ฐ์ง ์ฃผ์ ํฌ์ธํฐ๋ฅผ ์ ๊ณตํฉ๋๋ค:
| ์ด๋ฆ | ์ค๋ช | ๋์คํฌ๋ฆฝํฐ |
|---|---|---|
stdin |
ํ์ค ์ ๋ ฅ | 0 |
stdout |
ํ์ค ์ถ๋ ฅ | 1 |
stderr |
ํ์ค ์ค๋ฅ ์ถ๋ ฅ | 2 |
- ๋ ๋ค ์ฝ์๋ก ์ถ๋ ฅ๋จ
- ํ์ง๋ง ๋ฒํผ๋ง ๋ฐฉ์์ด ๋ค๋ฆ:
stdout: ๋ผ์ธ ๋ฒํผ โ ์ค ๋ฐ๊ฟ ์ ๊น์ง ์ ์ฅ๋๋ฉฐ, ํ๋ก๊ทธ๋จ์ด ์ค๋จ๋๋ฉด ์ ์ค๋ ์๋ ์์stderr: ๋น๋ฒํผ๋ง โ ์ฆ์ ์ถ๋ ฅ๋จ
๋ฐ๋ผ์ ์ค๋ฅ ๋ฉ์์ง๋ ํญ์ stderr๋ก ์ถ๋ ฅํ๋ ๊ฒ ์์ ํฉ๋๋ค.
๐ ์ฌ๋ฐ๋ ์ญ์ฌ์ ๋ฐฐ๊ฒฝ
์ด๊ธฐ์ ์ฌ์ง ์กฐํ ์ฅ์น(C/A/T)๋ ์กฐํ๋ ๋ฌธ์๋ฅผ ์ถ๋ ฅํ๊ธฐ๊น์ง ๋น์ฉ์ด ๋ง์ด ๋ค์๊ธฐ ๋๋ฌธ์, ๋จ์ํ ์ค๋ฅ ๋ฉ์์ง(์: โํ์ผ์ ์ด ์ ์์ต๋๋คโ)๋ฅผ ์กฐํ ํ๋ฆฐํฐ๋ก ์ถ๋ ฅํ์ง ์๊ณ ํฐ๋ฏธ๋๋ก ๋ฐ๋ก ๋ณด๋ด๊ธฐ ์ํด stderr๊ฐ ์๊ฒผ์ต๋๋ค.
์ด๊ธฐ C ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ gets(char *buffer)๋ผ๋ ์์ฃผ ๊ฐ๋จํ ์
๋ ฅ ํจ์๊ฐ ์์์ต๋๋ค.
ํ์ง๋ง ์ด ํจ์๋ ์น๋ช
์ ์ธ ๋จ์ ์ ์๊ณ ์์์ต๋๋ค.
char buffer[2];
gets(buffer); // ๐ ๋ฌธ์ ๋ฐ์gets()๋ ์ ๋ ฅ๋ฐ๋ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ์ ํํ์ง ์์- ์ฌ์ฉ์ ์
๋ ฅ์ด
buffer์ ํฌ๊ธฐ๋ฅผ ์ด๊ณผํ๋ฉด? โ ๋ฉ๋ชจ๋ฆฌ ์นจ๋ฒ
๐จ ์ค์ ์ํ ์ฌ๋ก
{% hint style="danger" %}
๋ง์ฝ buffer ๋ค์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ(์: launch_missiles)๊ฐ ์์นํ๋ค๋ฉด,
yyy์ ๊ฐ์ ์
๋ ฅ์ผ๋ก ์ฝ๋๋ฅผ ์กฐ์ํ๊ฑฐ๋ ์์คํ
์ ์ํํ ์ ์์ต๋๋ค.
{% endhint %}
์ด๋ฐ ์ทจ์ฝ์ ์ ์๋ง์ ๋ณด์ ์ฌ๊ณ ๋ก ์ด์ด์ก๊ณ ,
C99 ์ดํ๋ก๋ gets()๊ฐ ์ฌ์ฉ๊ธ์ง(deprecated) ๋์์ผ๋ฉฐ,
C11์์๋ ์์ ํ ์ญ์ ๋์์ต๋๋ค.
โ
์์ ํ ๋์: fgets(buffer, sizeof(buffer), stdin)
๋ฒํผ ์ค๋ฒํ๋ก๊ฐ ๋ฐ์ํ ์ ๋ฒํผ์ ๋ค ๋ด์ง ๋ชปํ ๊ฐ๋ค์ ๋ฒํผ ์ดํ์ ๊ณต๊ฐ์ ๋ค์ด์ฐจ๊ฒ ๋ฉ๋๋ค. ๋ฌธ์ ๋ ๋ค์ด์ฐจ๋ ๋ฐฉ์์ด ๋ฐ์ด๋ด๊ธฐ๊ฐ ์๋ ๋ฎ์ด์ฐ๊ธฐ๋ผ๋ ๊ฒ์
๋๋ค.
๊ฐ๋ น 8์นธ์ง๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๊ณ , ๊ทธ ์์ 4์นธ์ง๋ฆฌ ๋ฒํผ๊ฐ ์์ ๋
https://namu.wiki/w/%EB%B2%84%ED%8D%BC%20%EC%98%A4%EB%B2%84%ED%94%8C%EB%A1%9C
์ด์ ๊ฐ์ด ์ฌ์ฉ์๊ฐ ๋ฒํผ๋ฅผ ์ด๊ณผํ๋ ๊ฐ์ ์ ๋ ฅํ๋ฉด ๋ฒํผ ์ดํ์ ๊ฐ์ด ๋ฐ๋๊ฒ ๋๋ค.
๋ฌธ์ ๋ ์ด๊ฑธ ํ๋ก๊ทธ๋จ์ ์ ํ ๋ชจ๋ฅด๊ณ ์๋ ์ํ๋ผ๋ ๊ฒ์ด๋ค. ์ฌ์ง์ด ๋ฒํผ ์ดํ์ ๊ฐ์ด ๋ฐ๋์ด๋ ํ๋ก๊ทธ๋จ์ ์ด๋ฅผ ์ ํ ์ฌ์ฉ์์๊ฒ ํต์งํ์ง ์๋๋ค!โ ๋ฌผ๋ก ์ด๋ ๋ก์ฐ ๋ ๋ฒจ๊น์ง ํ๋ก๊ทธ๋๋จธ๊ฐ ์ธ์ธํ๊ฒ ์ฝ๋ฉํด์ผ ํ๋ ๋์ ์ด์ผ๊ธฐ๊ณ ์์ฆ์ ๋๋ฒ๊น ์ ์ปดํ์ผ๋ฌ๊ฐ ๋ฒํผ ์๋ค์ ์ค๋ฒํ๋ก ๋ฐฉ์ด์ฉ 1~4๋ฐ์ดํธ์ง๋ฆฌ ๊ฐ์ ๋ฃ์ด(์นด๋๋ฆฌ๋ผ๊ณ ํ๋ค. ์ด์์ ์นด๋๋ฆฌ์(์กฐ๋ฅ) ๋ฌธ์ ์ฐธ์กฐ) ์นจ๋ฒ๋์์ ๊ฒฝ์ฐ ์์ธ๋ฅผ ๋๋ ค๋ฒ๋ฆฌ๊ฑฐ๋ ์ฝ๋ฉ ๋จ๊ณ์์ '์ด ํจ์๋ ๋ฒํผ ์ค๋ฒํ๋ก์ ์ํ์ด ์์' ์ด๋ผ๊ณ ๊ฒฝ๊ณ ๋ฅผ ํด ์ค๋ค. ๋ฌผ๋ก ์ด ํ์์ด ์ฌ๋ผ์ง ๊ฑด ์๋๋ฏ๋ก ํ๋ก๊ทธ๋๋จธ๋ ์ฌ์ ํ ๋ฒํผ์ ๋ค์ด๊ฐ๋ ๊ฐ์ ์ฒดํฌ ํด์ผ ๋๋ค.
์ค์ํ์ง ์์ 10์ค~50์ค์ง๋ฆฌ ์๊ท๋ชจ ์์ ํ๋ก๊ทธ๋จ์ด๋ผ๋ฉด ์ด๋ ๋ฑํ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋์ง๋ง ์คํ์ด๋ ๋๊ท๋ชจ ํ๋ก์ ํธ๋ผ๋ฉด ์ด์ผ๊ธฐ๊ฐ ๋ฌ๋ผ์ง๋๋ฐ ์ด ์๋ฆฌ๋ฅผ ํตํด ํดํน์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ฐ๋จํ ์๋ฅผ ๋ค์๋ฉด 10์๋ฆฌ ๋น๋ฐ๋ฒํธ๋ฅผ ์น๊ณ ๋ค์ด๊ฐ๋ ์์คํ ์ด ์๋ค๊ณ ํ์. ๊ทธ๋ฆฌ๊ณ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ์ฅํ๋ ๊ฐ ๋ฐ๋ก ๋ค์ ๋ก๊ทธ์ธ ์ฌ๋ถ๋ฅผ ๋ฌป๋ ๊ฐ์ด ์๋ค๊ณ ํ์.(0=์คํจ, ์ด์ธ์ ๊ฐ=์ฑ๊ณต) ์ด ์ํฉ์์ ๋์๋ฆฌ๊ฐ 0์ด ์๋ 11์๋ฆฌ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ฉด ํ๋ฆฌ๋๋ผ๋ ๋ซ์ ์ ์๊ฒ ๋๋ค!
๋ง์ฝ ๋ฒํผ๋ฅผ ์ด๊ณผํ์ฌ ์ฐ์ด๋ ๊ฐ์ด ํ๋ก๊ทธ๋จ์ RETN[4]๊ฐ์ ๋ฎ์ด์ฐ๊ฒ ๋๋ค๋ฉด ์ฌ์ฉ์๊ฐ ํ๋ก๊ทธ๋จ์ ์งํ ์ํฉ์ ํต์ ํ ์ ์๊ฒ ๋๋ค. ๋ง์ฝ ํน์ ํ ํจ์๊ฐ ์๊ณ , ์ด ํจ์์ ์ฃผ์๊ฐ์ ์๊ณ ์ด๋ค ์ ๋ ฅ์ด ๋ฒํผ ์ค๋ฒํ๋ก ๊ณต๊ฒฉ์ด ๊ฐ๋ฅํ๋ค๋ฉด ๊ทธ๋ฅ '์ ๋ ฅ๋ฐ๋ ๋ฌธ์์ด + 4[5]/8[6]๋ฐ์ดํธ(SFP ๋ฎ์ด์ฐ๊ธฐ์ฉ) + ํด๋น ํจ์ ์ฃผ์'๋ฅผ ์ ๋ ฅ๊ฐ์ ์ค์ ๋ฃ์ด ์ ๋ ฅ ํจ์๊ฐ ๋๋๋ฉด ์์ ์ด ์ํ๋ ํจ์๋ก ์ ํํ ์ ์๊ฒ ๋๋ค.
๊ฐ์ฅ ์ ๋ช ํ ์ฌ๋ก๋ก๋ ํํธ๋ธ๋ฆฌ๋ ์ฌํ์ ์คํํฌ๋ํํธ 1์ EUD๊ฐ ์๋ค.
- ๋๋ฌด ์ํค -
์๋ฐ์คํฌ๋ฆฝํธ์์๋ DOM <div> ๊ตฌ์กฐ๋ฅผ ํ์ฉํด ํธ๋ฆฌ๋ฅผ ๋ง๋ค์์ง๋ง,
C์์๋ ์ข ๋ ์ง์ ์ ์ธ ๋ฐฉ์์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ํฌ์ธํฐ๋ฅผ ํ์ฉํฉ๋๋ค.
struct node {
struct node *no;
struct node *yes;
char string[1];
};no,yes๋ ์ผ์ชฝ/์ค๋ฅธ์ชฝ ์์ ๋ ธ๋string์ ๋๋ฌผ ์ด๋ฆ์ด๋ ์ง๋ฌธ
C์์๋ ๋ฌธ์์ด์ ๋ด๊ธฐ ์ํด ๋
ธ๋ ๊ตฌ์กฐ์ฒด ํฌ๊ธฐ + ๋ฌธ์์ด ๊ธธ์ด๋งํผ malloc์ ์ฌ์ฉํด ์ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณ์ฐํ์ฌ ํ ๋นํฉ๋๋ค.
malloc(sizeof(struct node) + strlen(string))์ด๋ฐ ์ ์์ค ๋ฉ๋ชจ๋ฆฌ ์ ์ด๋ ์ํํ์ง๋ง ๊ฐ๋ ฅํ๋ฉฐ, ์์คํ ํ๋ก๊ทธ๋๋ฐ์์ ์์ฃผ ์ค์ํ ๋ฅ๋ ฅ์ ๋๋ค.
| ํญ๋ชฉ | ์ค๋ช |
|---|---|
| ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ | ์คํ ์ ์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ํ์ผ ํธ๋ค์ ์ด๊ธฐํ |
stdio |
์ ๋ ฅ/์ถ๋ ฅ๊ณผ ๋ฒํผ๋ง์ ๋ค๋ฃจ๋ ํ์ค I/O ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
stdout vs stderr |
์ถ๋ ฅ ๋ฐฉ์์ ์ฐจ์ด๋ก ์ค๋ฅ ๋ฉ์์ง ๊ด๋ฆฌ |
gets()์ fgets() |
๋ฒํผ ์ค๋ฒํ๋ก์ ๊ทธ๋ก ์ธํ ๋ณด์ ์ํ |
| ๊ตฌ์กฐ์ฒด + ํฌ์ธํฐ | ์๋ฐ์คํฌ๋ฆฝํธ๋ณด๋ค ๋ ์ง์ ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์กฐ์ ๋ฐฉ์ |
๐ง ์ฃผ์ : ๊ณ ์์ค๊ณผ ์ ์์ค ํ๋ก๊ทธ๋จ์ ๊ฒฝ๊ณ์์ โ ์๋ฐ์คํฌ๋ฆฝํธ vs C๋ก ๊ตฌํํ โ๋๋ฌผ ์ถ์ธก ๊ฒ์โ ๋น๊ต
| ๊ตฌ๋ถ | HTML/JavaScript | C ์ธ์ด |
|---|---|---|
| ์คํ ํ๊ฒฝ | ๋ธ๋ผ์ฐ์ (V8 ์์ง ํฌํจ) | OS์์ ์ง์ ์คํ (ํฐ๋ฏธ๋ ๊ธฐ๋ฐ) |
| ์ ์ถ๋ ฅ ๋ฐฉ์ | ๋ธ๋ผ์ฐ์ ์ ๊ณต Web API, DOM, ์ด๋ฒคํธ ํธ๋ค๋ฌ | stdin, stdout, stderr ๋ฐ ํ์ผ ์ ์ถ๋ ฅ ํจ์ |
| UI ์ฒ๋ฆฌ | ๋ฒํผ, ํ ์คํธ ์ ๋ ฅ, HTML DOM์ผ๋ก ๊ตฌํ | ํ ์คํธ ๊ธฐ๋ฐ y/n/q ์ ๋ ฅ ์ฒ๋ฆฌ |
| ์ง์ ํธ๋ฆฌ ๊ตฌ์กฐ | <div>๋ฅผ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ํ์ฉ |
struct node ๊ธฐ๋ฐ ๋์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ |
| ๊ฒ์ ์ํ ์ ์ฅ | ๋ธ๋ผ์ฐ์ ๋ด๋ถ์์๋ ์ด๋ ค์ | ํ์ผ ์ ์ถ๋ ฅ (์ต์ ์ผ๋ก -i, -o) |
| ํ๋ก๊ทธ๋จ ํ๋ฆ | jQuery ๋ฐ JS ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ฒ๋ฆฌ | ๋ฃจํ, ์กฐ๊ฑด๋ฌธ, ํฌ์ธํฐ ์ค์ฌ์ ๊ตฌ์กฐ์ ์ฒ๋ฆฌ |
- ๋ธ๋ผ์ฐ์ (JavaScript):
- ํ์ผ ์ ๊ทผ ์ ํ (๋ณด์์ ์ด์ ๋ก local file ์ ๊ทผ ์ด๋ ค์)
- Web API๋ก ์ ์ถ๋ ฅ ์ถ์ํ
- ๋ธ๋ผ์ฐ์ ๊ฐ ๋ง์ ์ธ๋ถ ์ฌํญ์ ๊ฐ์ถค (ํ์ผ, ํฐ๋ฏธ๋ ์กด์ฌ X)
- C ์ธ์ด:
- ํ์ผ/์ฅ์น ๊ตฌ๋ถ ์์ โ ๋์ผํ ์ธํฐํ์ด์ค ์ ๊ณต
fopen,fgets,fputs๋ฑ์ ํ์ค ์ ์ถ๋ ฅ ํจ์๋ก ๋ฐ์ดํฐ ์ฒ๋ฆฌ- stderr๋ ๋ฒํผ๋ง์ ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ค์ํ ๋ฉ์์ง ์ถ๋ ฅ์ ์ฌ์ฉ
๋ธ๋ผ์ฐ์ ์์ ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ค๋ฉด โ์์ ํ ๋ค๋ฅธ APIโ๋ฅผ ์จ์ผ ํ์ง๋ง, C์์๋ ์ฅ์น์ ํ์ผ์ด ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฌ์ฉ์ด ์ฉ์ดํฉ๋๋ค.
| ํญ๋ชฉ | JavaScript | C ์ธ์ด |
|---|---|---|
| ๋ ธ๋ ๊ตฌ์กฐ | <div string="์ง๋ฌธ">...</div> |
struct node with string[] |
| ๋ฉ๋ชจ๋ฆฌ ํ ๋น | ๋ธ๋ผ์ฐ์ ๋ด๋ถ ๋ฉ์ปค๋์ฆ ์ฌ์ฉ | malloc์ผ๋ก ์๋ ํ ๋น |
| ๋ฌธ์์ด ์ฒ๋ฆฌ | JS ๋ด์ฅ ๋ฌธ์์ด ํจ์ | strcpy, strlen ๋ฑ ์ง์ ์ฒ๋ฆฌ |
| ํฌ์ธํฐ ์ฌ์ฉ | ์์ (์ฐธ์กฐ ๊ธฐ๋ฐ) | yes/no โ ํฌ์ธํฐ ์ง์ ์ฐ๊ฒฐ |
์๋ฐ์คํฌ๋ฆฝํธ์์๋
<div>DOM ์์๊ฐ ๊ณง ํธ๋ฆฌ ๋ ธ๋์ด์ ๋ฐ์ดํฐ๋ฅผ ํ์ ๊ฐ์ฒด์ ๋๋ค. C์์๋ ์ด๋ฅผ ๋ช ์์ ์ผ๋ก ๊ตฌ์กฐ์ฒด์ ํฌ์ธํฐ๋ก ๊ตฌํํด์ผ ํ๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ ํ ๋น๋ ์ง์ ํด์ค์ผ ํฉ๋๋ค.
- stdin: ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ฐ์
- stdout: ์ผ๋ฐ ๋ฉ์์ง ์ถ๋ ฅ
- stderr: ์ค๋ฅ ๋ฉ์์ง ์ถ๋ ฅ (๋ฒํผ๋ง ์์)
char buffer[2];
gets(buffer); // ์ํ: ๋ฒํผ ์ค๋ฒํ๋ก ๊ฐ๋ฅgets๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฉฐ, ๋ฒํผ ํฌ๊ธฐ๋ฅผ ์ง์ ํ ์ ์๋
fgets()๋ก ๋์ฒด๋ฉ๋๋ค. ๋ฒํผ ์ค๋ฒํ๋ก ์ทจ์ฝ์ ์ ๋ณด์ ์ธก๋ฉด์์ ํฐ ์ด์์ ๋๋ค.
char buffer[2];
gets(buffer); // yyy ์
๋ ฅ โ launch_missiles ๋ณ์์ ์ํฅ ๊ฐ๋ฅโ ๋์๋ฒ:
fgets(buffer, sizeof(buffer), stdin);- JavaScript:
- ๋ธ๋ผ์ฐ์ ์ ํ๋ จ ๋ฐ์ดํฐ ์ ์ฅ ์ด๋ ค์
- ๋ก์ปฌ์คํ ๋ฆฌ์ง ๋๋ ๋ฐฑ์๋ ์๋ฒ ์ฐ๋ ํ์
- C ํ๋ก๊ทธ๋จ:
-i,-o์ต์ ์ผ๋ก ํ์ผ ์ ์ถ๋ ฅ ๊ธฐ๋ฅ ๊ตฌํfopen,fputs,fgets๋ฑ์ผ๋ก ๋ฐ์ดํฐ ์ ์ฅ
ํ๋ จ ๋ฐ์ดํฐ๋ฅผ ํ์ผ์ ์ ์ฅํ ๋ค ๋ค์ ๊ฒ์์์ ์ด์ด์ ๋ถ๋ฌ์ค๋ ๊ธฐ๋ฅ์ CLI์์ ํจ์ฌ ์์ฐ์ค๋ฝ๊ฒ ๊ตฌํ๋ฉ๋๋ค.
- ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฐ ์ฑ์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)๋ฅผ ์๋์ผ๋ก ์ ๊ณตํ์ง๋ง, ์์คํ ์์ ์ ๊ทผ์๋ ์ ํ์ด ๋ง์ต๋๋ค.
- ๋ฐ๋ฉด C๋ก ๊ตฌํ๋ CLI ๋ฒ์ ์ ๋ชจ๋ ๊ฒ์ ์ง์ ๊ตฌํํด์ผ ํ์ง๋ง, ํ์ผ๊ณผ ์ฅ์น๋ฅผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ค๋ฃฐ ์ ์์ด ํ์ฅ์ฑ์ด ์ข์ต๋๋ค.
- ์ถ์ํ์ ์ฐจ์ด๋ ๊ณง ๊ฐ๋ฐ ๋ฐฉ์๊ณผ ์ฑ๋ฅ, ์ ์ง๋ณด์์ ํฐ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
.png)
.png)
 (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (1).png)
 (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (1) (1).png)
 (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2).png)
 (1) (1) (1) (1) (1) (1) (1) (1) (1) (2).png)