μ£Όλ‹ˆμ–΄ 개발자의 개인 곡뢀 과정을 κΈ°λ‘ν•©λ‹ˆλ‹€.

ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œ

κΈ°μˆ λ©΄μ ‘μ—μ„œ 단골 질문 μ‚¬ν•­μœΌλ‘œ λ‚˜μ˜¨λ‹€κ³  ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œμ— λŒ€ν•΄ κ³΅λΆ€ν•œ λ‚΄μš© 정리해본닀.

ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œλž€?

ν”„λ‘œμ„ΈμŠ€:Β μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° μžμ›μ„ ν• λ‹Ήλ°›μ€Β μž‘μ—…μ˜ λ‹¨μœ„.
μŠ€λ ˆλ“œ:Β ν”„λ‘œμ„ΈμŠ€κ°€ 할당받은 μžμ›μ„ μ΄μš©ν•˜λŠ”Β μ‹€ν–‰ νλ¦„μ˜ λ‹¨μœ„.

μ–΄λ ΅κ²Œλ§Œ 듀릴 수 μžˆλŠ”λ°, ν”„λ‘œμ„ΈμŠ€μ˜ μ •μ˜μ—μ„œΒ μž‘μ—…μ΄λΌλŠ” 단어와 μŠ€λ ˆλ“œμ˜ μ •μ˜μ—μ„œΒ μ‹€ν–‰ νλ¦„μ΄λΌλŠ” 단어λ₯Ό κΈ°μ–΅ν•˜μž.

ν”„λ‘œκ·Έλž¨ β†’ ν”„λ‘œμ„ΈμŠ€ β†’ μŠ€λ ˆλ“œ

ν”„λ‘œκ·Έλž¨ β†’ ν”„λ‘œμ„ΈμŠ€

ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œμ— λŒ€ν•΄ μ΄ν•΄ν•˜κΈ° μœ„ν•΄μ„œλŠ” μš°μ„  ν”„λ‘œκ·Έλž¨μ— λŒ€ν•΄ μ•Œμ•„λ‘˜ ν•„μš”κ°€ μžˆλ‹€. 그럼 ν”„λ‘œκ·Έλž¨μ€ λ¬΄μ—‡μΌκΉŒ? ν”„λ‘œκ·Έλž¨μ΄λž€

  1. μ–΄λ–€ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μ»΄ν“¨ν„°μ—κ²Œ μ£Όμ–΄μ§€λŠ” 처리 방법과 μˆœμ„œλ₯Ό κΈ°μˆ ν•œ 일련의 λͺ…λ Ήλ¬Έμ˜ 집합체 λ˜λŠ”
  2. 파일이 μ €μž₯ μž₯μΉ˜μ— μ €μž₯λ˜μ–΄ μžˆμ§€λ§Œ λ©”λͺ¨λ¦¬μ—λŠ” μ˜¬λΌκ°€ μžˆμ§€ μ•Šμ€ 정적인 μƒνƒœλΌκ³  λ§ν•œλ‹€

ν’€μ–΄μ„œ λ‹€μ‹œ 정리해보면,

  • λ©”λͺ¨λ¦¬μ— μ˜¬λΌκ°€ μžˆμ§€ μ•Šμ€: 아직 μš΄μ˜μ²΄μ œκ°€ ν”„λ‘œκ·Έλž¨μ—κ²Œ 독립적인 λ©”λͺ¨λ¦¬ 곡간을 할당해주지 μ•Šμ•˜λ‹€λŠ” λœ»μ΄λ‹€. λͺ¨λ“  ν”„λ‘œκ·Έλž¨μ€ μš΄μ˜μ²΄μ œκ°€ μ‹€ν–‰λ˜κΈ° μœ„ν•œ λ©”λͺ¨λ¦¬ 곡간을 ν• λ‹Ήν•΄ μ€˜μ•Ό 싀행될 수 μžˆλ‹€.
  • 정적인 μƒνƒœ: 정적(ιœηš„)μ΄λΌλŠ” 단어 κ·ΈλŒ€λ‘œ, 움직이지 μ•ŠλŠ” μƒνƒœλΌλŠ” λœ»μ΄λ‹€. ν•œ λ§ˆλ””λ‘œ 아직 μ‹€ν–‰λ˜μ§€ μ•Šκ³  κ°€λ§Œνžˆ μžˆλ‹€λŠ” λœ»μ΄λ‹€.

κ²°κ΅­ ν”„λ‘œκ·Έλž¨μ΄λΌλŠ” λ‹¨μ–΄λŠ” 아직 μ‹€ν–‰λ˜μ§€ μ•Šμ€, 일련의 λͺ…λ Ήλ¬Έμ˜ 집합체 κ·Έ 자체λ₯Ό κ°€λ¦¬ν‚€λŠ” 말이닀.

일련의 λͺ…λ Ήλ¬Έμ˜ 집합체인 μ‹€ν–‰ 파일(ν”„λ‘œκ·Έλž¨)을 μ‹€ν–‰ μ‹œν‚€λŠ” μˆœκ°„ ν•΄λ‹Ή νŒŒμΌμ€ 컴퓨터 λ©”λͺ¨λ¦¬μ— μ˜¬λΌκ°€κ²Œ 되고, 이 μƒνƒœλ₯ΌΒ λ™μ (ε‹•ηš„)인 μƒνƒœλΌκ³  ν•˜λ©° 이 μƒνƒœμ˜ ν”„λ‘œκ·Έλž¨μ„Β ν”„λ‘œμ„ΈμŠ€λΌκ³  ν•œλ‹€. 즉, ν”„λ‘œμ„ΈμŠ€λΌλŠ” λ‹¨μ–΄λŠ” μž‘μ—… 쀑인 ν”„λ‘œκ·Έλž¨μ„ μ˜λ―Έν•œλ‹€



ν”„λ‘œμ„ΈμŠ€ β†’ μŠ€λ ˆλ“œ

κ³Όκ±°μ—λŠ” ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ μ‹œμž‘λΆ€ν„° μ‹€ν–‰ μ’…λ£ŒκΉŒμ§€ ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€ 만으둜 μ§„ν–‰λ˜μ—ˆλ‹€κ³  ν•œλ‹€. ν•˜μ§€λ§Œ μ‹œκ°„μ΄ 흐λ₯Όμˆ˜λ‘ ν”„λ‘œκ·Έλž¨μ€ λ³΅μž‘ν•΄μ‘Œκ³  ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€λ‘œ μ‹€ν–‰ μ‹œν‚€κΈ°μ—λŠ” λ²…μ°¨κ²Œ λ˜μ—ˆλ‹€. μ‹€μ œλ‘œ ν”„λ‘œκ·Έλž¨μ΄ ν•˜λ‚˜μ˜ μž‘μ—…λ§Œ μ‹€ν–‰ν•˜λŠ” κ²½μš°λŠ” μ—†λ‹€. 그럼 μ–΄λ–»κ²Œ ν•΄μ•Όν• κΉŒ?

ν”„λ‘œμ„ΈμŠ€λ₯Ό μ—¬λŸ¬κ°œ μ‹€ν–‰ν•˜λ©΄ λ˜μ§€ μ•Šμ„κΉŒ? 라고 생각할 수 μžˆμ§€λ§Œ λΆˆκ°€λŠ₯ν–ˆλ‹€. μ™œλƒν•˜λ©΄ μš΄μ˜μ²΄μ œλŠ” μ•ˆμ „μ„±μ„ μœ„ν•΄μ„œ ν”„λ‘œμ„ΈμŠ€λ§ˆλ‹€ μžμ‹ μ—κ²Œ ν• λ‹Ήλœ λ©”λͺ¨λ¦¬ λ‚΄μ˜ μ •λ³΄μ—λ§Œ μ ‘κ·Όν•  수 μžˆλ„λ‘ μ œμ•½μ„ 두고 있고, 이λ₯Ό λ²—μ–΄λ‚˜λŠ” 정보에 μ ‘κ·Όν•˜λ €λ©΄ 였λ₯˜κ°€ λ°œμƒν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

μ•„λ¬΄νŠΌ ν”„λ‘œμ„ΈμŠ€μ™€λŠ” λ‹€λ₯Έ 더 μž‘μ€ μ‹€ν–‰ λ‹¨μœ„ κ°œλ…μ΄ ν•„μš”ν•˜κ²Œ λ˜μ—ˆκ³ , 이 κ°œλ…μ΄ λ°”λ‘œ μŠ€λ ˆλ“œλ‹€.

즉, ν”„λ‘œμ„ΈμŠ€μ˜ ν•œκ³„λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ§Œλ“€μ–΄μ§„ κ°œλ…μ΄ μŠ€λ ˆλ“œλ‹€.
μŠ€λ ˆλ“œλŠ” ν”„λ‘œμ„ΈμŠ€μ˜ μ½”λ“œμ— μ •μ˜λœ μ ˆμ°¨μ— 따라 μ‹€ν–‰λ˜λŠ” νŠΉμ •ν•œ μˆ˜ν–‰ κ²½λ‘œλ‹€.


ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œ


쑰금 더 μžμ„Ένžˆ 풀어보면,
ν”„λ‘œμ„ΈμŠ€κ°€ λ©”λͺ¨λ¦¬μ— 올라갈 λ•Œ μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° μ‹œμŠ€ν…œ μžμ›μ„ ν• λ‹Ήλ°›λŠ”λ° 이 λ•Œ μš΄μ˜μ²΄μ œλŠ” ν”„λ‘œμ„ΈμŠ€λ§ˆλ‹€ 각각 λ…λ¦½λœ λ©”λͺ¨λ¦¬ μ˜μ—­μ„, Code/Data/Stack/Heap의 ν˜•μ‹μœΌλ‘œ ν• λ‹Ήν•΄ μ€€λ‹€. 각각 λ…λ¦½λœ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ ν• λ‹Ήν•΄ μ£ΌκΈ° λ•Œλ¬Έμ— ν”„λ‘œμ„ΈμŠ€λŠ” λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ˜ λ³€μˆ˜λ‚˜ μžλ£Œμ— μ ‘κ·Όν•  수 μ—†λ‹€.

ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œ


반면 μŠ€λ ˆλ“œλŠ” λ©”λͺ¨λ¦¬λ₯Ό μ„œλ‘œ κ³΅μœ ν•  수 μžˆλ‹€. 쑰금 더 μžμ„Ένžˆ 풀어보면, ν”„λ‘œμ„ΈμŠ€κ°€ 할당받은 λ©”λͺ¨λ¦¬ μ˜μ—­ λ‚΄μ—μ„œ Stack ν˜•μ‹μœΌλ‘œ ν• λ‹Ήλœ λ©”λͺ¨λ¦¬ μ˜μ—­μ€ λ”°λ‘œ ν• λ‹Ήλ°›κ³ , λ‚˜λ¨Έμ§€ Code/Data/Heap ν˜•μ‹μœΌλ‘œ ν• λ‹Ήλœ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ κ³΅μœ ν•œλ‹€. λ”°λΌμ„œ 각각의 μŠ€λ ˆλ“œλŠ” λ³„λ„μ˜ μŠ€νƒμ„ 가지고 μžˆμ§€λ§Œ νž™ λ©”λͺ¨λ¦¬λŠ” μ„œλ‘œ 읽고 μ“Έ 수 있게 λœλ‹€.

μ—¬κΈ°μ„œ ν”„λ‘œμ„ΈμŠ€μ™€ μŠ€λ ˆλ“œμ˜ 차이점을 μ•Œ 수 μžˆλ‹€.

  • ν”„λ‘œμ„ΈμŠ€λŠ” 각각의 λ…λ¦½λœ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήλ°›κΈ° λ•Œλ¬Έμ— 였λ₯˜κ°€ λ°œμƒν•΄μ„œ ν”„λ‘œμ„ΈμŠ€κ°€ κ°•μ œλ‘œ μ’…λ£Œλœλ‹€λ©΄, κ³΅μœ ν•˜κ³  μžˆλŠ” νŒŒμΌμ„ μ†μƒμ‹œν‚€λŠ” κ²½μš°κ°€ μ•„λ‹ˆλΌλ©΄ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ—κ²Œ μ•„λ¬΄λŸ° 영ν–₯을 주지 μ•ŠλŠ”λ‹€.

  • μŠ€λ ˆλ“œλŠ” λ©”λͺ¨λ¦¬λ₯Ό κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμ— μ–΄λ–€ μŠ€λ ˆλ“œ ν•˜λ‚˜μ—μ„œ 였λ₯˜κ°€ λ°œμƒν•œλ‹€λ©΄ 같은 ν”„λ‘œμ„ΈμŠ€ λ‚΄μ˜ λ‹€λ₯Έ μŠ€λ ˆλ“œ λͺ¨λ‘κ°€ κ°•μ œλ‘œ μ’…λ£Œλœλ‹€.

✨ tl;dr

  • ν”„λ‘œκ·Έλž¨
    • μ–΄λ–€ μž‘μ—…μ„ ν•˜κΈ° μœ„ν•΄ μ‹€ν–‰ν•  수 μžˆλŠ” 파일 λ˜λŠ” ν”„λ‘œκ·Έλž¨
  • ν”„λ‘œμ„ΈμŠ€
    • λ©”λͺ¨λ¦¬μ— 적재되고 CPU μžμ›μ„ ν• λ‹Ήλ°›μ•„ ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜κ³  μžˆλŠ” μƒνƒœ
  • μŠ€λ ˆλ“œ
    • μ–΄λ– ν•œ ν”„λ‘œκ·Έλž¨ λ‚΄μ—μ„œ, 특히 ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ μ‹€ν–‰λ˜λŠ” νλ¦„μ˜ λ‹¨μœ„

ν”„λ‘œκ·Έλž¨μ€ μ½”λ“œ 덩어리 파일, κ·Έ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•œ 게 ν”„λ‘œμ„ΈμŠ€.

μŠ€λ ˆλ“œλ₯Ό μ½”λ“œ(ν”„λ‘œμ„ΈμŠ€) λ‚΄μ—μ„œμ˜ ν•¨μˆ˜(μŠ€λ ˆλ“œ)에 λΉ—λŒ€μ–΄ ν‘œν˜„ν•΄λ³΄λ©΄ μ΄ν•΄ν•˜κΈ° 훨씬 쉽닀. μ½”λ“œ λ‚΄ μ–΄λ–€ ν•¨μˆ˜ ν•˜λ‚˜μ—μ„œ 였λ₯˜κ°€ λ°œμƒν•˜λ©΄ μ–΄λ–€ ν•¨μˆ˜μ—μ„œ λ°œμƒν–ˆλ“  간에 μž‘μ—…μ„ μ€‘λ‹¨ν•˜κ³  ν”„λ‘œμ„ΈμŠ€ 싀행을 λλ‚΄λ²„λ¦¬λŠ” 것을 μƒκ°ν•˜λ©΄ 보닀 μ΄ν•΄ν•˜κΈ° 쉽닀!


🎁 참고

λ©”λͺ¨λ¦¬ μ˜μ—­

: ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€λŠ” 각각 λ…λ¦½λœ λ©”λͺ¨λ¦¬ μ˜μ—­(Code, Data, Stack, Heap)을 ν• λ‹Ήλ°›λŠ”λ‹€.

μ½”λ“œ(Code) μ˜μ—­:

  • μ½”λ“œ μ˜μ—­μ€ μ‹€ν–‰ν•  ν”„λ‘œκ·Έλž¨μ˜ μ½”λ“œ 및 맀크둜 μƒμˆ˜κ°€ 기계어 ν˜•νƒœλ‘œ μ €μž₯λ˜λŠ” μ˜μ—­μ΄λ‹€. CPUλŠ” μ½”λ“œμ˜μ—­μ— μ €μž₯된 λͺ…λ Ήμ–΄λ₯Ό ν•˜λ‚˜μ”© μ²˜λ¦¬ν•œλ‹€.

데이터(Data) μ˜μ—­:

  • 데이터 μ˜μ—­μ€ μ½”λ“œμ—μ„œ μ„ μ–Έν•œ μ „μ—­ λ³€μˆ˜μ™€ 정적(static) λ³€μˆ˜κ°€ μ €μž₯λ˜λŠ” μ˜μ—­μ΄λ‹€. 데이터 μ˜μ—­μ€ ν”„λ‘œκ·Έλž¨μ˜ μ‹œμž‘κ³Ό ν•¨κ»˜ ν• λ‹Ήλ˜μ–΄ μ’…λ£Œλ  λ•Œ μ†Œλ©Έλœλ‹€.

μŠ€νƒ(Stack) μ˜μ—­:

  • μŠ€νƒ μ˜μ—­μ€ ν•¨μˆ˜ μ•ˆμ—μ„œ μ„ μ–Έλœ μ§€μ—­λ³€μˆ˜, λ§€κ°œλ³€μˆ˜, 리턴값, 등이 μ €μž₯되고 ν•¨μˆ˜ ν˜ΈμΆœμ‹œ κΈ°λ‘ν•˜κ³  μ’…λ£Œλ˜λ©΄ μ œκ±°ν•œλ‹€. μŠ€νƒμ΄λΌλŠ” 자료ꡬ쑰 λͺ…μΉ­μ—μ„œλ„ μ•Œ 수 μžˆλ“―μ΄ ν›„μœ„μ„ μΆœ(LIFO) λ©”μ»€λ‹ˆμ¦˜μ„ λ”°λ₯Έλ‹€.

νž™(Heap) μ˜μ—­:

  • νž™ μ˜μ—­μ€ 관리가 κ°€λŠ₯ν•œ 데이터 μ΄μ™Έμ˜ λ‹€λ₯Έ ν˜•νƒœμ˜ 데이터λ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ 곡간(Free Space)이닀. 이 곡간은 동적 λ©”λͺ¨λ¦¬ ν• λ‹Ή κ³΅κ°„μ΄λ―€λ‘œ μ‚¬μš©μ΄ λλ‚˜λ©΄ μš΄μ˜μ²΄μ œκ°€ μ“Έμˆ˜ μžˆλ„λ‘ λ°˜λ‚©ν•΄μ•Ό ν•œλ‹€. ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰ν•˜λŠ” μˆœκ°„ ν”„λ‘œκ·Έλž¨μ΄ μ‚¬μš©ν•  λ©”λͺ¨λ¦¬ 크기λ₯Ό κ³ λ €ν•˜μ—¬ λ©”λͺ¨λ¦¬μ˜ 할당이 μ΄λ£¨μ–΄μ§€λŠ” 데이터 λ˜λŠ” μŠ€νƒκ³Ό 같은 정적 λ©”λͺ¨λ¦¬ ν• λ‹Ήκ³ΌλŠ” λŒ€μ‘°μ μ΄λ‹€. 동적 λ©”λͺ¨λ¦¬ 할당은 μ–΄λŠ μ‹œμ μ— μ–΄λŠ μ •λ„μ˜ 곡간을 ν• λ‹Ήν•  수 μžˆμ„μ§€ μ •ν™•νžˆκ²Œ μ˜ˆμΈ‘ν•  수 μ—†μœΌλ―€λ‘œ, λŸ°νƒ€μž„μ— 확인가λŠ₯ν•˜λ‹€.