Home > CS > 2024 > πŸ’Ύ [CS] ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 원리λ₯Ό μ„€λͺ…ν•˜κΈ° μœ„ν•΄μ„œλŠ” 컴퓨터 과학을 이해해야 ν• κΉŒμš”?

πŸ’Ύ [CS] ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 원리λ₯Ό μ„€λͺ…ν•˜κΈ° μœ„ν•΄μ„œλŠ” 컴퓨터 과학을 이해해야 ν• κΉŒμš”?
CS

πŸ’Ύ [CS] ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 원리λ₯Ό μ„€λͺ…ν•˜κΈ° μœ„ν•΄μ„œλŠ” 컴퓨터 κ³Όν•™(Computer Science)을 이해해야 ν• κΉŒμš”?

  • ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ 원리λ₯Ό μžμ„Ένžˆ μ΄ν•΄ν•˜λ €λ©΄ 컴퓨터 κ³Όν•™(Computer Science)의 μ—¬λŸ¬ κ°œλ…λ“€μ„ μ΄ν•΄ν•˜λŠ” 것이 맀우 μ€‘μš”ν•©λ‹ˆλ‹€.
  • 컴퓨터 κ³Όν•™(Computer Science)은 ν”„λ‘œκ·Έλž¨μ΄ μ–΄λ–»κ²Œ μž‘μ„±λ˜κ³ , 컴파일되며, μ‹€ν–‰λ˜λŠ”μ§€λ₯Ό μ„€λͺ…ν•˜λŠ” λ‹€μ–‘ν•œ 원리와 κΈ°μˆ μ„ λ‹€λ£Ήλ‹ˆλ‹€.
  • ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ 원리λ₯Ό μ΄ν•΄ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ 컴퓨터 κ³Όν•™(Computer Science)의 κ°œλ…λ“€μ€ 컴퓨터 아킀텍쳐(Computer Architecture), 운영 체제(Operating System, OS), 데이터 ꡬ쑰(Data Structure), μ•Œκ³ λ¦¬μ¦˜(Algorithm) 등이 μžˆμŠ΅λ‹ˆλ‹€.

1️⃣ ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ 원리.

  • ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ 과정은 μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” λ‹¨κ³„μ—μ„œλΆ€ν„° ν”„λ‘œκ·Έλž¨μ΄ μ‹€μ œλ‘œ CPUμ—μ„œ μ‹€ν–‰λ˜λŠ” λ‹¨κ³„κΉŒμ§€λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.
    • 이 과정은 λ‹€μŒκ³Ό 같은 μ£Όμš” λ‹¨κ³„λ‘œ λ‚˜λˆŒ 수 μžˆμŠ΅λ‹ˆλ‹€.

1️⃣ μ½”λ“œ μž‘μ„±(Programming)

  • κ°œλ°œμžκ°€ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ μ†ŒμŠ€ μ½”λ“œλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.
  • μ†ŒμŠ€ μ½”λ“œλŠ” ν…μŠ€νŠΈ 파일둜 μ €μž₯되며, μ‚¬λžŒμ΄ 읽고 이해할 수 μžˆλŠ” ν˜•νƒœμž…λ‹ˆλ‹€.

2️⃣ 컴파일 λ˜λŠ” μΈν„°ν”„λ¦¬νŠΈ(Compilation or Interpretation)

  • ν”„λ‘œκ·Έλž¨μ΄ μž‘μ„±λœ ν›„, 컴파일러(Compiler) λ˜λŠ” 인터프리터(Interpreter)κ°€ μ†ŒμŠ€ μ½”λ“œ(Source Code)λ₯Ό λ¨Έμ‹  μ½”λ“œ(Machine Code)둜 λ³€ν™˜ν•©λ‹ˆλ‹€.
  • 컴파일러(Compiler)λŠ” μ†ŒμŠ€ μ½”λ“œλ₯Ό ν•œ λ²ˆμ— μ „μ²΄μ μœΌλ‘œ λ²ˆμ—­ν•˜μ—¬ μ‹€ν–‰ νŒŒμΌμ„ μƒμ„±ν•˜λŠ” 반면, 인터프리터(Interpreter)λŠ” μ½”λ“œλ₯Ό ν•œ 쀄씩 읽고 λ²ˆμ—­ν•˜λ©΄μ„œ μ¦‰μ‹œ μ‹€ν–‰ν•©λ‹ˆλ‹€.
  • 이 κ³Όμ •μ—μ„œλŠ” μ–΄νœ˜ 뢄석, ꡬ문 뢄석, μ½”λ“œ μ΅œμ ν™” λ“±μ˜ 과정이 ν¬ν•¨λ©λ‹ˆλ‹€.

πŸ“ μ–΄νœ˜ 뢄석(Lexical Analysis)

컴파일 κ³Όμ •μ˜ 첫 번째 λ‹¨κ³„λ‘œ, μ†ŒμŠ€ μ½”λ“œμ—μ„œ 문자(character)λ“€μ˜ 연속을 의미 μžˆλŠ” λ‹¨μœ„μΈ 토큰(Token)으둜 λΆ„ν•΄ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€.
이 κ³Όμ •μ—μ„œ μ–΄νœ˜ 뢄석기(Lexer) λ˜λŠ” μŠ€μΊλ„ˆ(Scanner)κ°€ μ‚¬μš©λ˜λ©°, μ†ŒμŠ€ μ½”λ“œμ˜ ν…μŠ€νŠΈλ₯Ό 읽어듀여 ν‚€μ›Œλ“œ, μ‹λ³„μž, μ—°μ‚°μž, λ¦¬ν„°λŸ΄ λ“±μ˜ 토큰을 μƒμ„±ν•©λ‹ˆλ‹€.

πŸ“ ꡬ문 뢄석(Syntax Analysis)

컴파일 κ³Όμ •μ˜ 두 번째 λ‹¨κ³„λ‘œ, μ–΄νœ˜ 뢄석(Lexical Analysis)μ—μ„œ μƒμ„±λœ 토큰(Token)듀을 λ°›μ•„μ„œ μ†ŒμŠ€ μ½”λ“œκ°€ λ¬Έλ²•μ μœΌλ‘œ μ˜¬λ°”λ₯Έμ§€ ν™•μΈν•˜κ³ , 이λ₯Ό ꡬ쑰적으둜 ν‘œν˜„ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€.

ꡬ문 λΆ„μ„κΈ°λŠ” νŒŒμ„œ(Parser)라고도 ν•˜λ©°, ν”„λ‘œκ·Έλž¨ μ†ŒμŠ€ μ½”λ“œλ₯Ό ꡬ문 트리(Syntax Tree) λ˜λŠ” νŒŒμ‹± 트리(Parsing Tree)λΌλŠ” 트리 ꡬ쑰둜 λ³€ν™˜ν•©λ‹ˆλ‹€.

3️⃣ ν”„λ‘œκ·Έλž¨ λ‘œλ“œ(Program Loading)

  • 컴파일된 μ‹€ν–‰ 파일이 운영체제(Operating System, OS)에 μ˜ν•΄ λ©”λͺ¨λ¦¬μ— λ‘œλ“œλ©λ‹ˆλ‹€.
  • 운영체제(Operating System, OS)λŠ” ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜κΈ° μœ„ν•΄ ν•„μš”ν•œ λ©”λͺ¨λ¦¬ 곡간을 ν• λ‹Ήν•˜κ³ , ν•„μš”ν•œ 라이브러리(Library) 및 λͺ¨λ“ˆ(Module)을 λ‘œλ“œν•©λ‹ˆλ‹€.

πŸ™‹β€β™‚οΈ 라이브러리(Library)와 ν”„λ ˆμž„μ›Œν¬(Framework)의 차이점.
πŸ™‹β€β™‚οΈ λͺ¨λ“ˆκ³Ό μ»΄ν¬λ„ŒνŠΈλ₯Ό 레고 블둝에 λΉ„μœ ν•΄λ³΄λ©΄?!
πŸ™‹β€β™‚οΈ μ†Œν”„νŠΈμ›¨μ–΄ κ³΅ν•™μ—μ„œμ˜ λͺ¨λ“ˆ.

4️⃣ ν”„λ‘œκ·Έλž¨ μ‹€ν–‰(Program Execution)

  • ν”„λ‘œκ·Έλž¨μ΄ λ©”λͺ¨λ¦¬μ— λ‘œλ“œλœ ν›„, CPUκ°€ ν”„λ‘œκ·Έλž¨μ˜ λͺ…λ Ήμ–΄λ₯Ό ν•˜λ‚˜μ”© 읽고 μ‹€ν–‰ν•©λ‹ˆλ‹€.
  • CPUλŠ” λͺ…λ Ήμ–΄ 사이클(Fetch-Decode-Execute)을 λ°˜λ³΅ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ˜ λͺ…λ Ήμ–΄λ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€.

πŸ“ λͺ…λ Ήμ–΄ 사이클(Fetch-Decode-Execute Cycle)

λͺ…λ Ήμ–΄ 사이클(Fetch-Decode-Execute Cycle)은 μ»΄ν“¨ν„°μ˜ CPUκ°€ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λŠ” 기본적인 μž‘λ™ 과정을 μ„€λͺ…ν•˜λŠ” κ°œλ…μž…λ‹ˆλ‹€.
μ΄λŠ” CPUκ°€ λ©”λͺ¨λ¦¬μ— μ €μž₯된 λͺ…λ Ήμ–΄λ₯Ό 가져와(Fetch), ν•΄μ„ν•˜κ³ (Decode), μ‹€ν–‰(Execute)ν•˜λŠ” 일련의 단계λ₯Ό λ°˜λ³΅ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ„ μ²˜λ¦¬ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.
λͺ¨λ“  ν”„λ‘œκ·Έλž¨μ€ 이 λͺ…λ Ήμ–΄ 사이클(Fetch-Decode-Excute Cycle)을 톡해 μ‹€ν–‰λ˜λ©°, 각 λ‹¨κ³„μ—μ„œ CPUλŠ” νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ˜ λͺ…λ Ήμ–΄λ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€.

  • μ‹€ν–‰ 쀑인 ν”„λ‘œκ·Έλž¨μ€ 운영체제(Operating System, OS)에 μ˜ν•΄ ν”„λ‘œμ„ΈμŠ€(Process)둜 κ΄€λ¦¬λ˜λ©°, μš΄μ˜μ²΄μ œλŠ” ν”„λ‘œμ„ΈμŠ€ μŠ€μΌ€μ€„λ§(Process Scheduling)을 톡해 CPU μ‹œκ°„μ„ ν• λ‹Ήν•©λ‹ˆλ‹€.

πŸ“ ν”„λ‘œμ„ΈμŠ€ μŠ€μΌ€μ€„λ§(Process Scheduling)

운영체제(Operating System, OS)κ°€ ν”„λ‘œμ„ΈμŠ€(Process)λ₯Ό CPU에 ν• λ‹Ήν•˜μ—¬ μ‹€ν–‰ μˆœμ„œλ₯Ό κ²°μ •ν•˜λŠ” μž‘μ—…μ„ λ§ν•©λ‹ˆλ‹€.
컴퓨터 μ‹œμŠ€ν…œμ—μ„œ λ™μ‹œμ— μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€κ°€ 싀행을 λŒ€κΈ°ν•˜κ³  μžˆμ„ λ•Œ, ν•œμ •λœ CPU μžμ›μ„ 효율적으둜 κ΄€λ¦¬ν•˜κ³ , ν”„λ‘œμ„ΈμŠ€λ“€μ„ 효과적으둜 μ‹€ν–‰ν•  수 μžˆλ„λ‘ μŠ€μΌ€μ€„λ§(Scheduling)ν•˜λŠ” 것이 ν•„μš”ν•©λ‹ˆλ‹€.

μŠ€μΌ€μ€„λŸ¬(Scheduler)λŠ” μ–΄λ–€ ν”„λ‘œμ„ΈμŠ€(Process)κ°€ μ–Έμ œ, μ–Όλ§ˆλ‚˜ μ˜€λž«λ™μ•ˆ CPUλ₯Ό μ‚¬μš©ν• μ§€ κ²°μ •ν•˜λ©°, 이λ₯Ό 톡해 λ©€ν‹°νƒœμŠ€ν‚Ή ν™˜κ²½μ—μ„œ μ—¬λŸ¬ ν”„λ‘œμ„ΈμŠ€κ°€ λ™μ‹œμ— μ‹€ν–‰λ˜λŠ” κ²ƒμ²˜λŸΌ 보이도둝 ν•©λ‹ˆλ‹€.

πŸ“ λ©€ν‹°νƒœμŠ€ν‚Ή(Multitasking)

컴퓨터가 λ™μ‹œμ— μ—¬λŸ¬ μž‘μ—…(ν”„λ‘œμ„ΈμŠ€ λ˜λŠ” ν”„λ‘œκ·Έλž¨)을 μ‹€ν–‰ν•˜λŠ” κΈ°λŠ₯을 μ˜λ―Έν•©λ‹ˆλ‹€.
μ΄λŠ” μ‚¬μš©μžκ°€ μ—¬λŸ¬ ν”„λ‘œκ·Έλž¨μ„ λ™μ‹œμ— μ‹€ν–‰ν•˜κ±°λ‚˜, μš΄μ˜μ²΄μ œκ°€ λ°±κ·ΈλΌμš΄λ“œμ—μ„œ μ—¬λŸ¬ μž‘μ—…μ„ λ³‘λ ¬λ‘œ μˆ˜ν–‰ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.
λ©€ν‹°νƒœμŠ€ν‚Ή 덕뢄에 μ‚¬μš©μžλ“€μ€ μ—¬λŸ¬ 개의 ν”„λ‘œκ·Έλž¨μ„ λ™μ‹œμ— μ‚¬μš©ν•  수 μžˆλŠ” ν™˜κ²½μ„ κ²½ν—˜ν•˜κ²Œ λ©λ‹ˆλ‹€.

μ‹€μ œλ‘œλŠ” CPUκ°€ μ—¬λŸ¬ μž‘μ—…μ„ λΉ λ₯΄κ²Œ μ „ν™˜ν•˜λ©΄μ„œ λ™μ‹œμ— μ—¬λŸ¬ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” κ²ƒμ²˜λŸΌ 보이게 ν•˜λŠ” λ°©μ‹μœΌλ‘œ κ΅¬ν˜„λ©λ‹ˆλ‹€.
각 μž‘μ—…μ€ μ•„μ£Ό 짧은 μ‹œκ°„ λ™μ•ˆ CPUλ₯Ό μ‚¬μš©ν•˜κ³ , 이후 λ‹€λ₯Έ μž‘μ—…μœΌλ‘œ μ „ν™˜λ˜λŠ” 과정을 λ°˜λ³΅ν•©λ‹ˆλ‹€
이λ₯Ό 톡해 μ—¬λŸ¬ κ°–κ²…λΉ„ λ™μ‹œμ— μ§„ν–‰λ˜λŠ” κ²ƒμ²˜λŸΌ 보이게 λ©λ‹ˆλ‹€.

5️⃣ λ©”λͺ¨λ¦¬ 및 μžμ› 관리(Resource Management)

  • ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑에 ν•„μš”ν•œ λ©”λͺ¨λ¦¬, 파일, λ„€νŠΈμ›Œν¬ μ—°κ²° λ“± λ‹€μ–‘ν•œ μžμ›λ“€μ΄ 운영체제(Operating System, OS)에 μ˜ν•΄ κ΄€λ¦¬λ©λ‹ˆλ‹€.
  • 운영체제(Operating System, OS)λŠ” ν”„λ‘œκ·Έλž¨μ΄ μ‚¬μš©ν•˜λŠ” μžμ›μ„ μΆ”μ ν•˜κ³ , μΆ©λŒμ΄λ‚˜ 좩돌이 λ°œμƒν•˜μ§€ μ•Šλ„λ‘ ν•©λ‹ˆλ‹€.
    • 이 κ³Όμ •μ—μ„œ 가비지 μ»¬λ ‰μ…˜μ΄λ‚˜ λ©”λͺ¨λ¦¬ ν•΄μ œλ“±μ˜ μž‘μ—…λ„ μˆ˜ν–‰λ  수 μžˆμŠ΅λ‹ˆλ‹€.

2️⃣ 컴퓨터 κ³Όν•™μ˜ κ°œλ…μ΄ ν”„λ‘œκ·Έλž¨μ˜ 싀행에 λ―ΈμΉ˜λŠ” 영ν–₯.

  • μœ„μ˜ 단계듀을 μžμ„Ένžˆ μ΄ν•΄ν•˜κΈ° μœ„ν•΄μ„œλŠ” 컴퓨터 κ³Όν•™(Computer Science)의 μ—¬λŸ¬ 뢄야에 λŒ€ν•œ 이해가 ν•„μš”ν•©λ‹ˆλ‹€.

1️⃣ 컴퓨터 아킀텍쳐(Computer Architecture)

  • 컴퓨터 μ•„ν‚€ν…μ²˜(Computer Architecture)λŠ” CPU, λ©”λͺ¨λ¦¬, I/O μž₯μΉ˜μ™€ 같은 컴퓨터 ν•˜λ“œμ›¨μ–΄μ˜ ꡬ쑰와 μž‘λ™ 방식을 μ„€λͺ…ν•©λ‹ˆλ‹€.
  • ν”„λ‘œκ·Έλž¨μ΄ 싀행될 λ•Œ CPUκ°€ λͺ…λ Ήμ–΄λ₯Ό μ–΄λ–»κ²Œ μ²˜λ¦¬ν•˜λŠ”μ§€, λ©”λͺ¨λ¦¬μ— 데이터가 μ–΄λ–»κ²Œ μ €μž₯되고 μ ‘κ·Όλ˜λŠ”μ§€λ₯Ό μ΄ν•΄ν•˜λ €λ©΄ 컴퓨터 아킀텍쳐(Computer Architecture) 지식이 ν•„μš”ν•©λ‹ˆλ‹€.
  • 예λ₯Ό λ“€μ–΄, μΊμ‹œ λ©”λͺ¨λ¦¬, νŒŒμ΄ν”„λΌμΈ, 병렬 처리 같은 ν”„λ‘œκ·Έλž¨μ˜ μ„±λŠ₯에 큰 영ν–₯을 λ―ΈμΉ  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“ μΊμ‹œ λ©”λͺ¨λ¦¬(Cache Memory)

CPU와 메인 λ©”λͺ¨λ¦¬(Random Access Memory, RAM) 사이에 μœ„μΉ˜ν•œ κ³ μ†μ˜ μž‘μ€ 크기의 λ©”λͺ¨λ¦¬λ‘œ, 자주 μ‚¬μš©λ˜λŠ” λ°μ΄ν„°λ‚˜ λͺ…λ Ήμ–΄λ₯Ό μΌμ‹œμ μœΌλ‘œ λ°μ΄ν„°λ‚˜ λͺ…λ Ήμ–΄λ₯Ό μΌμ‹œμ μœΌλ‘œ μ €μž₯ν•˜μ—¬ CPUκ°€ λΉ λ₯΄κ²Œ μ ‘κ·Όν•  수 μžˆλ„λ‘ ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.
μΊμ‹œ λ©”λͺ¨λ¦¬(Cache Memory)λŠ” 메인 λ©”λͺ¨λ¦¬(Random Access Memory, RAM)보닀 μ ‘κ·Ό 속도가 훨씬 λΉ λ₯΄κΈ° λ•Œλ¬Έμ—, ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ μ‹œ ν•„μš”ν•œ 데이터와 λͺ…λ Ήμ–΄λ₯Ό 더 빨리 읽어 듀일 수 μžˆλ„λ‘ ν•΄μ€λ‹ˆλ‹€.

πŸ“ νŒŒμ΄ν”„λΌμΈ(Pipline)

νŒŒμ΄ν”„λΌμΈ(Pipline)은 μ—¬λŸ¬ μž‘μ—…μ„ μ—°μ†μ μœΌλ‘œ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ 각 μž‘μ—…μ„ μ—¬λŸ¬ λ‹¨κ³„λ‘œ λ‚˜λˆ„κ³ , λ™μ‹œμ— μ²˜λ¦¬ν•  수 μžˆλ„λ‘ μ„€κ³„ν•œ κΈ°μˆ μ„ μ˜λ―Έν•©λ‹ˆλ‹€.
νŒŒμ΄ν”„λΌμΈ(Pipline)은 μ»΄ν“¨ν„°μ˜ CPU μ„€κ³„μ—μ„œ 주둜 μ‚¬μš©λ˜λ©°, λͺ…λ Ήμ–΄λ₯Ό μ—¬λŸ¬ λ‹¨κ³„λ‘œ λ‚˜λˆ„μ–΄ 각 단계가 λ³‘λ ¬λ‘œ 싀행될 수 있게 ν•¨μœΌλ‘œμ¨ 처리 속도λ₯Ό λ†’μ΄λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

2️⃣ 운영체제(Operating System)

  • 운영체제(Operating System)λŠ” ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜κΈ° μœ„ν•œ ν™˜κ²½μ„ μ œκ³΅ν•˜κ³ , ν”„λ‘œμ„ΈμŠ€ 관리, λ©”λͺ¨λ¦¬ 관리, 파일 μ‹œμŠ€ν…œ 관리 등을 λ‹΄λ‹Ήν•©λ‹ˆλ‹€.
  • ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ 원리λ₯Ό μ΄ν•΄ν•˜λ €λ©΄ 운영체제(Operating System, OS)κ°€ μ–΄λ–»κ²Œ ν”„λ‘œμ„ΈμŠ€λ₯Ό μŠ€μΌ€μ₯΄λ§ν•˜κ³ , λ©”λͺ¨λ¦¬λ₯Ό κ΄€λ¦¬ν•˜λ©°, μž…μΆœλ ₯(I/O) μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ”μ§€μ— λŒ€ν•œ 지식이 ν•„μš”ν•©λ‹ˆλ‹€.
  • 예λ₯Ό λ“€μ–΄, ν”„λ‘œκ·Έλž¨μ΄ λ™μ‹œμ— 싀행될 λ•Œ λ©€ν‹°νƒœμŠ€ν‚Ήκ³Ό μŠ€λ ˆλ“œ 관리가 μ–΄λ–»κ²Œ μ΄λ£¨μ–΄μ§€λŠ”μ§€ 이해해야 ν•©λ‹ˆλ‹€.

3️⃣ 컴파일러 이둠(Compiler Theory)

  • 컴파일러(Compiler)λŠ” μ†ŒμŠ€ μ½”λ“œ(Source Code)λ₯Ό κΈ°κ³„μ–΄λ‘œ λ³€ν™˜ν•˜λŠ” ν”„λ‘œκ·Έλž¨μœΌλ‘œ, 컴파일러 이둠은 이 κ³Όμ •μ˜ μ–΄νœ˜ 뢄석, ꡬ문 뢄석, μ΅œμ ν™” λ“± λ‹€μ–‘ν•œ 간계λ₯Ό μ„€λͺ…ν•©λ‹ˆλ‹€.
  • ν”„λ‘œκ·Έλž¨μ΄ μ–΄λ–»κ²Œ μ΅œμ ν™”λ˜μ–΄ 더 λΉ λ₯΄κ²Œ 싀행될 수 μžˆλŠ”μ§€, μ–΄λ–€ μ½”λ“œκ°€ 더 νš¨μœ¨μ μΈμ§€λ₯Ό μ΄ν•΄ν•˜λ €λ©΄ 컴파일러(Compiler) 이둠의 지식이 ν•„μš”ν•©λ‹ˆλ‹€.

πŸ“ 컴파일러(Compiler)

ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ‘œ μž‘μ„±λœ μ†ŒμŠ€μ½”λ“œλ₯Ό κΈ°κ³„μ–΄λ‘œ λ²ˆμ—­ν•˜μ—¬ μ‹€ν–‰ κ°€λŠ₯ν•œ ν”„λ‘œκ·Έλž¨μœΌλ‘œ λ§Œλ“œλŠ” μ†Œν”„νŠΈμ›¨μ–΄μž…λ‹ˆλ‹€.
μ‚¬λžŒμ΄ 읽고 μž‘μ„±ν•œ κ³ μˆ˜μ€€ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄(예: C, C++, Java, Python)λ₯Ό 컴퓨터가 이해할 수 μžˆλŠ” μ €μˆ˜μ€€ μ–Έμ–΄(기계어, λ°”μ΄λ„ˆλ¦¬ μ½”λ“œ)둜 λ³€ν™˜ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.

μ»΄νŒŒμΌλŸ¬λŠ” ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜κΈ° 전에 ν•œ λ²ˆμ— 전체 μ†ŒμŠ€ μ½”λ“œλ₯Ό λ²ˆμ—­ν•˜κ³ , κ·Έ κ²°κ³Όλ₯Ό μ‹€ν–‰ 파일(Executable File)둜 μƒμ„±ν•©λ‹ˆλ‹€.
이 νŒŒμΌμ€ 운영체제(Operating System, OS)μ—μ„œ 직접 싀행될 수 있으며, μ΄ν›„μ—λŠ” λ³„λ„μ˜ κ³Όμ • 없이 λ°”λ‘œ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

4️⃣ 데이터 ꡬ쑰(Data Structures)

  • ν”„λ‘œκ·Έλž¨μ€ 데이터λ₯Ό 효율적으둜 μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ λ‹€μ–‘ν•œ 데이터 ꡬ쑰λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
  • λ°°μ—΄(Array), μ—°κ²° 리슀트(Linked List), μŠ€νƒ(Stack), 큐(Queue), 트리(Tree), ν•΄μ‹œ ν…Œμ΄λΈ”(Hash Table) λ“±κ³Ό 같은 데이터 κ΅¬μ‘°λŠ” ν”„λ‘œκ·Έλž¨μ΄ 데이터λ₯Ό μ²˜λ¦¬ν•˜κ³  μ €μž₯ν•˜λŠ” 방식에 큰 영ν–₯을 λ―ΈμΉ©λ‹ˆλ‹€.
  • ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ 속도와 λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ μ΅œμ ν™”ν•˜λ €λ©΄ μ–΄λ–€ 데이터 ꡬ쑰가 μ ν•©ν•œμ§€ μ΄ν•΄ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.

5️⃣ μ•Œκ³ λ¦¬μ¦˜(Algorithms)

  • μ•Œκ³ λ¦¬μ¦˜μ€ 문제λ₯Ό ν•΄κ²°ν•˜λŠ” μ ˆμ°¨λ‚˜ λ°©λ²•μœΌλ‘œ, ν”„λ‘œκ·Έλž¨μ˜ 핡심 λ‘œμ§μ„ κ΅¬μ„±ν•©λ‹ˆλ‹€.
  • μ •λ ¬, 검색, κ·Έλž˜ν”„ 탐색, 동적 ν”„λ‘œκ·Έλž˜λ° λ“± λ‹€μ–‘ν•œ μ•Œκ³ λ¦¬μ¦˜μ΄ 있으며, 효율적인 μ•Œκ³ λ¦¬μ¦˜μ„ μ„€κ³„ν•˜λŠ” 것은 ν”„λ‘œκ·Έλž¨μ˜ μ„±λŠ₯에 직접적인 영ν–₯을 μ€λ‹ˆλ‹€.
  • μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„ λ³΅μž‘λ„μ™€ 곡간 λ³΅μž‘λ„λ₯Ό μ΄ν•΄ν•˜λŠ” 것은 ν”„λ‘œκ·Έλž¨μ΄ μ–΄λ–€ μ†λ„λ‘œ μ‹€ν–‰λ˜κ³  μ–Όλ§ˆλ‚˜ λ§Žμ€ μžμ›μ„ μ‚¬μš©ν•˜λŠ”μ§€λ₯Ό νŒŒμ•…ν•˜λŠ” 데 μ€‘μš”ν•©λ‹ˆλ‹€.

6️⃣ 컴퓨터 λ„€νŠΈμ›Œν‚Ή(Computer Networking)

  • λ„€νŠΈμ›Œν¬λ₯Ό ν†΅ν•œ 데이터 전솑이 ν•„μš”ν•œ ν”„λ‘œκ·Έλž¨(예: μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜, ν΄λΌμš°λ“œ μ„œλΉ„μŠ€ λ“±)은 λ„€νŠΈμ›Œν¬ ν”„λ‘œν† μ½œκ³Ό 데이터 전솑 방식을 이해해야 ν•©λ‹ˆλ‹€.
  • ν”„λ‘œκ·Έλž¨μ΄ 데이터λ₯Ό μ–΄λ–»κ²Œ μ „μ†‘ν•˜κ³  μˆ˜μ‹ ν•˜λŠ”μ§€, λ„€νŠΈμ›Œν¬ λŒ€κΈ° μ‹œκ°„μ΄ ν”„λ‘œκ·Έλž¨μ˜ μ„±λŠ₯에 μ–΄λ–»κ²Œ 영ν–₯을 λ―ΈμΉ˜λŠ”μ§€λ₯Ό μ΄ν•΄ν•˜λ €λ©΄ λ„€νŠΈμ›Œν¬μ— λŒ€ν•œ 지식이 ν•„μš”ν•©λ‹ˆλ‹€.

3️⃣ ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 원리와 컴퓨터 κ³Όν•™μ˜ 관계.

  • ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ μ›λ¦¬λŠ” 컴퓨터 κ³Όν•™μ˜ μ—¬λŸ¬ ν•˜μœ„ λΆ„μ•Όκ°€ ν˜‘λ ₯ν•˜μ—¬ μž‘λ™ν•˜λŠ” 볡합적인 κ³Όμ •μž…λ‹ˆλ‹€.
  • ν”„λ‘œκ·Έλž¨μ΄ 싀행될 λ•Œ, 컴퓨터 아킀텍쳐, 운영체제, 컴파일러, 데이터 ꡬ쑰, μ•Œκ³ λ¦¬μ¦˜μ΄ μ„œλ‘œ 맞물렀 μž‘λ™ν•˜λ©΄μ„œ ν”„λ‘œκ·Έλž¨μ΄ 효율적으둜 μ‹€ν–‰λ˜λ„λ‘ ν•©λ‹ˆλ‹€.
  • λ”°λΌμ„œ ν”„λ‘œκ·Έλž¨μ΄ μ–΄λ–»κ²Œ λ©”λͺ¨λ¦¬μ— λ‘œλ“œλ˜κ³ , CPUμ—μ„œ 처리되며, μžμ›μ΄ κ΄€λ¦¬λ˜λŠ”μ§€μ— λŒ€ν•΄ 깊이 μ΄ν•΄ν•˜λ €λ©΄ 컴퓨터 κ³Όν•™μ˜ 핡심 κ°œλ…λ“€μ„ 곡뢀해야 ν•©λ‹ˆλ‹€.

4️⃣ μš”μ•½.

  • ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ 원리λ₯Ό 깊이 μ΄ν•΄ν•˜λ €λ©΄ 컴퓨터 κ³Όν•™(Computer Science)의 λ‹€μ–‘ν•œ κ°œλ…μ„ μ•Œμ•„μ•Ό ν•©λ‹ˆλ‹€.
  • 컴퓨터 과학은 컴퓨터 아킀텍쳐, 운영체제, 컴파일러, 데이터 ꡬ쑰, μ•Œκ³ λ¦¬μ¦˜, λ„€νŠΈμ›Œν¬ 등을 ν¬ν•¨ν•˜λŠ” 폭넓은 ν•™λ¬ΈμœΌλ‘œ, ν”„λ‘œκ·Έλž¨μ΄ μ–΄λ–»κ²Œ μž‘μ„±λ˜κ³ , 컴파일되며, μ‹€ν–‰λ˜λŠ”μ§€ μ„€λͺ…ν•˜λŠ” 데 ν•„μš”ν•œ λͺ¨λ“  이둠적 κΈ°λ°˜μ„ μ œκ³΅ν•©λ‹ˆλ‹€.
  • ν”„λ‘œκ·Έλž¨ μ‹€ν–‰μ˜ 각 λ‹¨κ³„λŠ” 컴퓨터 κ³Όν•™μ˜ μ—¬λŸ¬ κ°œλ…μ΄ μƒν˜Έμž‘μš©ν•˜λŠ” 결과이며, μ΄λŸ¬ν•œ 지식을 κ°–μΆ”λ©΄ ν”„λ‘œκ·Έλž¨μ„ μ΅œμ ν™”ν•˜κ³  효율적으둜 μ„€κ³„ν•˜λŠ” 데 큰 도움이 λ©λ‹ˆλ‹€.