λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

λ©”λͺ¨λ¦¬ ꡬ쑰 λ©”μ†Œλ“œ(Method), μŠ€νƒ(Stack), νž™(Heap) μ˜μ—­μ— λŒ€ν•˜μ—¬

by 5566 2023. 8. 21.

1. κ°œμš”

λ©”λͺ¨λ¦¬ ꡬ쑰의 μ΄ν•΄λŠ” ν”„λ‘œκ·Έλž˜λ°κ³Ό μ‹œμŠ€ν…œ κ°œλ°œμ— μžˆμ–΄μ„œ ꡉμž₯히 μ€‘μš”ν•©λ‹ˆλ‹€. ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λ©΄ μ»΄ν“¨ν„°μ˜ λ©”λͺ¨λ¦¬μ— ν•΄λ‹Ή ν”„λ‘œκ·Έλž¨μ΄ μ˜¬λΌκ°€κ²Œ 되고, μ΄λ•Œ λ©”μ†Œλ“œ(Method), μŠ€νƒ(Stack), νž™(Heap)μ΄λΌλŠ” μ„Έ 가지 μ˜μ—­μ΄ μ‚¬μš©λ©λ‹ˆλ‹€. 각각의 μ˜μ—­μ€ ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑에 λ‹€μ–‘ν•œ 역할을 μˆ˜ν–‰ν•˜λ©° μ€‘μš”ν•œ 역할을 ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

이 κΈ€μ—μ„œλŠ” λ©”μ†Œλ“œ, μŠ€νƒ, νž™ μ˜μ—­μ— λŒ€ν•΄μ„œ μ΄ν•΄ν•˜κΈ° μ‰½κ²Œ μ„€λͺ…ν•˜κ³ μž ν•©λ‹ˆλ‹€. λ©”μ†Œλ“œλŠ” ν”„λ‘œκ·Έλž¨μ˜ ν•¨μˆ˜ λ˜λŠ” λ©”μ†Œλ“œ μ •μ˜κ°€ μ €μž₯λ˜λŠ” μ˜μ—­μ΄λ©°, μŠ€νƒμ€ ν•¨μˆ˜ 호좜과 κ΄€λ ¨λœ 데이터λ₯Ό μ €μž₯ν•˜λŠ” μ˜μ—­μž…λ‹ˆλ‹€. λ§ˆμ§€λ§‰μœΌλ‘œ, νž™μ€ λ™μ μœΌλ‘œ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήλ°›μ•„ 객체가 μ €μž₯λ˜λŠ” κ³΅κ°„μž…λ‹ˆλ‹€.

각각의 μ˜μ—­μ— λŒ€ν•œ ꡬ쑰와 λ™μž‘μ— λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

λ©”λͺ¨λ¦¬ ꡬ쑰의 μ΄ν•΄μ˜ ν•„μš”μ„±

ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜κ±°λ‚˜ μ‹œμŠ€ν…œμ„ κ°œλ°œν•˜λŠ” κ³Όμ •μ—μ„œ λ©”λͺ¨λ¦¬ ꡬ쑰의 μ΄ν•΄λŠ” 맀우 μ€‘μš”ν•©λ‹ˆλ‹€. λ©”λͺ¨λ¦¬ ꡬ쑰λ₯Ό μ œλŒ€λ‘œ μ΄ν•΄ν•˜λ©΄, λ©”λͺ¨λ¦¬ μ‚¬μš©μ˜ νš¨μœ¨μ„±μ„ 높일 수 있고, ν”„λ‘œκ·Έλž¨μ˜ μ„±λŠ₯을 κ°œμ„ ν•˜κ³ , 버그λ₯Ό μ˜ˆλ°©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

κ°€μž₯ λ¨Όμ €, λ©”λͺ¨λ¦¬ ꡬ쑰λ₯Ό μ΄ν•΄ν•˜λŠ” 것은 λ³€μˆ˜μ˜ μŠ€μ½”ν”„μ— λŒ€ν•œ 이해λ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€. 각각의 λ©”λͺ¨λ¦¬ μ˜μ—­μ€ νŠΉμ •ν•œ μŠ€μ½”ν”„λ₯Ό 가지고 있고, λ³€μˆ˜μ˜ 유효 λ²”μœ„μ™€ 생λͺ… μ£ΌκΈ°λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€. 이λ₯Ό μ΄ν•΄ν•˜μ§€ μ•Šκ³  λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄, μ˜ˆμƒμΉ˜ λͺ»ν•œ κ²°κ³Όλ₯Ό μ΄ˆλž˜ν•˜κ±°λ‚˜ λ©”λͺ¨λ¦¬ λˆ„μˆ˜μ™€ 같은 문제λ₯Ό λ°œμƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ, λ©”λͺ¨λ¦¬ ꡬ쑰λ₯Ό μ΄ν•΄ν•˜λ©΄ λ©”λͺ¨λ¦¬ ν• λ‹Ήκ³Ό ν•΄μ œμ— λŒ€ν•œ 이해도 κ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€. ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λ©΄ λ©”λͺ¨λ¦¬λŠ” μŠ€νƒκ³Ό νž™ μ˜μ—­μ— λ™μ μœΌλ‘œ ν• λ‹Ήλ©λ‹ˆλ‹€. μ˜¬λ°”λ₯Έ λ©”λͺ¨λ¦¬ ν• λ‹Ή 및 ν•΄μ œλ₯Ό μˆ˜ν–‰ν•˜μ§€ μ•ŠμœΌλ©΄ λ©”λͺ¨λ¦¬ λˆ„μˆ˜κ°€ λ°œμƒν•˜μ—¬ λ©”λͺ¨λ¦¬ λΆ€μ‘± 문제λ₯Ό μ•ΌκΈ°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

뿐만 μ•„λ‹ˆλΌ, λ©”λͺ¨λ¦¬ ꡬ쑰λ₯Ό μ΄ν•΄ν•˜λ©΄ λ©”λͺ¨λ¦¬ μ‚¬μš© νŒ¨ν„΄μ— λŒ€ν•œ μ΅œμ ν™” λ˜ν•œ κ°€λŠ₯ν•©λ‹ˆλ‹€. λ©”λͺ¨λ¦¬ μ˜μ—­ κ°„μ˜ 데이터 이동, ν• λ‹Ή 및 ν•΄μ œ μž‘μ—… 등을 μ΅œμ ν™”ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ 속도와 νš¨μœ¨μ„±μ„ κ°œμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

κ·ΈλŸ¬λ―€λ‘œ λ©”λͺ¨λ¦¬ ꡬ쑰의 μ΄ν•΄λŠ” κ°œλ°œμžμ—κ²Œ 맀우 μ€‘μš”ν•©λ‹ˆλ‹€. μ˜¬λ°”λ₯΄κ²Œ λ©”λͺ¨λ¦¬λ₯Ό κ΄€λ¦¬ν•˜κ³  μ‚¬μš©ν•˜λŠ” 것은 μ•ˆμ •μ„±, νš¨μœ¨μ„±κ³Ό μ„±λŠ₯ μΈ‘λ©΄μ—μ„œ 큰 μž₯점을 κ°€μ Έλ‹€μ€λ‹ˆλ‹€. λ”°λΌμ„œ, λ©”λͺ¨λ¦¬ ꡬ쑰에 λŒ€ν•œ μ΄ν•΄λŠ” ν”„λ‘œκ·Έλž˜λ° 및 μ‹œμŠ€ν…œ κ°œλ°œμ— μžˆμ–΄μ„œ ν•„μˆ˜μ μΈ μš”μ†ŒλΌκ³  ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2. λ©”μ†Œλ“œ(Method)

λ©”μ†Œλ“œ(Method)λŠ” ν”„λ‘œκ·Έλž¨μ—μ„œ ν•¨μˆ˜λ‚˜ λ©”μ†Œλ“œ μ •μ˜κ°€ μ €μž₯λ˜λŠ” μ˜μ—­μž…λ‹ˆλ‹€. λ©”μ†Œλ“œ μ˜μ—­μ€ 컴파일러 λ˜λŠ” 인터프리터가 μ†ŒμŠ€ μ½”λ“œλ₯Ό 컴파일 λ˜λŠ” μ‹€ν–‰ν•  λ•Œ μƒμ„±λ˜λ©°, ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ 흐름에 따라 λ©”μ†Œλ“œ μ •μ˜κ°€ μ°¨λ‘€λŒ€λ‘œ μ €μž₯λ©λ‹ˆλ‹€.

λ©”μ†Œλ“œλŠ” ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©λ˜λŠ” ν•¨μˆ˜λ‚˜ λ©”μ†Œλ“œμ˜ μ½”λ“œκ°€ μ €μž₯λ˜λŠ” 곳으둜, μ‹€μ œλ‘œ μ‹€ν–‰λ˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€. λ©”μ†Œλ“œλŠ” ν•΄λ‹Ή ν•¨μˆ˜ λ˜λŠ” λ©”μ†Œλ“œμ˜ μ½”λ“œμ™€ ν•¨κ»˜ λ©”μ„œλ“œμ˜ 이름, μΈμžκ°’, λ°˜ν™˜κ°’, 지역 λ³€μˆ˜ λ“±μ˜ 정보λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ μ •λ³΄λŠ” ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λ©΄μ„œ ν•„μš”ν•œ λ©”λͺ¨λ¦¬ 곡간을 ν• λ‹Ήλ°›κ²Œ λ©λ‹ˆλ‹€.

각각의 λ©”μ†Œλ“œλŠ” κ³ μœ ν•œ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό 가지며, λ©”μ†Œλ“œ μ˜μ—­μ—μ„œ μ°Έμ‘°λ˜μ–΄ μ‹€ν–‰λ©λ‹ˆλ‹€. ν”„λ‘œκ·Έλž¨μ΄ ν•¨μˆ˜λ‚˜ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄, ν•΄λ‹Ή λ©”μ†Œλ“œμ˜ μ£Όμ†Œκ°€ 호좜 μŠ€νƒ(Stack)에 μ €μž₯되며, 호좜 μŠ€νƒμ„ 톡해 λ©”μ†Œλ“œμ˜ μ‹€ν–‰κ³Ό κ΄€λ ¨λœ 데이터가 κ΄€λ¦¬λ©λ‹ˆλ‹€.

λ©”μ†Œλ“œ μ˜μ—­μ˜ μ£Όμš”ν•œ 역할은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

  • ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©λ˜λŠ” ν•¨μˆ˜ 및 λ©”μ†Œλ“œμ˜ μ½”λ“œλ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.
  • λ©”μ†Œλ“œμ˜ 이름, μΈμžκ°’, λ°˜ν™˜κ°’, 지역 λ³€μˆ˜ λ“±μ˜ 정보λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.
  • ν”„λ‘œκ·Έλž¨μ˜ λ©”λͺ¨λ¦¬ 곡간을 ν• λ‹Ήν•˜κ³  κ΄€λ¦¬ν•©λ‹ˆλ‹€.

λ©”μ†Œλ“œλŠ” ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ 흐름에 μžˆμ–΄μ„œ μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€. μ μ ˆν•˜κ²Œ λ©”μ†Œλ“œλ₯Ό μ •μ˜ν•˜κ³  ν™œμš©ν•¨μœΌλ‘œμ¨, μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ„ 높이고 ν”„λ‘œκ·Έλž¨μ˜ μœ μ§€λ³΄μˆ˜μ„±μ„ κ°œμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, λ©”μ†Œλ“œ μ˜μ—­μ€ ν”„λ‘œκ·Έλž¨μ˜ 싀행에 ν•„μš”ν•œ ν•¨μˆ˜ 및 λ©”μ†Œλ“œμ˜ μ½”λ“œκ°€ μ €μž₯λ˜λ―€λ‘œ, ν”„λ‘œκ·Έλž¨μ˜ λ©”λͺ¨λ¦¬ μ‚¬μš©μ— νš¨μœ¨μ„±μ„ μ œκ³΅ν•©λ‹ˆλ‹€. λ”°λΌμ„œ, μ˜¬λ°”λ₯΄κ²Œ λ©”μ†Œλ“œλ₯Ό ν™œμš©ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ„ μ„€κ³„ν•˜κ³  κ°œλ°œν•¨μœΌλ‘œμ¨, 효율적인 λ©”λͺ¨λ¦¬ μ‚¬μš©κ³Ό μ„±λŠ₯ ν–₯상을 μ΄λŒμ–΄λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

λ©”μ†Œλ“œ κ°œλ…κ³Ό μ—­ν• 

λ©”μ†Œλ“œ(Method)λŠ” ν”„λ‘œκ·Έλž˜λ°μ—μ„œ ν•¨μˆ˜λ‚˜ λ©”μ†Œλ“œμ˜ μ •μ˜, μ½”λ“œ, μ‹€ν–‰ 흐름을 μ €μž₯ν•˜λŠ” μ˜μ—­μž…λ‹ˆλ‹€. ν”„λ‘œκ·Έλž¨μ—μ„œ ν•¨μˆ˜λ‚˜ λ©”μ†Œλ“œλŠ” κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” μ½”λ“œ λΈ”λ‘μœΌλ‘œ, μž¬μ‚¬μš©μ„±κ³Ό λͺ¨λ“ˆν™”λ₯Ό μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.

λ©”μ†Œλ“œλŠ” ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ 흐름에 따라 호좜되며, ν•„μš”ν•œ κΈ°λŠ₯을 μˆ˜ν–‰ν•©λ‹ˆλ‹€. λ©”μ†Œλ“œλŠ” λ‹€μ–‘ν•œ μ’…λ₯˜μ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 있으며, νŒŒλΌλ―Έν„°(인자)λ₯Ό 톡해 μ™ΈλΆ€λ‘œλΆ€ν„° 값을 전달받을 μˆ˜λ„ 있고, λ°˜ν™˜κ°’μ„ μ΄μš©ν•΄ κ²°κ³Όλ₯Ό λŒλ €μ€„ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

λ©”μ†Œλ“œλŠ” ν”„λ‘œκ·Έλž¨μ˜ 가독성과 μœ μ§€λ³΄μˆ˜μ„±μ„ λ†’μ΄λŠ”λ° 도움을 μ£Όλ©°, μ½”λ“œμ˜ 쀑볡을 λ°©μ§€ν•˜κ³  μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, 각 λ©”μ†Œλ“œλŠ” κ°œλ³„μ μΈ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λ―€λ‘œ μ½”λ“œμ˜ ꡬ쑰화와 λͺ¨λ“ˆν™”λ₯Ό κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€.

λ©”μ†Œλ“œλŠ” μ•„λž˜μ™€ 같은 역할을 μˆ˜ν–‰ν•©λ‹ˆλ‹€:

  • μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±: λ™μΌν•œ μ½”λ“œλ₯Ό μ—¬λŸ¬λ²ˆ μž‘μ„±ν•˜μ§€ μ•Šκ³ , λ©”μ†Œλ“œλ‘œ μ •μ˜ν•˜κ³  ν˜ΈμΆœν•˜μ—¬ μž¬μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • λͺ¨λ“ˆν™”: ν”„λ‘œκ·Έλž¨μ΄ μž‘μ€ 논리적 λ‹¨μœ„λ‘œ λ‚˜λ‰˜μ–΄μ Έ 각 κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” λ©”μ†Œλ“œλ‘œ ꡬ성될 수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.
  • 가독성과 μœ μ§€λ³΄μˆ˜μ„±: λ©”μ†Œλ“œλŠ” νŠΉμ • μž‘μ—…μ„ λ‹΄λ‹Ήν•˜λ―€λ‘œ ν”„λ‘œκ·Έλž¨μ˜ ꡬ쑰λ₯Ό μ΄ν•΄ν•˜κΈ° 쉽고, λ³€κ²½ 및 μœ μ§€λ³΄μˆ˜κ°€ μš©μ΄ν•©λ‹ˆλ‹€.
  • μ½”λ“œ ꡬ쑰화: λ³΅μž‘ν•œ ν”„λ‘œκ·Έλž¨μ„ λ©”μ†Œλ“œλ‘œ κ΅¬λΆ„ν•˜μ—¬ κ΅¬μ‘°ν™”ν•¨μœΌλ‘œμ¨, 개발 및 디버깅 과정을 λ‹¨μˆœν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ˜¬λ°”λ₯Έ λ©”μ†Œλ“œμ˜ ν™œμš©μ€ ν”„λ‘œκ·Έλž¨μ„ 효율적이고 μœ μ—°ν•˜κ²Œ 섀계할 수 있게 ν•΄μ€λ‹ˆλ‹€. λ©”μ†Œλ“œλŠ” μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±κ³Ό λͺ¨λ“ˆν™”, μœ μ§€λ³΄μˆ˜μ„± κ°œμ„ μ— 큰 도움을 μ£Όλ©°, ν”„λ‘œκ·Έλž¨μ˜ 가독성과 ꡬ쑰화에도 κΈ°μ—¬ν•©λ‹ˆλ‹€. 이에 따라 λ©”μ†Œλ“œλŠ” ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 핡심적인 κ°œλ… 쀑 ν•˜λ‚˜μ΄λ©°, ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” λ©”μ†Œλ“œμ˜ κ°œλ…κ³Ό 역할을 잘 μ΄ν•΄ν•˜κ³  ν™œμš©ν•  ν•„μš”κ°€ μžˆμŠ΅λ‹ˆλ‹€.

λ©”μ†Œλ“œμ˜ 호좜과 μ‹€ν–‰ κ³Όμ •

λ©”μ†Œλ“œ(Method)λ₯Ό ν˜ΈμΆœν•˜λ©΄ ν”„λ‘œκ·Έλž¨μ€ ν•΄λ‹Ή λ©”μ†Œλ“œμ˜ μ‹€ν–‰ 과정을 거치게 λ©λ‹ˆλ‹€. λ©”μ†Œλ“œμ˜ 호좜과 μ‹€ν–‰ 과정은 λ‹€μŒκ³Ό 같은 λ‹¨κ³„λ‘œ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.

  1. λ©”μ†Œλ“œ 호좜

    • ν”„λ‘œκ·Έλž¨μ΄ μ§„ν–‰λ˜λ‹€κ°€ νŠΉμ • λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” μ½”λ“œλ₯Ό λ§Œλ‚˜λ©΄, ν•΄λ‹Ή λ©”μ†Œλ“œμ˜ 싀행을 μš”μ²­ν•©λ‹ˆλ‹€.
    • λ©”μ†Œλ“œ ν˜ΈμΆœμ€ λ©”μ†Œλ“œμ˜ 이름과 ν•¨κ»˜ μ „λ‹¬λ˜λŠ” μΈμžκ°’(νŒŒλΌλ―Έν„°)에 따라 ν˜ΈμΆœλ©λ‹ˆλ‹€.
    • λ©”μ†Œλ“œ ν˜ΈμΆœμ€ ν˜„μž¬ μ‹€ν–‰λ˜λŠ” μœ„μΉ˜μΈ 호좜 μŠ€νƒ(Stack)에 λ©”μ†Œλ“œμ˜ 정보(μ£Όμ†Œ, μΈμžκ°’ λ“±)λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.
  2. λ©”μ†Œλ“œ μ‹€ν–‰ μ€€λΉ„

    • λ©”μ†Œλ“œκ°€ 호좜되면 호좜 μŠ€νƒμ— ν•΄λ‹Ή λ©”μ†Œλ“œμ˜ 정보가 μ €μž₯되고, μ‹€ν–‰ 흐름은 λ©”μ†Œλ“œ λ‚΄λΆ€λ‘œ μ΄λ™ν•©λ‹ˆλ‹€.
    • λ©”μ†Œλ“œ μ‹€ν–‰ μ€€λΉ„ λ‹¨κ³„μ—μ„œλŠ” λ©”μ†Œλ“œ λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•  지역 λ³€μˆ˜μ™€ λ©”μ†Œλ“œμ˜ 싀행에 ν•„μš”ν•œ λ©”λͺ¨λ¦¬ 곡간이 ν™•λ³΄λ©λ‹ˆλ‹€.
  3. λ©”μ†Œλ“œ μ½”λ“œ μ‹€ν–‰

    • λ©”μ†Œλ“œ λ‚΄λΆ€μ—μ„œλŠ” λ©”μ†Œλ“œμ— μ •μ˜λœ μ½”λ“œκ°€ 순차적으둜 μ‹€ν–‰λ©λ‹ˆλ‹€.
    • λ©”μ†Œλ“œ λ‚΄λΆ€μ—μ„œλŠ” 쑰건문, 반볡문, λ³€μˆ˜ μ„ μ–Έ λ“± λ‹€μ–‘ν•œ ν”„λ‘œκ·Έλž˜λ° ꡬ문을 μ‚¬μš©ν•˜μ—¬ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  4. λ©”μ†Œλ“œ λ°˜ν™˜

    • λ©”μ†Œλ“œκ°€ 싀행을 마치면, ν•΄λ‹Ή λ©”μ†Œλ“œμ˜ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
    • λ°˜ν™˜κ°’μ΄ μžˆλŠ” 경우, λ©”μ†Œλ“œλŠ” λ°˜ν™˜κ°’μ„ ν˜ΈμΆœν•œ λΆ€λΆ„μœΌλ‘œ 돌렀주고, λ°˜ν™˜κ°’μ„ 가지고 ν”„λ‘œκ·Έλž¨μ˜ 싀행을 κ³„μ†ν•©λ‹ˆλ‹€.
    • λ°˜ν™˜κ°’μ΄ μ—†λŠ” 경우, λ©”μ†Œλ“œλŠ” 싀행을 마치고 ν˜ΈμΆœν•œ λΆ€λΆ„μœΌλ‘œ λŒμ•„κ°‘λ‹ˆλ‹€.

λ©”μ†Œλ“œμ˜ 호좜과 μ‹€ν–‰ 과정을 μ΄ν•΄ν•˜λŠ” 것은 ν”„λ‘œκ·Έλž˜λ°μ˜ 핡심 원리 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. λ©”μ†Œλ“œ ν˜ΈμΆœμ€ ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ 흐름을 λ‹€λ₯Έ μ˜μ—­μœΌλ‘œ μ΄λ™μ‹œν‚€λ©°, λ©”μ†Œλ“œ λ‚΄μ—μ„œλŠ” ν•΄λ‹Ή λ©”μ†Œλ“œμ˜ μ½”λ“œκ°€ μ‹€ν–‰λ˜κ³  ν•„μš”ν•œ μž‘μ—…μ΄ μˆ˜ν–‰λ©λ‹ˆλ‹€. λ©”μ†Œλ“œμ˜ 호좜과 μ‹€ν–‰ 과정은 ν”„λ‘œκ·Έλž¨μ΄ μ œλŒ€λ‘œ λ™μž‘ν•˜κ³  μ›ν•˜λŠ” κ²°κ³Όλ₯Ό 얻을 수 μžˆλ„λ‘ ν•˜λŠ”λ° μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€.

λ©”μ†Œλ“œ μ˜μ—­μ˜ ꡬ쑰와 κ΄€λ ¨λœ μš©μ–΄λ“€ (예: 클래슀, 객체 λ“±)

λ©”μ†Œλ“œ μ˜μ—­(Method Area)은 ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑에 λ©”μ†Œλ“œμ˜ μ •μ˜μ™€ μ½”λ“œ, μƒμˆ˜, 클래슀 정보 등을 μ €μž₯ν•˜λŠ” μ˜μ—­μž…λ‹ˆλ‹€. λ©”μ†Œλ“œ μ˜μ—­μ€ JVM(Java Virtual Machine)의 μΌλΆ€λΆ„μœΌλ‘œμ„œ, 각각의 μŠ€λ ˆλ“œμ— λŒ€ν•΄ λ…λ¦½μ μž…λ‹ˆλ‹€. λ©”μ†Œλ“œ μ˜μ—­κ³Ό κ΄€λ ¨λœ μ€‘μš”ν•œ μš©μ–΄λ“€μ„ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

1. 클래슀(Class)

ν΄λž˜μŠ€λŠ” 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 객체λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•œ μ„€κ³„λ„μž…λ‹ˆλ‹€. ν΄λž˜μŠ€λŠ” 멀버 λ³€μˆ˜μ™€ λ©”μ†Œλ“œλ‘œ κ΅¬μ„±λ˜λ©°, 객체λ₯Ό 생성할 λ•Œ ν•΄λ‹Ή ν΄λž˜μŠ€μ— μ •μ˜λœ 멀버 λ³€μˆ˜μ™€ λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν΄λž˜μŠ€λŠ” λ©”μ†Œλ“œ μ˜μ—­μ— λ‘œλ“œλ˜μ–΄ μ €μž₯되며, ν•œ 번 λ‘œλ“œλœ ν΄λž˜μŠ€λŠ” JVM λ‚΄μ—μ„œ 곡유되며 μ—¬λŸ¬ 개의 객체λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.

2. 객체(Object)

κ°μ²΄λŠ” 클래슀의 μΈμŠ€ν„΄μŠ€μž…λ‹ˆλ‹€. 클래슀λ₯Ό 톡해 μ‹€μ œλ‘œ λ©”λͺ¨λ¦¬μ— ν• λ‹Ήλœ 객체둜, ν•΄λ‹Ή 클래슀의 멀버 λ³€μˆ˜μ™€ λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ°μ²΄λŠ” νž™(Heap) μ˜μ—­μ— μƒμ„±λ˜λ©°, 객체가 생성될 λ•Œλ§ˆλ‹€ ν•΄λ‹Ή 클래슀의 멀버 λ³€μˆ˜λŠ” 각 κ°μ²΄λ§ˆλ‹€ λ³„λ„λ‘œ ν• λ‹Ήλ©λ‹ˆλ‹€.

3. μΈμŠ€ν„΄μŠ€(Instance)

μΈμŠ€ν„΄μŠ€λŠ” 객체의 λ‹€λ₯Έ ν‘œν˜„ λ°©λ²•μœΌλ‘œ, νŠΉμ • 클래슀의 ꡬ체적인 싀체λ₯Ό λ§ν•©λ‹ˆλ‹€. κ°μ²΄λŠ” 클래슀의 μΈμŠ€ν„΄μŠ€μ΄κΈ° λ•Œλ¬Έμ—, μΈμŠ€ν„΄μŠ€μ™€ κ°μ²΄λŠ” λ™μΌν•œ 의미둜 μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

4. λ©”μ†Œλ“œ(Method)

λ©”μ†Œλ“œλŠ” 클래슀의 κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” μ½”λ“œ λΈ”λ‘μœΌλ‘œ, ν΄λž˜μŠ€μ— μ„ μ–Έλœ λ©”μ†Œλ“œλŠ” λ©”μ†Œλ“œ μ˜μ—­μ— μ €μž₯λ©λ‹ˆλ‹€. λ©”μ†Œλ“œλŠ” μž…λ ₯값을 λ°›μ•„λ“€μ—¬ μ²˜λ¦¬ν•˜κ³ , 결과값을 λ°˜ν™˜ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 클래슀 λ‚΄μ—μ„œλŠ” λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ κΈ°λŠ₯을 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

5. μƒμˆ˜(Constant)

μƒμˆ˜λŠ” λ³€κ²½λ˜μ§€ μ•ŠλŠ” κ°’μœΌλ‘œ, ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 도쀑에 μˆ˜μ •ν•  수 μ—†μŠ΅λ‹ˆλ‹€. μƒμˆ˜λŠ” 주둜 ν”„λ‘œκ·Έλž¨μ—μ„œ 고정적인 κ°’μ΄λ‚˜ λ¦¬ν„°λŸ΄ 값을 ν‘œν˜„ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λ©°, λ©”μ†Œλ“œ μ˜μ—­μ— μ €μž₯λ©λ‹ˆλ‹€.

λ©”μ†Œλ“œ μ˜μ—­μ€ ν΄λž˜μŠ€μ™€ 객체, λ©”μ†Œλ“œ λ“± ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ€‘μš”ν•œ μš”μ†Œλ“€μ„ μ €μž₯ν•˜λŠ” μ˜μ—­μž…λ‹ˆλ‹€. ν΄λž˜μŠ€λŠ” 객체λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•œ μ„€κ³„λ„λ‘œμ„œ λ©”μ†Œλ“œ μ˜μ—­μ— λ‘œλ“œλ˜κ³ , κ°μ²΄λŠ” νž™ μ˜μ—­μ— μƒμ„±λ˜μ–΄ 멀버 λ³€μˆ˜μ™€ λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ©”μ†Œλ“œ μ˜μ—­μ€ ν”„λ‘œκ·Έλž¨μ˜ 싀행에 ν•„μš”ν•œ μ€‘μš”ν•œ ꡬ쑰λ₯Ό μœ μ§€ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.

3. μŠ€νƒ(Stack)

μŠ€νƒ(Stack)은 λ©”λͺ¨λ¦¬ μ˜μ—­ 쀑 ν•˜λ‚˜λ‘œ, λ©”μ†Œλ“œ 호좜과 κ΄€λ ¨λœ 정보λ₯Ό μ €μž₯ν•˜λŠ” μžλ£Œκ΅¬μ‘°μž…λ‹ˆλ‹€. μŠ€νƒμ€ ν›„μž…μ„ μΆœ(LIFO, Last-In-First-Out)μ΄λΌλŠ” 원칙에 따라 λ™μž‘ν•©λ‹ˆλ‹€. μŠ€νƒμ—λŠ” λ©”μ†Œλ“œμ˜ 호좜 정보가 μ €μž₯되며, ν”„λ‘œκ·Έλž¨μ΄ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œλ§ˆλ‹€ ν•΄λ‹Ή λ©”μ†Œλ“œμ˜ 정보가 μŠ€νƒμ˜ κ°€μž₯ μœ„μͺ½μ— μŒ“μ΄κ²Œ λ©λ‹ˆλ‹€. μŠ€νƒμ— μ €μž₯된 λ©”μ†Œλ“œ μ •λ³΄λŠ” κ°€μž₯ μ΅œκ·Όμ— 호좜된 λ©”μ†Œλ“œλΆ€ν„° μˆœμ„œλŒ€λ‘œ μ‹€ν–‰λ©λ‹ˆλ‹€.

μŠ€νƒμ˜ λ™μž‘ 원리

  1. λ©”μ†Œλ“œ 호좜

    • ν”„λ‘œκ·Έλž¨μ΄ νŠΉμ • λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄, ν•΄λ‹Ή λ©”μ†Œλ“œμ˜ 싀행을 μš”μ²­ν•©λ‹ˆλ‹€.
    • λ©”μ†Œλ“œ ν˜ΈμΆœμ€ μŠ€νƒμ— λ©”μ†Œλ“œμ˜ 정보(μ£Όμ†Œ, μΈμžκ°’ λ“±)λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.
    • ν˜ΈμΆœν•œ λ©”μ†Œλ“œμ˜ μ‹€ν–‰ 흐름은 ν•΄λ‹Ή λ©”μ†Œλ“œ λ‚΄λΆ€λ‘œ μ΄λ™ν•©λ‹ˆλ‹€.
  2. λ©”μ†Œλ“œ μ‹€ν–‰ μ€€λΉ„

    • μŠ€νƒμ— μ €μž₯된 λ©”μ†Œλ“œμ˜ 정보λ₯Ό 기반으둜 λ©”μ†Œλ“œ λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•  지역 λ³€μˆ˜μ™€ λ©”λͺ¨λ¦¬ 곡간을 ν™•λ³΄ν•©λ‹ˆλ‹€.
    • λ©”μ†Œλ“œ μ‹€ν–‰ μ€€λΉ„ λ‹¨κ³„μ—μ„œλŠ” λ©”μ†Œλ“œ λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•  λ³€μˆ˜λ“€μ˜ 초기 값을 μ„€μ •ν•©λ‹ˆλ‹€.
  3. λ©”μ†Œλ“œ μ½”λ“œ μ‹€ν–‰

    • λ©”μ†Œλ“œ λ‚΄λΆ€μ—μ„œλŠ” λ©”μ†Œλ“œμ— μ •μ˜λœ μ½”λ“œκ°€ 순차적으둜 μ‹€ν–‰λ©λ‹ˆλ‹€.
    • λ©”μ†Œλ“œ λ‚΄λΆ€μ—μ„œλŠ” 쑰건문, 반볡문, λ³€μˆ˜ μ„ μ–Έ λ“± λ‹€μ–‘ν•œ ν”„λ‘œκ·Έλž˜λ° ꡬ문을 μ‚¬μš©ν•˜μ—¬ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  4. λ©”μ†Œλ“œ λ°˜ν™˜

    • λ©”μ†Œλ“œκ°€ 싀행을 마치면, ν•΄λ‹Ή λ©”μ†Œλ“œμ˜ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
    • λ°˜ν™˜κ°’μ΄ μžˆλŠ” 경우, λ©”μ†Œλ“œλŠ” λ°˜ν™˜κ°’μ„ ν˜ΈμΆœν•œ λΆ€λΆ„μœΌλ‘œ 돌렀주고, λ°˜ν™˜κ°’μ„ 가지고 ν”„λ‘œκ·Έλž¨μ˜ 싀행을 κ³„μ†ν•©λ‹ˆλ‹€.
    • λ°˜ν™˜κ°’μ΄ μ—†λŠ” 경우, λ©”μ†Œλ“œλŠ” 싀행을 마치고 ν˜ΈμΆœν•œ λΆ€λΆ„μœΌλ‘œ λŒμ•„κ°‘λ‹ˆλ‹€.

μŠ€νƒμ˜ ν™œμš© μ˜ˆμ‹œ

μŠ€νƒμ€ λ©”μ†Œλ“œ 호좜과 κ΄€λ ¨λœ 정보λ₯Ό μ €μž₯ν•˜λŠ” μš©λ„λ‘œ 널리 ν™œμš©λ©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, A λ©”μ†Œλ“œμ—μ„œ B λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜κ³ , λ‹€μ‹œ B λ©”μ†Œλ“œμ—μ„œ C λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” μƒν™©μ—μ„œλŠ” μŠ€νƒμ΄ μ‚¬μš©λ©λ‹ˆλ‹€. A λ©”μ†Œλ“œμ˜ 호좜 정보가 μŠ€νƒμ— μ €μž₯되고, B λ©”μ†Œλ“œμ˜ 호좜 정보가 κ·Έ μœ„μ— μŒ“μ΄λ©°, λ‹€μ‹œ C λ©”μ†Œλ“œμ˜ 호좜 정보가 κ·Έ μœ„μ— μŒ“μ΄λŠ” λ°©μ‹μœΌλ‘œ μŠ€νƒμ΄ κ΄€λ¦¬λ©λ‹ˆλ‹€. μ΄ν›„μ—λŠ” C λ©”μ†Œλ“œμ—μ„œ μ’…λ£Œλ˜λ©΄μ„œ μŠ€νƒμ˜ κ°€μž₯ μœ„μͺ½μ— 있던 호좜 정보가 λ¨Όμ € μ‹€ν–‰λ˜κ³ , μ΄μ–΄μ„œ B λ©”μ†Œλ“œμ™€ A λ©”μ†Œλ“œμ˜ 호좜 정보가 μ‹€ν–‰λ©λ‹ˆλ‹€.

μŠ€νƒμ€ λ©”μ†Œλ“œμ˜ 호좜과 μ‹€ν–‰ 과정을 κ΄€λ¦¬ν•˜λ©΄μ„œ, ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ 흐름을 μ œμ–΄ν•˜λŠ” 데 μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€. μŠ€νƒμ„ μ •ν™•ν•˜κ²Œ ν™œμš©ν•˜λ©΄ λ©”μ†Œλ“œ μ‹€ν–‰ μˆœμ„œμ™€ κ΄€λ ¨λœ 문제λ₯Ό μ‰½κ²Œ ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μŠ€νƒμ€ ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ 흐름을 μΆ”μ ν•˜κ³  λ©”μ†Œλ“œμ˜ 싀행을 κ΄€λ¦¬ν•˜λŠ” λ™μ‹œμ—, λ©”λͺ¨λ¦¬μ˜ 효율적인 관리λ₯Ό μ œκ³΅ν•˜λŠ” μ€‘μš”ν•œ μžλ£Œκ΅¬μ‘°μž…λ‹ˆλ‹€.

μŠ€νƒμ˜ κ°œλ…κ³Ό νŠΉμ§•

μŠ€νƒμ˜ κ°œλ…

μŠ€νƒ(Stack)은 데이터λ₯Ό μ €μž₯ν•˜λŠ” 자료ꡬ쑰둜, ν›„μž…μ„ μΆœ(LIFO, Last-In-First-Out)μ΄λΌλŠ” 원칙에 따라 λ™μž‘ν•©λ‹ˆλ‹€. μŠ€νƒμ— 데이터λ₯Ό μ‚½μž…ν•˜λŠ” 연산을 "push"라고 ν•˜λ©°, μŠ€νƒμ—μ„œ 데이터λ₯Ό μ‚­μ œν•˜λŠ” 연산을 "pop"이라고 ν•©λ‹ˆλ‹€. μŠ€νƒμ—μ„œ λ§ˆμ§€λ§‰μœΌλ‘œ μ‚½μž…λœ 데이터λ₯Ό κ°€μž₯ λ¨Όμ € μ‚­μ œν•˜κ²Œ λ˜λ―€λ‘œ, κ°€μž₯ μ΅œκ·Όμ— μ‚½μž…λœ 데이터가 κ°€μž₯ λ¨Όμ € μ‚­μ œλ˜λŠ” κ΅¬μ‘°μž…λ‹ˆλ‹€.

μŠ€νƒμ˜ νŠΉμ§•

  1. ν›„μž…μ„ μΆœ (Last-In-First-Out)

    • μŠ€νƒμ€ 데이터λ₯Ό ν›„μž…μ„ μΆœμ˜ 원칙에 따라 κ΄€λ¦¬ν•©λ‹ˆλ‹€. κ°€μž₯ μ΅œκ·Όμ— μ‚½μž…λœ 데이터가 κ°€μž₯ λ¨Όμ € μ‚­μ œλ˜κΈ° λ•Œλ¬Έμ—, μŠ€νƒμ— 데이터λ₯Ό μ‚½μž…ν•œ μˆœμ„œμ™€ λ°˜λŒ€λ‘œ 데이터가 μ‚­μ œλ©λ‹ˆλ‹€.
  2. μ œν•œλœ μ ‘κ·Ό

    • μŠ€νƒμ€ μ œν•œλœ μ ‘κ·Ό 방식을 μ§€λ‹ˆκ³  μžˆμŠ΅λ‹ˆλ‹€. κ°€μž₯ μœ„μͺ½μ— μžˆλŠ” λ°μ΄ν„°μ—λ§Œ 접근이 κ°€λŠ₯ν•˜λ©°, 쀑간에 μœ„μΉ˜ν•œ λ°μ΄ν„°μ—λŠ” 직접적인 접근이 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€. λ”°λΌμ„œ μŠ€νƒμ—μ„œ 데이터λ₯Ό μ‚­μ œν•˜κ±°λ‚˜ μ‘°νšŒν•˜κΈ° μœ„ν•΄μ„œλŠ” κ°€μž₯ μœ„μͺ½μ— μžˆλŠ” 데이터λ₯Ό λ¨Όμ € μ‚­μ œν•˜κ±°λ‚˜ 확인해야 ν•©λ‹ˆλ‹€.
  3. 크기 μ œν•œ

    • μŠ€νƒμ€ μΌμ •ν•œ 크기둜 μ œν•œλ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. μŠ€νƒμ— μ €μž₯ν•  수 μžˆλŠ” λ°μ΄ν„°μ˜ κ°œμˆ˜μ—λŠ” ν•œκ³„κ°€ 있으며, μŠ€νƒμ΄ 가득 μ°¬ μƒνƒœμ—μ„œλŠ” λ°μ΄ν„°μ˜ μ‚½μž…μ΄ λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.
  4. λ©”λͺ¨λ¦¬ 관리

    • μŠ€νƒμ€ λ©”λͺ¨λ¦¬μ˜ ν•œ μ˜μ—­μ— ν• λ‹Ήλ˜λ©°, λ°μ΄ν„°μ˜ μ‚½μž…κ³Ό μ‚­μ œλŠ” λ©”λͺ¨λ¦¬μ˜ μƒλ‹¨μ—μ„œ μˆ˜ν–‰λ©λ‹ˆλ‹€. λ°μ΄ν„°μ˜ μ‚½μž…μ€ μŠ€νƒμ˜ 크기λ₯Ό ν™•μž₯ν•˜μ§€ μ•Šκ³  λ©”λͺ¨λ¦¬μ— ν•΄λ‹Ή 데이터λ₯Ό μΆ”κ°€ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.

μŠ€νƒμ˜ ν™œμš© μ˜ˆμ‹œ

μŠ€νƒμ€ λ§Žμ€ λΆ„μ•Όμ—μ„œ ν™œμš©λ˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μž¬κ·€ν•¨μˆ˜ 호좜, μˆ˜μ‹μ˜ 계산, λΈŒλΌμš°μ €μ˜ λ’€λ‘œκ°€κΈ° κΈ°λŠ₯ λ“±μ—μ„œ μŠ€νƒμ΄ μ‚¬μš©λ©λ‹ˆλ‹€. μŠ€νƒμ„ μ‚¬μš©ν•˜λ©΄ 데이터λ₯Ό μΌμ‹œμ μœΌλ‘œ μ €μž₯ν•˜κ±°λ‚˜ ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ 흐름을 κ΄€λ¦¬ν•˜λŠ” λ“± λ‹€μ–‘ν•œ μš©λ„λ‘œ ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μŠ€νƒμ€ 효율적인 데이터 관리와 ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ μ œμ–΄λ₯Ό μœ„ν•΄ μ‚¬μš©λ˜λŠ” μ€‘μš”ν•œ μžλ£Œκ΅¬μ‘°μž…λ‹ˆλ‹€. ν›„μž…μ„ μΆœμ˜ 원칙에 따라 데이터λ₯Ό κ΄€λ¦¬ν•˜λŠ” μŠ€νƒμ€ λ‹€μ–‘ν•œ μƒν™©μ—μ„œ μœ μš©ν•˜κ²Œ ν™œμš©λ  수 있으며, λ©”λͺ¨λ¦¬μ˜ μ œν•œλœ μ˜μ—­μ—μ„œ 효율적인 데이터 μ €μž₯κ³Ό 접근을 κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€.

μŠ€νƒ μ˜μ—­μ˜ λ™μž‘ 방식

μŠ€νƒ(Stack) μ˜μ—­μ€ λ©”λͺ¨λ¦¬μ˜ ν•œ μ˜μ—­μœΌλ‘œ, λ©”μ†Œλ“œ 호좜과 κ΄€λ ¨λœ 정보λ₯Ό μ €μž₯ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. μŠ€νƒ μ˜μ—­μ€ ν›„μž…μ„ μΆœ(LIFO, Last-In-First-Out)의 원칙에 따라 λ™μž‘ν•˜λ©°, λ©”μ†Œλ“œμ˜ 호좜과 μ‹€ν–‰ 흐름을 κ΄€λ¦¬ν•˜λŠ” μš©λ„λ‘œ ν™œμš©λ©λ‹ˆλ‹€.

μŠ€νƒ μ˜μ—­μ˜ λ™μž‘ 원리

  1. λ©”μ†Œλ“œ 호좜

    • ν”„λ‘œκ·Έλž¨μ΄ νŠΉμ • λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄, ν•΄λ‹Ή λ©”μ†Œλ“œμ˜ 싀행을 μš”μ²­ν•©λ‹ˆλ‹€.
    • λ©”μ†Œλ“œ ν˜ΈμΆœμ€ μŠ€νƒ μ˜μ—­μ— λ©”μ†Œλ“œμ˜ 정보(μ£Όμ†Œ, μΈμžκ°’ λ“±)λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.
    • ν˜ΈμΆœν•œ λ©”μ†Œλ“œμ˜ μ‹€ν–‰ 흐름은 ν•΄λ‹Ή λ©”μ†Œλ“œ λ‚΄λΆ€λ‘œ μ΄λ™ν•˜κ²Œ λ©λ‹ˆλ‹€.
  2. λ©”μ†Œλ“œ μ‹€ν–‰ μ€€λΉ„

    • μŠ€νƒ μ˜μ—­μ— μ €μž₯된 λ©”μ†Œλ“œμ˜ 정보λ₯Ό 기반으둜 λ©”μ†Œλ“œ λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•  지역 λ³€μˆ˜μ™€ λ©”λͺ¨λ¦¬ 곡간을 ν™•λ³΄ν•©λ‹ˆλ‹€.
    • λ©”μ†Œλ“œ μ‹€ν–‰ μ€€λΉ„ λ‹¨κ³„μ—μ„œλŠ” λ©”μ†Œλ“œ λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•  λ³€μˆ˜λ“€μ˜ 초기 값을 μ„€μ •ν•©λ‹ˆλ‹€.
  3. λ©”μ†Œλ“œ μ½”λ“œ μ‹€ν–‰

    • λ©”μ†Œλ“œ λ‚΄λΆ€μ—μ„œλŠ” λ©”μ†Œλ“œμ— μ •μ˜λœ μ½”λ“œκ°€ 순차적으둜 μ‹€ν–‰λ©λ‹ˆλ‹€.
    • λ©”μ†Œλ“œ λ‚΄λΆ€μ—μ„œλŠ” 쑰건문, 반볡문, λ³€μˆ˜ μ„ μ–Έ λ“± λ‹€μ–‘ν•œ ν”„λ‘œκ·Έλž˜λ° ꡬ문을 μ‚¬μš©ν•˜μ—¬ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  4. λ©”μ†Œλ“œ λ°˜ν™˜

    • λ©”μ†Œλ“œκ°€ 싀행을 마치면, ν•΄λ‹Ή λ©”μ†Œλ“œμ˜ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
    • λ°˜ν™˜κ°’μ΄ μžˆλŠ” 경우, λ©”μ†Œλ“œλŠ” λ°˜ν™˜κ°’μ„ ν˜ΈμΆœν•œ λΆ€λΆ„μœΌλ‘œ 돌렀주고, λ°˜ν™˜κ°’μ„ 가지고 ν”„λ‘œκ·Έλž¨μ˜ 싀행을 κ³„μ†ν•©λ‹ˆλ‹€.
    • λ°˜ν™˜κ°’μ΄ μ—†λŠ” 경우, λ©”μ†Œλ“œλŠ” 싀행을 마치고 ν˜ΈμΆœν•œ λΆ€λΆ„μœΌλ‘œ λŒμ•„κ°‘λ‹ˆλ‹€.

μŠ€νƒ μ˜μ—­μ˜ ν™œμš© μ˜ˆμ‹œ

μŠ€νƒ μ˜μ—­μ€ λ©”μ†Œλ“œμ˜ 호좜과 μ‹€ν–‰ 과정을 κ΄€λ¦¬ν•˜λ©΄μ„œ ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ 흐름을 μ œμ–΄ν•˜λŠ” 데 μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, A λ©”μ†Œλ“œμ—μ„œ B λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜κ³ , λ‹€μ‹œ B λ©”μ†Œλ“œμ—μ„œ C λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” μƒν™©μ—μ„œλŠ” μŠ€νƒ μ˜μ—­μ΄ μ‚¬μš©λ©λ‹ˆλ‹€. A λ©”μ†Œλ“œμ˜ 호좜 정보가 μŠ€νƒ μ˜μ—­μ— μ €μž₯되고, B λ©”μ†Œλ“œμ˜ 호좜 정보가 κ·Έ μœ„μ— μŒ“μ΄λ©°, C λ©”μ†Œλ“œμ˜ 호좜 정보가 κ·Έ μœ„μ— μŒ“μ΄λŠ” λ°©μ‹μœΌλ‘œ μŠ€νƒμ΄ κ΄€λ¦¬λ©λ‹ˆλ‹€. μ΄ν›„μ—λŠ” C λ©”μ†Œλ“œμ—μ„œ μ’…λ£Œλ˜λ©΄μ„œ μŠ€νƒμ˜ κ°€μž₯ μœ„μͺ½μ— 있던 호좜 정보가 λ¨Όμ € μ‹€ν–‰λ˜κ³ , μ΄μ–΄μ„œ B λ©”μ†Œλ“œμ™€ A λ©”μ†Œλ“œμ˜ 호좜 정보가 μ‹€ν–‰λ©λ‹ˆλ‹€.

μŠ€νƒ μ˜μ—­μ€ λ©”μ†Œλ“œμ˜ 호좜과 μ‹€ν–‰ 과정을 μΆ”μ ν•˜κ³ , λ©”λͺ¨λ¦¬μ˜ 효율적인 관리λ₯Ό μ œκ³΅ν•˜λŠ”λ° μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€. μŠ€νƒ μ˜μ—­μ„ μ •ν™•ν•˜κ²Œ ν™œμš©ν•˜λ©΄ λ©”μ†Œλ“œ μ‹€ν–‰ μˆœμ„œμ™€ κ΄€λ ¨λœ 문제λ₯Ό μ‰½κ²Œ ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μŠ€νƒ μ˜μ—­μ€ ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ 흐름을 μΆ”μ ν•˜λ©΄μ„œ λ©”μ†Œλ“œμ˜ 싀행을 κ΄€λ¦¬ν•˜λŠ” λ™μ‹œμ—, λ³€μˆ˜μ™€ λ©”λͺ¨λ¦¬ 곡간을 효율적으둜 ν™•λ³΄ν•˜μ—¬ λ©”λͺ¨λ¦¬μ˜ 관리λ₯Ό 효율적으둜 μˆ˜ν–‰ν•©λ‹ˆλ‹€.

μŠ€νƒ ν”„λ ˆμž„κ³Ό λ³€μˆ˜μ˜ 생성과 μ†Œλ©Έ

μŠ€νƒ(Stack) μ˜μ—­μ—μ„œλŠ” λ©”μ†Œλ“œμ˜ 호좜과 μ‹€ν–‰ 정보λ₯Ό μ €μž₯ν•˜λŠ” μŠ€νƒ ν”„λ ˆμž„(Stack Frame)이 μƒμ„±λ˜κ³ , ν•΄λ‹Ή ν”„λ ˆμž„ λ‚΄μ—μ„œ λ³€μˆ˜κ°€ μƒμ„±λ˜κ³  μ†Œλ©Έλ©λ‹ˆλ‹€. μŠ€νƒ ν”„λ ˆμž„μ€ λ©”μ†Œλ“œ λ³„λ‘œ μƒμ„±λ˜λ©°, μŠ€νƒ ν”„λ ˆμž„ λ‚΄μ—λŠ” λ©”μ†Œλ“œμ˜ 지역 λ³€μˆ˜μ™€ λ§€κ°œλ³€μˆ˜ 등이 μ €μž₯λ©λ‹ˆλ‹€.

μŠ€νƒ ν”„λ ˆμž„μ˜ 생성과 μ†Œλ©Έ

  1. λ©”μ†Œλ“œ 호좜과 μŠ€νƒ ν”„λ ˆμž„ 생성

    • λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄, ν•΄λ‹Ή λ©”μ†Œλ“œμ˜ 정보와 λ§€κ°œλ³€μˆ˜κ°€ μŠ€νƒμ— μ €μž₯λ©λ‹ˆλ‹€.
    • μ΄λ•Œ, μŠ€νƒ ν”„λ ˆμž„μ΄ μƒμ„±λ˜κ³  λ©”μ†Œλ“œμ˜ 싀행을 μœ„ν•œ 곡간이 μŠ€νƒμ— ν• λ‹Ήλ©λ‹ˆλ‹€.
    • μŠ€νƒ ν”„λ ˆμž„μ€ λ©”μ†Œλ“œ λ‚΄λΆ€μ—μ„œ μ‚¬μš©λ˜λŠ” λ³€μˆ˜μ™€ λ§€κ°œλ³€μˆ˜λ₯Ό μ €μž₯ν•  곡간을 μ œκ³΅ν•©λ‹ˆλ‹€.
  2. λ³€μˆ˜μ˜ 생성과 μ΄ˆκΈ°ν™”

    • μŠ€νƒ ν”„λ ˆμž„ λ‚΄μ—μ„œ λ³€μˆ˜λ“€μ΄ μƒμ„±λ©λ‹ˆλ‹€.
    • λ³€μˆ˜λŠ” λ©”μ†Œλ“œ λ‚΄λΆ€μ—μ„œ μ‚¬μš©λ˜λŠ” μž„μ‹œ 데이터λ₯Ό μ €μž₯ν•˜λŠ” κ³΅κ°„μž…λ‹ˆλ‹€.
    • λ³€μˆ˜λŠ” 선언될 λ•Œ κΈ°λ³Έκ°’μœΌλ‘œ μ΄ˆκΈ°ν™”λ˜λ©°, μ΄ˆκΈ°κ°’μ΄ μ§€μ •λœ κ²½μš°μ—λŠ” ν•΄λ‹Ή κ°’μœΌλ‘œ μ΄ˆκΈ°ν™”λ©λ‹ˆλ‹€.
  3. λ©”μ†Œλ“œ μ‹€ν–‰

    • μŠ€νƒ ν”„λ ˆμž„ λ‚΄μ˜ λ³€μˆ˜λ“€μ€ λ©”μ†Œλ“œμ˜ 싀행에 따라 값이 λ³€κ²½λ©λ‹ˆλ‹€.
    • λ©”μ†Œλ“œ λ‚΄μ—μ„œ λ³€μˆ˜μ— ν• λ‹Ήλœ 값듀이 λ³€κ²½λ˜κ±°λ‚˜ 연산이 μˆ˜ν–‰λ˜λ©°, μ΄λŸ¬ν•œ κ²°κ³ΌλŠ” ν•΄λ‹Ή μŠ€νƒ ν”„λ ˆμž„μ—μ„œλ§Œ μœ νš¨ν•©λ‹ˆλ‹€.
  4. μŠ€νƒ ν”„λ ˆμž„μ˜ μ†Œλ©Έ

    • λ©”μ†Œλ“œμ˜ 싀행이 μ’…λ£Œλ˜λ©΄ ν•΄λ‹Ή μŠ€νƒ ν”„λ ˆμž„μ€ μŠ€νƒμ—μ„œ μ œκ±°λ©λ‹ˆλ‹€.
    • μŠ€νƒ ν”„λ ˆμž„μ΄ μ†Œλ©Έλ˜λ©΄ ν•΄λ‹Ή λ©”μ†Œλ“œμ™€ μ—°κ΄€λœ λ³€μˆ˜λ“€λ„ ν•¨κ»˜ μ†Œλ©Έλ©λ‹ˆλ‹€.

λ³€μˆ˜μ˜ 생성과 μ†Œλ©Έ

  1. λ³€μˆ˜μ˜ 생성

    • λ³€μˆ˜λŠ” μŠ€νƒ ν”„λ ˆμž„ λ‚΄μ—μ„œ μƒμ„±λ©λ‹ˆλ‹€.
    • λ³€μˆ˜μ˜ 생성은 ν• λ‹Ήλœ λ©”λͺ¨λ¦¬ 곡간을 μ˜λ―Έν•˜λ©°, ν•΄λ‹Ή λ³€μˆ˜μ— 데이터λ₯Ό μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • λ³€μˆ˜λŠ” νƒ€μž…κ³Ό 이름을 가지며, λ©”μ†Œλ“œ λ‚΄μ—μ„œ μ‚¬μš©λ˜λŠ” μž„μ‹œ 데이터λ₯Ό μ €μž₯ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.
  2. λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™”

    • λ³€μˆ˜λŠ” 선언될 λ•Œ κΈ°λ³Έκ°’μœΌλ‘œ μ΄ˆκΈ°ν™”λ©λ‹ˆλ‹€.
    • λ³€μˆ˜μ˜ νƒ€μž…μ— 따라 기본값이 λ‹€λ₯΄κ²Œ κ²°μ •λ©λ‹ˆλ‹€.
    • μ΄ˆκΈ°ν™” 값이 λͺ…μ‹œλœ 경우, ν•΄λ‹Ή κ°’μœΌλ‘œ λ³€μˆ˜κ°€ μ΄ˆκΈ°ν™”λ©λ‹ˆλ‹€.
  3. λ³€μˆ˜μ˜ μ‚¬μš©

    • λ³€μˆ˜λŠ” μƒμ„±λœ μŠ€νƒ ν”„λ ˆμž„ λ‚΄μ—μ„œ μ‚¬μš©λ©λ‹ˆλ‹€.
    • λ³€μˆ˜λŠ” λ©”μ†Œλ“œ λ‚΄μ—μ„œλ§Œ μœ νš¨ν•˜λ©°, λ‹€λ₯Έ λ©”μ†Œλ“œμ—μ„œλŠ” 접근이 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.
    • λ³€μˆ˜μ˜ 값은 λ©”μ†Œλ“œ 싀행에 따라 변경될 수 μžˆμŠ΅λ‹ˆλ‹€.
  4. λ³€μˆ˜μ˜ μ†Œλ©Έ

    • λ³€μˆ˜λŠ” μŠ€νƒ ν”„λ ˆμž„μ΄ μ†Œλ©Έλ  λ•Œ ν•¨κ»˜ μ†Œλ©Έλ©λ‹ˆλ‹€.
    • λ³€μˆ˜κ°€ μ†Œλ©Έλ˜λ©΄, ν•΄λ‹Ή λ³€μˆ˜μ— ν• λ‹Ήλœ λ©”λͺ¨λ¦¬ 곡간은 λ°˜ν™˜λ˜μ–΄ λ‹€λ₯Έ μš©λ„λ‘œ μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

μŠ€νƒ ν”„λ ˆμž„κ³Ό λ³€μˆ˜μ˜ 생성과 μ†Œλ©Έμ€ λ©”μ†Œλ“œμ˜ 호좜과 μ‹€ν–‰ 과정에 따라 λ™μ μœΌλ‘œ κ΄€λ¦¬λ©λ‹ˆλ‹€. μŠ€νƒ ν”„λ ˆμž„μ€ λ©”μ†Œλ“œλ§ˆλ‹€ μƒμ„±λ˜λ©°, ν•΄λ‹Ή ν”„λ ˆμž„ λ‚΄μ—μ„œ λ³€μˆ˜κ°€ μƒμ„±λ˜κ³  μ‚¬μš©λ˜λŠ” ꡬ쑰둜 이루어져 μžˆμŠ΅λ‹ˆλ‹€. λ³€μˆ˜μ˜ 생성과 μ†Œλ©Έμ€ λ©”μ†Œλ“œμ˜ μ‹€ν–‰ 흐름에 따라 λ™μ μœΌλ‘œ 이루어지며, 각각의 μŠ€νƒ ν”„λ ˆμž„μ—μ„œλ§Œ μœ νš¨ν•œ λ³€μˆ˜λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

νž™(Heap)

νž™(Heap) μ˜μ—­μ€ λ™μ μœΌλ‘œ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜μ—¬ μ‚¬μš©ν•˜λŠ” μ˜μ—­μž…λ‹ˆλ‹€. νž™μ€ ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑에 μ‚¬μš©μžκ°€ ν•„μš”μ— 따라 λ©”λͺ¨λ¦¬λ₯Ό λ™μ μœΌλ‘œ ν• λ‹Ήν•˜κ³  ν•΄μ œν•  수 μžˆλŠ” 곡간을 μ œκ³΅ν•©λ‹ˆλ‹€. 일반적으둜 νž™ μ˜μ—­μ€ λ©”λͺ¨λ¦¬ κ΄€λ¦¬μž(λ©”λͺ¨λ¦¬ ν• λ‹Ή 및 ν•΄μ œλ₯Ό λ‹΄λ‹Ήν•˜λŠ” μ‹œμŠ€ν…œ)에 μ˜ν•΄ κ΄€λ¦¬λ©λ‹ˆλ‹€.

νž™ μ˜μ—­μ˜ λ™μž‘ 원리

  1. λ©”λͺ¨λ¦¬ ν• λ‹Ή

    • ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑에 ν•„μš”ν•œ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜κΈ° μœ„ν•΄ μ‚¬μš©μžλŠ” νž™ μ˜μ—­μ— 할당을 μš”μ²­ν•©λ‹ˆλ‹€.
    • νž™ μ˜μ—­μ€ νž™ κ΄€λ¦¬μžμ— μ˜ν•΄ κ΄€λ¦¬λ˜λ©°, μ‚¬μš© κ°€λŠ₯ν•œ λ©”λͺ¨λ¦¬ 곡간을 μ°Ύμ•„ ν• λ‹Ήν•©λ‹ˆλ‹€.
    • ν• λ‹Ήλœ λ©”λͺ¨λ¦¬ 곡간은 μ‚¬μš©μžκ°€ ν•„μš”ν•œ 만큼 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  2. λ©”λͺ¨λ¦¬ μ‚¬μš©

    • ν• λ‹Ήλœ λ©”λͺ¨λ¦¬ 곡간은 μ‚¬μš©μžκ°€ ν•„μš”μ— 따라 데이터λ₯Ό μ €μž₯ν•  수 μžˆλŠ” κ³΅κ°„μž…λ‹ˆλ‹€.
    • νž™ μ˜μ—­μ€ λ©”λͺ¨λ¦¬μ— 일련의 데이터 ꡬ쑰λ₯Ό μ €μž₯ν•  수 μžˆλŠ” μœ μ—°μ„±μ„ μ œκ³΅ν•©λ‹ˆλ‹€.
    • μ‚¬μš©μžλŠ” 데이터λ₯Ό νž™μ— μ €μž₯ν•˜κ³ , ν•„μš”μ— 따라 읽고 μˆ˜μ •ν•˜κ±°λ‚˜ μ‚­μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  3. λ©”λͺ¨λ¦¬ ν•΄μ œ

    • 더 이상 ν•„μš”ν•˜μ§€ μ•Šμ€ λ©”λͺ¨λ¦¬λŠ” ν•΄μ œλ˜μ–΄ λ‹€λ₯Έ μš©λ„λ‘œ μ‚¬μš©λ  수 μžˆλ„λ‘ ν•΄μ•Ό ν•©λ‹ˆλ‹€.
    • μ‚¬μš©μžλŠ” ν• λ‹Ήλœ λ©”λͺ¨λ¦¬λ₯Ό ν•΄μ œν•˜κΈ° μœ„ν•΄ κ΄€λ ¨ λͺ…령을 νž™ κ΄€λ¦¬μžμ—κ²Œ μ „λ‹¬ν•©λ‹ˆλ‹€.
    • νž™ κ΄€λ¦¬μžλŠ” ν•΄μ œλœ λ©”λͺ¨λ¦¬λ₯Ό λ‹€μ‹œ μ‚¬μš© κ°€λŠ₯ν•œ μƒνƒœλ‘œ λ§Œλ“€μ–΄ λ‹€λ₯Έ μ‚¬μš©μžμ—κ²Œ ν• λ‹Ήν•  수 μžˆμŠ΅λ‹ˆλ‹€.

νž™μ˜ ν™œμš© μ˜ˆμ‹œ

νž™ μ˜μ—­μ€ μœ μ—°ν•œ λ©”λͺ¨λ¦¬ ν• λ‹Ήκ³Ό ν•΄μ œλ₯Ό μ œκ³΅ν•˜μ—¬ λ‹€μ–‘ν•œ μš©λ„λ‘œ μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€. λͺ‡ 가지 νž™μ˜ ν™œμš© μ˜ˆμ‹œλ₯Ό μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

  1. 동적 λ©”λͺ¨λ¦¬ ν• λ‹Ή

    • νž™ μ˜μ—­μ€ ν•„μš”μ— 따라 λ©”λͺ¨λ¦¬λ₯Ό λ™μ μœΌλ‘œ ν• λ‹Ήν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, λ°°μ—΄μ΄λ‚˜ μ—°κ²° λ¦¬μŠ€νŠΈμ™€ 같은 동적 데이터 ꡬ쑰λ₯Ό μƒμ„±ν•˜λŠ” 데 μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.
  2. 객체 생성

    • 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ κ°μ²΄λŠ” νž™ μ˜μ—­μ— μƒμ„±λ©λ‹ˆλ‹€.
    • κ°μ²΄λŠ” 클래슀의 μΈμŠ€ν„΄μŠ€λ‘œ, ν•„μš”μ— 따라 λ™μ μœΌλ‘œ μƒμ„±λ˜κ³  ν•΄μ œλ©λ‹ˆλ‹€.
  3. 동적 λ©”λͺ¨λ¦¬ ν•΄μ œ

    • νž™ μ˜μ—­μ— ν• λ‹Ήλœ λ©”λͺ¨λ¦¬λŠ” ν•„μš”ν•˜μ§€ μ•Šμ„ 경우 νž™ κ΄€λ¦¬μžλ₯Ό 톡해 ν•΄μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • λ™μ μœΌλ‘œ ν• λ‹Ήλœ λ©”λͺ¨λ¦¬λ₯Ό ν•΄μ œν•¨μœΌλ‘œμ¨ λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό λ°©μ§€ν•˜κ³ , λ‹€λ₯Έ μš©λ„λ‘œ λ©”λͺ¨λ¦¬λ₯Ό μž¬ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

νž™ μ˜μ—­μ€ λ©”λͺ¨λ¦¬ 관리λ₯Ό μœ μ—°ν•˜κ²Œ μ œκ³΅ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ΄ 동적 데이터 ꡬ쑰λ₯Ό λ§Œλ“€κ³  κ΄€λ¦¬ν•˜λŠ” 데 도움을 μ€λ‹ˆλ‹€. μ£Όμ˜ν•  점은 νž™ μ˜μ—­μ€ μ‚¬μš©μžμ—κ²Œ λ©”λͺ¨λ¦¬ 관리 μ±…μž„μ„ λΆ€μ—¬ν•˜λ―€λ‘œ, λ©”λͺ¨λ¦¬ ν• λ‹Ήκ³Ό ν•΄μ œλ₯Ό μ μ ˆν•˜κ²Œ μ²˜λ¦¬ν•΄μ•Ό λ©”λͺ¨λ¦¬ λˆ„μˆ˜μ™€ 같은 문제λ₯Ό 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.

νž™μ˜ κ°œλ…κ³Ό νŠΉμ§•

νž™μ˜ κ°œλ…

  • νž™(Heap)은 λ™μ μœΌλ‘œ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜μ—¬ μ‚¬μš©ν•˜λŠ” μ˜μ—­μž…λ‹ˆλ‹€.
  • νž™μ€ μ‚¬μš©μžκ°€ ν•„μš”μ— 따라 λ©”λͺ¨λ¦¬λ₯Ό λ™μ μœΌλ‘œ ν• λ‹Ήν•˜κ³  ν•΄μ œν•  수 μžˆλŠ” 곡간을 μ œκ³΅ν•©λ‹ˆλ‹€.
  • 일반적으둜 νž™ μ˜μ—­μ€ λ©”λͺ¨λ¦¬ κ΄€λ¦¬μžμ— μ˜ν•΄ κ΄€λ¦¬λ©λ‹ˆλ‹€.

νž™μ˜ νŠΉμ§•

  1. 동적 λ©”λͺ¨λ¦¬ ν• λ‹Ή

    • νž™ μ˜μ—­μ€ ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑에 ν•„μš”ν•œ λ©”λͺ¨λ¦¬λ₯Ό λ™μ μœΌλ‘œ ν• λ‹Ήν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.
    • νž™ μ˜μ—­μ€ μ‚¬μš© κ°€λŠ₯ν•œ λ©”λͺ¨λ¦¬ 곡간을 μ°Ύμ•„ ν• λ‹Ήν•˜κ³ , ν•„μš”μ— 따라 크기λ₯Ό μ‘°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  2. μœ μ—°ν•œ λ©”λͺ¨λ¦¬ μ‚¬μš©

    • νž™μ€ μ‚¬μš©μžκ°€ ν•„μš”λ‘œ ν•˜λŠ” 데이터 ꡬ쑰와 크기에 맞게 λ©”λͺ¨λ¦¬λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • νž™μ€ 일련의 데이터 ꡬ쑰λ₯Ό μ €μž₯ν•  수 μžˆλŠ” 곡간을 μ œκ³΅ν•˜λ©°, λ°μ΄ν„°μ˜ 읽기, μ“°κΈ°, μˆ˜μ •, μ‚­μ œ λ“± λ‹€μ–‘ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  3. λ©”λͺ¨λ¦¬ λˆ„μˆ˜ 방지

    • νž™μ€ λ©”λͺ¨λ¦¬ ν• λ‹Ήκ³Ό ν•΄μ œλ₯Ό μ‚¬μš©μžκ°€ λͺ…μ‹œμ μœΌλ‘œ 관리해야 ν•©λ‹ˆλ‹€.
    • μ‚¬μš©μžλŠ” 더 이상 ν•„μš”ν•˜μ§€ μ•Šμ€ λ©”λͺ¨λ¦¬λ₯Ό ν•΄μ œν•¨μœΌλ‘œμ¨ λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό λ°©μ§€ν•©λ‹ˆλ‹€.
    • λ©”λͺ¨λ¦¬ λˆ„μˆ˜κ°€ λ°œμƒν•˜λ©΄ ν• λ‹Ήλœ λ©”λͺ¨λ¦¬λ₯Ό ν•΄μ œν•˜μ§€ μ•Šμ•„ μ‚¬μš©ν•  수 μžˆλŠ” λ©”λͺ¨λ¦¬κ°€ μ œν•œλ˜λŠ” λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  4. 객체 생성

    • 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ κ°μ²΄λŠ” νž™ μ˜μ—­μ— μƒμ„±λ©λ‹ˆλ‹€.
    • κ°μ²΄λŠ” 클래슀의 μΈμŠ€ν„΄μŠ€λ‘œ, ν•„μš”μ— 따라 λ™μ μœΌλ‘œ μƒμ„±λ˜κ³  ν•΄μ œλ©λ‹ˆλ‹€.
  5. 병행성과 λ™μ‹œμ„± 지원

    • μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— νž™ μ˜μ—­μ— μ ‘κ·Όν•˜μ—¬ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜κ±°λ‚˜ ν•΄μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • νž™ κ΄€λ¦¬μžλŠ” λ™μ‹œ 접근이 λ°œμƒν•  경우 μƒν˜Έ 배제 기법을 μ‚¬μš©ν•˜μ—¬ λ™μ‹œμ„± 문제λ₯Ό λ°©μ§€ν•©λ‹ˆλ‹€.

νž™ μ˜μ—­μ€ 동적 λ©”λͺ¨λ¦¬ ν• λ‹Ήκ³Ό ν•΄μ œλ₯Ό μ œκ³΅ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ΄ μœ μ—°ν•˜κ²Œ λ©”λͺ¨λ¦¬λ₯Ό μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ©”λͺ¨λ¦¬ 관리λ₯Ό μ μ ˆν•˜κ²Œ μ²˜λ¦¬ν•˜μ§€ μ•ŠμœΌλ©΄ λ©”λͺ¨λ¦¬ λˆ„μˆ˜μ™€ 같은 λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμœΌλ―€λ‘œ, ν• λ‹Ήλœ λ©”λͺ¨λ¦¬λŠ” ν•„μš” μ—†μ–΄μ§ˆ λ•Œ μ μ ˆν•˜κ²Œ ν•΄μ œν•΄μ•Ό ν•©λ‹ˆλ‹€.

νž™ μ˜μ—­μ˜ λ©”λͺ¨λ¦¬ ν• λ‹Ήκ³Ό ν•΄μ œ κ³Όμ •

λ©”λͺ¨λ¦¬ ν• λ‹Ή κ³Όμ •

  1. λ©”λͺ¨λ¦¬ μš”μ²­

    • μ‚¬μš©μžλŠ” ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑에 ν•„μš”ν•œ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜κΈ° μœ„ν•΄ νž™ μ˜μ—­μ— 할당을 μš”μ²­ν•©λ‹ˆλ‹€.
    • ν•„μš”ν•œ λ©”λͺ¨λ¦¬μ˜ 크기λ₯Ό μ§€μ •ν•˜μ—¬ ν• λ‹Ή μš”μ²­μ„ μ§„ν–‰ν•©λ‹ˆλ‹€.
  2. ν• λ‹Ή μ—¬λΆ€ 확인

    • νž™ κ΄€λ¦¬μžλŠ” ν• λ‹Ή μš”μ²­μ„ λ°›μ•„ μ—¬μœ  곡간을 ν™•μΈν•©λ‹ˆλ‹€.
    • μš΄μ˜μ²΄μ œμ— μ˜ν•΄ ν• λ‹Ή κ°€λŠ₯ν•œ λ©”λͺ¨λ¦¬ κ³΅κ°„μ˜ 크기와 ν• λ‹Ή κ°€λŠ₯ μ—¬λΆ€λ₯Ό ν™•μΈν•©λ‹ˆλ‹€.
  3. λ©”λͺ¨λ¦¬ ν• λ‹Ή

    • νž™ κ΄€λ¦¬μžλŠ” μ—¬μœ  곡간이 μžˆμ„ 경우, μ‚¬μš© κ°€λŠ₯ν•œ λ©”λͺ¨λ¦¬ μ€‘μ—μ„œ μš”μ²­ν•œ 크기와 μΌμΉ˜ν•˜λŠ” 곡간을 μ°Ύμ•„ ν• λ‹Ήν•©λ‹ˆλ‹€.
    • ν• λ‹Ήλœ λ©”λͺ¨λ¦¬λŠ” μ‚¬μš©μžμ—κ²Œ λ°˜ν™˜λ˜λ©°, μ‚¬μš©μžλŠ” ν• λ‹Ήλœ λ©”λͺ¨λ¦¬λ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터λ₯Ό μ €μž₯ν•˜κ³  μ²˜λ¦¬ν•©λ‹ˆλ‹€.

λ©”λͺ¨λ¦¬ ν•΄μ œ κ³Όμ •

  1. λ©”λͺ¨λ¦¬ ν•΄μ œ μš”μ²­

    • μ‚¬μš©μžλŠ” 더 이상 ν•„μš”ν•˜μ§€ μ•Šμ€ λ©”λͺ¨λ¦¬λ₯Ό ν•΄μ œν•˜κΈ° μœ„ν•΄ νž™ κ΄€λ¦¬μžμ—κ²Œ ν•΄μ œ μš”μ²­μ„ μ „λ‹¬ν•©λ‹ˆλ‹€.
    • ν•΄μ œ μš”μ²­μ€ ν• λ‹Ήλœ λ©”λͺ¨λ¦¬μ˜ μ£Όμ†Œλ‚˜ 크기λ₯Ό νž™ κ΄€λ¦¬μžμ—κ²Œ μ•Œλ €μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€.
  2. λ©”λͺ¨λ¦¬ ν•΄μ œ 확인

    • νž™ κ΄€λ¦¬μžλŠ” μ‚¬μš©μžλ‘œλΆ€ν„° 받은 λ©”λͺ¨λ¦¬μ˜ μ£Όμ†Œλ‚˜ 크기λ₯Ό ν™•μΈν•˜μ—¬ ν•΄μ œ κ°€λŠ₯ μ—¬λΆ€λ₯Ό νŒλ‹¨ν•©λ‹ˆλ‹€.
    • μš”μ²­ν•œ λ©”λͺ¨λ¦¬κ°€ μ •μƒμ μœΌλ‘œ ν• λ‹Ήλœ 것인지 κ²€μ‚¬ν•©λ‹ˆλ‹€.
  3. λ©”λͺ¨λ¦¬ ν•΄μ œ

    • νž™ κ΄€λ¦¬μžλŠ” λ©”λͺ¨λ¦¬μ˜ ν•΄μ œκ°€ κ°€λŠ₯ν•˜λ‹€κ³  νŒλ‹¨ν•  경우, ν•΄λ‹Ή λ©”λͺ¨λ¦¬λ₯Ό ν•΄μ œν•©λ‹ˆλ‹€.
    • ν•΄μ œλœ λ©”λͺ¨λ¦¬λŠ” λ‹€μ‹œ μ‚¬μš© κ°€λŠ₯ν•œ μƒνƒœκ°€ 되며, λ‹€λ₯Έ μ‚¬μš©μžμ—κ²Œ 할당될 수 있게 λ©λ‹ˆλ‹€.

λ©”λͺ¨λ¦¬ ν• λ‹Ήκ³Ό ν•΄μ œ 과정은 νž™ κ΄€λ¦¬μžμ— μ˜ν•΄ μˆ˜ν–‰λ˜λ©°, μ‚¬μš©μžλŠ” ν•„μš”μ— 따라 λ©”λͺ¨λ¦¬λ₯Ό λ™μ μœΌλ‘œ ν• λ‹Ήν•˜κ³  ν•΄μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ©”λͺ¨λ¦¬μ˜ ν• λ‹Ήκ³Ό ν•΄μ œλ₯Ό μ μ ˆν•˜κ²Œ μ²˜λ¦¬ν•˜μ—¬ λ©”λͺ¨λ¦¬ λˆ„μˆ˜μ™€ 같은 문제λ₯Ό λ°©μ§€ν•˜κ³ , λ©”λͺ¨λ¦¬λ₯Ό 효율적으둜 관리해야 ν•©λ‹ˆλ‹€.

νž™ μ˜μ—­μ—μ„œμ˜ 동적 ν• λ‹Ήκ³Ό 관리

동적 ν• λ‹Ή

동적 할당은 ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑에 λ©”λͺ¨λ¦¬λ₯Ό ν•„μš”μ— 따라 λ™μ μœΌλ‘œ ν• λ‹Ήν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€.

  1. λ©”λͺ¨λ¦¬ μš”μ²­

    • μ‚¬μš©μžλŠ” ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑에 ν•„μš”ν•œ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜κΈ° μœ„ν•΄ 동적 할당을 μš”μ²­ν•©λ‹ˆλ‹€.
    • ν• λ‹Ήν•  λ©”λͺ¨λ¦¬μ˜ 크기λ₯Ό μ§€μ •ν•˜μ—¬ μš”μ²­ν•©λ‹ˆλ‹€.
  2. ν• λ‹Ή κ°€λŠ₯ μ—¬λΆ€ 확인

    • μš΄μ˜μ²΄μ œλŠ” ν• λ‹Ή κ°€λŠ₯ν•œ λ©”λͺ¨λ¦¬μ˜ 크기와 μ‚¬μš© κ°€λŠ₯ μ—¬λΆ€λ₯Ό ν™•μΈν•©λ‹ˆλ‹€.
    • ν• λ‹Ή μš”μ²­λœ 크기의 λ©”λͺ¨λ¦¬κ°€ μ‚¬μš© κ°€λŠ₯ν•œμ§€ μ—¬λΆ€λ₯Ό νŒλ‹¨ν•©λ‹ˆλ‹€.
  3. λ©”λͺ¨λ¦¬ ν• λ‹Ή

    • νž™ κ΄€λ¦¬μžλŠ” μ‚¬μš© κ°€λŠ₯ν•œ λ©”λͺ¨λ¦¬ μ€‘μ—μ„œ μš”μ²­ν•œ 크기와 μΌμΉ˜ν•˜λŠ” 곡간을 μ°Ύμ•„ ν• λ‹Ήν•©λ‹ˆλ‹€.
    • ν• λ‹Ήλœ λ©”λͺ¨λ¦¬λŠ” μ‚¬μš©μžμ—κ²Œ λ°˜ν™˜λ˜λ©°, μ‚¬μš©μžλŠ” ν•΄λ‹Ή λ©”λͺ¨λ¦¬λ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터λ₯Ό μ €μž₯ν•˜κ³  μ²˜λ¦¬ν•©λ‹ˆλ‹€.

λ©”λͺ¨λ¦¬ ν•΄μ œ

λ©”λͺ¨λ¦¬ ν•΄μ œλŠ” 더 이상 ν•„μš”ν•˜μ§€ μ•Šμ€ λ©”λͺ¨λ¦¬λ₯Ό ν•΄μ œν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€.

  1. λ©”λͺ¨λ¦¬ ν•΄μ œ μš”μ²­

    • μ‚¬μš©μžλŠ” 더 이상 ν•„μš”ν•˜μ§€ μ•Šμ€ λ©”λͺ¨λ¦¬λ₯Ό ν•΄μ œν•˜κΈ° μœ„ν•΄ νž™ κ΄€λ¦¬μžμ—κ²Œ ν•΄μ œ μš”μ²­μ„ μ „λ‹¬ν•©λ‹ˆλ‹€.
    • ν•΄μ œ μš”μ²­μ€ ν• λ‹Ήλœ λ©”λͺ¨λ¦¬μ˜ μ£Όμ†Œλ‚˜ 크기λ₯Ό νž™ κ΄€λ¦¬μžμ—κ²Œ μ•Œλ €μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€.
  2. λ©”λͺ¨λ¦¬ ν•΄μ œ 확인

    • νž™ κ΄€λ¦¬μžλŠ” μ‚¬μš©μžλ‘œλΆ€ν„° 받은 λ©”λͺ¨λ¦¬μ˜ μ£Όμ†Œλ‚˜ 크기λ₯Ό ν™•μΈν•˜μ—¬ ν•΄μ œ κ°€λŠ₯ μ—¬λΆ€λ₯Ό νŒλ‹¨ν•©λ‹ˆλ‹€.
    • μš”μ²­ν•œ λ©”λͺ¨λ¦¬κ°€ μ •μƒμ μœΌλ‘œ ν• λ‹Ήλœ 것인지 κ²€μ‚¬ν•©λ‹ˆλ‹€.
  3. λ©”λͺ¨λ¦¬ ν•΄μ œ

    • νž™ κ΄€λ¦¬μžλŠ” λ©”λͺ¨λ¦¬μ˜ ν•΄μ œκ°€ κ°€λŠ₯ν•˜λ‹€κ³  νŒλ‹¨ν•  경우, ν•΄λ‹Ή λ©”λͺ¨λ¦¬λ₯Ό ν•΄μ œν•©λ‹ˆλ‹€.
    • ν•΄μ œλœ λ©”λͺ¨λ¦¬λŠ” λ‹€μ‹œ μ‚¬μš© κ°€λŠ₯ν•œ μƒνƒœκ°€ 되며, λ‹€λ₯Έ μ‚¬μš©μžμ—κ²Œ 할당될 수 있게 λ©λ‹ˆλ‹€.

μ μ ˆν•œ 동적 ν• λ‹Ήκ³Ό λ©”λͺ¨λ¦¬ ν•΄μ œλ₯Ό 톡해 νž™ μ˜μ—­μ—μ„œμ˜ λ©”λͺ¨λ¦¬λ₯Ό 효율적으둜 관리할 수 μžˆμŠ΅λ‹ˆλ‹€. λ©”λͺ¨λ¦¬ ν•΄μ œλ₯Ό μžŠμ–΄μ„œ λ©”λͺ¨λ¦¬ λˆ„μˆ˜κ°€ λ°œμƒν•˜μ§€ μ•Šλ„λ‘ μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

5. λ©”μ†Œλ“œ, μŠ€νƒ, νž™ μ˜μ—­μ˜ μƒν˜Έ μž‘μš©

λ©”μ†Œλ“œ μ˜μ—­ (Method Area)

  • λ©”μ†Œλ“œ μ˜μ—­μ€ 클래슀 정보와 정적 λ³€μˆ˜(Static Variable)λ₯Ό μ €μž₯ν•˜λŠ” κ³΅κ°„μž…λ‹ˆλ‹€.
  • 클래슀 λ‘œλ”μ— μ˜ν•΄ ν΄λž˜μŠ€κ°€ λ©”λͺ¨λ¦¬μ— λ‘œλ“œλ  λ•Œ, ν•΄λ‹Ή 클래슀의 λ°”μ΄νŠΈ μ½”λ“œ, μƒμˆ˜ ν’€(Constant Pool)κ³Ό 같은 정보가 λ©”μ†Œλ“œ μ˜μ—­μ— μ €μž₯λ©λ‹ˆλ‹€.
  • λͺ¨λ“  μŠ€λ ˆλ“œκ°€ κ³΅μœ ν•˜λŠ” 곡간이기 λ•Œλ¬Έμ—, λ©”μ†Œλ“œ μ˜μ—­μ— μ €μž₯된 μ •λ³΄λŠ” μ–΄λ–€ μŠ€λ ˆλ“œμ—μ„œλ“  μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

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

  • μŠ€νƒ μ˜μ—­μ€ λ©”μ†Œλ“œ 호좜과 κ΄€λ ¨λœ 정보λ₯Ό μ €μž₯ν•˜λŠ” κ³΅κ°„μœΌλ‘œ, 각 μŠ€λ ˆλ“œλ§ˆλ‹€ λ³„λ„μ˜ μŠ€νƒμ΄ μƒμ„±λ©λ‹ˆλ‹€.
  • μŠ€νƒ μ˜μ—­μ—λŠ” 지역 λ³€μˆ˜(Primitive values, Object reference)와 λ©”μ†Œλ“œ 호좜 μ‹œ μƒμ„±λ˜λŠ” ν”„λ ˆμž„(Frame)이 μ €μž₯λ©λ‹ˆλ‹€.
  • λ©”μ†Œλ“œ 호좜 μ‹œμ—λŠ” μƒˆλ‘œμš΄ ν”„λ ˆμž„μ΄ μŠ€νƒμ— μƒμ„±λ˜λ©°, λ©”μ†Œλ“œ 싀행이 μ’…λ£Œλ˜λ©΄ ν•΄λ‹Ή ν”„λ ˆμž„μ΄ μŠ€νƒμ—μ„œ μ œκ±°λ©λ‹ˆλ‹€.
  • μŠ€νƒμ€ ν›„μž…μ„ μΆœ(LIFO, Last-In-First-Out) ꡬ쑰둜 λ™μž‘ν•˜λ©°, ν˜„μž¬ μ‹€ν–‰ 쀑인 λ©”μ†Œλ“œμ™€ κ΄€λ ¨λœ 정보λ₯Ό μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•©λ‹ˆλ‹€.

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

  • νž™ μ˜μ—­μ€ λ™μ μœΌλ‘œ ν• λ‹Ήλœ 객체와 배열이 μ €μž₯λ˜λŠ” κ³΅κ°„μž…λ‹ˆλ‹€.
  • 일반적으둜 가비지 μ»¬λ ‰μ…˜(Garbage Collection)에 μ˜ν•΄ κ΄€λ¦¬λ˜λ©°, μ°Έμ‘°λ˜μ§€ μ•Šμ€ κ°μ²΄λŠ” μžλ™μœΌλ‘œ ν•΄μ œλ©λ‹ˆλ‹€.
  • μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— μ ‘κ·Όν•˜μ—¬ 객체λ₯Ό μƒμ„±ν•˜κ³  μ°Έμ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • νž™ μ˜μ—­μ˜ λ©”λͺ¨λ¦¬ ν• λ‹Ήκ³Ό ν•΄μ œλŠ” νž™ κ΄€λ¦¬μž(Heap Manager)에 μ˜ν•΄ μˆ˜ν–‰λ©λ‹ˆλ‹€.

λ©”μ†Œλ“œ μ˜μ—­, μŠ€νƒ μ˜μ—­, νž™ μ˜μ—­μ€ 각자의 μ—­ν• κ³Ό νŠΉμ§•μ„ 가지고 있으며, μƒν˜Έ μž‘μš©ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ˜ 싀행을 μ œμ–΄ν•©λ‹ˆλ‹€. λ©”μ†Œλ“œ μ˜μ—­μ—λŠ” 클래슀 정보와 정적 λ³€μˆ˜κ°€ μ €μž₯되고, μŠ€νƒ μ˜μ—­μ—λŠ” λ©”μ†Œλ“œ 호좜과 κ΄€λ ¨λœ 정보가 μ €μž₯λ©λ‹ˆλ‹€. νž™ μ˜μ—­μ€ λ™μ μœΌλ‘œ ν• λ‹Ήλœ 객체와 배열이 μ €μž₯되며, λ©”λͺ¨λ¦¬ ν• λ‹Ήκ³Ό ν•΄μ œλŠ” νž™ κ΄€λ¦¬μžμ— μ˜ν•΄ κ΄€λ¦¬λ©λ‹ˆλ‹€.

λ©”μ†Œλ“œ 호좜 μ‹œ λ©”λͺ¨λ¦¬ μ˜μ—­ κ°„μ˜ 관계

λ©”μ†Œλ“œ 호좜 μ‹œ λ©”λͺ¨λ¦¬ μ˜μ—­ κ°„μ—λŠ” λ‹€μŒκ³Ό 같은 관계가 ν˜•μ„±λ˜λ©°, ν”„λ‘œκ·Έλž¨μ˜ 싀행이 μ œμ–΄λ©λ‹ˆλ‹€.

1. λ©”μ†Œλ“œ 호좜 κ³Όμ •

  1. 호좜자 λ©”μ†Œλ“œ μ˜μ—­

    • 호좜자 λ©”μ†Œλ“œμ˜ ν”„λ ˆμž„μ΄ 호좜자 μŠ€νƒ μ˜μ—­μ— μ €μž₯λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
    • 호좜자 λ©”μ†Œλ“œμ—μ„œ μ‚¬μš©λ˜λŠ” 지역 λ³€μˆ˜μ™€ ν˜ΈμΆœν•œ λ©”μ†Œλ“œμ— ν•„μš”ν•œ 인자 값을 가지고 μžˆμŠ΅λ‹ˆλ‹€.
  2. ν˜ΈμΆœν•œ λ©”μ†Œλ“œ μ˜μ—­

    • ν˜ΈμΆœν•œ λ©”μ†Œλ“œμ˜ 정보와 ν”„λ ˆμž„μ΄ ν˜ΈμΆœν•œ μŠ€νƒ μ˜μ—­μ— μƒμ„±λ©λ‹ˆλ‹€.
    • ν˜ΈμΆœν•œ λ©”μ†Œλ“œμ˜ 지역 λ³€μˆ˜μ™€ 인자 값이 ν• λ‹Ήλ©λ‹ˆλ‹€.
  3. νž™ μ˜μ—­

    • ν˜ΈμΆœν•œ λ©”μ†Œλ“œμ—μ„œ μƒμ„±λ˜λŠ” κ°μ²΄λ‚˜ 배열이 νž™ μ˜μ—­μ— μ €μž₯λ©λ‹ˆλ‹€.
    • λ™μ μœΌλ‘œ ν• λ‹Ήλœ λ©”λͺ¨λ¦¬ κ³΅κ°„μœΌλ‘œ, μ—¬λŸ¬ λ©”μ†Œλ“œμ—μ„œ μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2. λ©”μ†Œλ“œ μ‹€ν–‰ κ³Όμ •

  1. ν˜ΈμΆœν•œ λ©”μ†Œλ“œμ˜ ν”„λ ˆμž„ 생성

    • ν˜ΈμΆœν•œ λ©”μ†Œλ“œμ˜ ν”„λ ˆμž„μ΄ ν˜ΈμΆœν•œ μŠ€νƒ μ˜μ—­μ— μƒμ„±λ©λ‹ˆλ‹€.
    • ν”„λ ˆμž„μ—λŠ” λ©”μ†Œλ“œμ˜ 지역 λ³€μˆ˜μ™€ μΌμ‹œμ μœΌλ‘œ μ‚¬μš©λ˜λŠ” 값듀이 μ €μž₯λ©λ‹ˆλ‹€.
  2. ν˜ΈμΆœν•œ λ©”μ†Œλ“œμ˜ μ‹€ν–‰

    • ν˜ΈμΆœν•œ λ©”μ†Œλ“œλŠ” ν•„μš”ν•œ μ—°μ‚°κ³Ό 처리λ₯Ό μ§„ν–‰ν•©λ‹ˆλ‹€.
    • λ©”μ†Œλ“œμ˜ 지역 λ³€μˆ˜μ™€ 인자 값을 ν™œμš©ν•˜μ—¬ μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.
  3. ν˜ΈμΆœν•œ λ©”μ†Œλ“œμ˜ λ°˜ν™˜

    • ν˜ΈμΆœν•œ λ©”μ†Œλ“œκ°€ 싀행을 μ™„λ£Œν•˜κ³  λ°˜ν™˜λ˜λ©΄ ν˜ΈμΆœν•œ μŠ€νƒ μ˜μ—­μ—μ„œ ν•΄λ‹Ή ν”„λ ˆμž„μ΄ μ œκ±°λ©λ‹ˆλ‹€.
    • ν”„λ ˆμž„μ΄ 제거되면 ν˜ΈμΆœν•œ λ©”μ†Œλ“œμ™€ κ΄€λ ¨λœ λ©”λͺ¨λ¦¬λ₯Ό λ‹€μ‹œ μ‚¬μš©ν•  수 있게 λ©λ‹ˆλ‹€.

λ©”μ†Œλ“œ 호좜 μ‹œμ—λŠ” 호좜자 λ©”μ†Œλ“œμ™€ ν˜ΈμΆœν•œ λ©”μ†Œλ“œ 간에 λ©”λͺ¨λ¦¬ μ˜μ—­μ΄ μƒν˜Έ μž‘μš©ν•©λ‹ˆλ‹€. 호좜자 λ©”μ†Œλ“œ μ˜μ—­μ—μ„œλŠ” ν˜ΈμΆœν•œ λ©”μ†Œλ“œμ˜ 인자 값을 μ €μž₯ν•˜κ³ , ν˜ΈμΆœν•œ λ©”μ†Œλ“œ μ˜μ—­μ—μ„œλŠ” 지역 λ³€μˆ˜μ™€ ν•„μš”ν•œ 연산을 μ²˜λ¦¬ν•©λ‹ˆλ‹€. κ°μ²΄λ‚˜ λ°°μ—΄κ³Ό 같은 λ™μ μœΌλ‘œ ν• λ‹Ήλœ λ©”λͺ¨λ¦¬λŠ” νž™ μ˜μ—­μ— μ €μž₯되며, μ—¬λŸ¬ λ©”μ†Œλ“œμ—μ„œ μ ‘κ·Όν•˜μ—¬ μ‚¬μš©λ©λ‹ˆλ‹€. λ©”μ†Œλ“œ 호좜과 싀행이 μ™„λ£Œλ˜λ©΄ 각각의 ν”„λ ˆμž„μ΄ μŠ€νƒ μ˜μ—­μ—μ„œ μ œκ±°λ˜μ–΄ λ©”λͺ¨λ¦¬κ°€ ν•΄μ œλ˜κ³ , λ‹€λ₯Έ λ©”λͺ¨λ¦¬μ— μ‚¬μš©ν•  수 있게 λ©λ‹ˆλ‹€.

μŠ€νƒκ³Ό νž™ μ˜μ—­μ˜ μƒν˜Έ μž‘μš© μ˜ˆμ‹œ

μŠ€νƒκ³Ό νž™ μ˜μ—­μ€ λ©”λͺ¨λ¦¬ μ˜μ—­ 간에 μƒν˜Έ μž‘μš©ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ˜ 싀행을 μ œμ–΄ν•©λ‹ˆλ‹€. λ‹€μŒμ€ μŠ€νƒκ³Ό νž™ μ˜μ—­μ˜ μƒν˜Έ μž‘μš© μ˜ˆμ‹œμž…λ‹ˆλ‹€.

1. 객체 생성과 μ°Έμ‘°

public class Example {
    public static void main(String[] args) {
        Example obj = new Example();
        obj.method();
    }

    public void method() {
        int[] arr = new int[3];
        arr[0] = 1;
        arr[1] = 2;
        arr[2] = 3;
    }
}

μœ„μ˜ μ˜ˆμ‹œμ—μ„œ Example 클래슀의 객체와 method λ©”μ†Œλ“œκ°€ μ‚¬μš©λ©λ‹ˆλ‹€.

  1. main λ©”μ†Œλ“œ μ‹€ν–‰

    • main λ©”μ†Œλ“œμ˜ ν”„λ ˆμž„μ΄ ν˜ΈμΆœν•œ μŠ€νƒ μ˜μ—­μ— μƒμ„±λ©λ‹ˆλ‹€.
    • Example 클래슀의 객체 objκ°€ λ™μ μœΌλ‘œ νž™ μ˜μ—­μ— μƒμ„±λ˜κ³ , ν•΄λ‹Ή μ£Όμ†Œκ°’μ΄ main λ©”μ†Œλ“œμ˜ ν”„λ ˆμž„μ— μ €μž₯λ©λ‹ˆλ‹€.
  2. method λ©”μ†Œλ“œ 호좜

    • method λ©”μ†Œλ“œμ˜ ν”„λ ˆμž„μ΄ ν˜ΈμΆœν•œ μŠ€νƒ μ˜μ—­μ— μƒμ„±λ©λ‹ˆλ‹€.
    • method λ©”μ†Œλ“œμ—μ„œ μ‚¬μš©λ˜λŠ” 지역 λ³€μˆ˜ arr이 λ™μ μœΌλ‘œ νž™ μ˜μ—­μ— μƒμ„±λ˜κ³ , ν•΄λ‹Ή μ£Όμ†Œκ°’μ΄ method λ©”μ†Œλ“œμ˜ ν”„λ ˆμž„μ— μ €μž₯λ©λ‹ˆλ‹€.
  3. λ°°μ—΄ ν• λ‹Ήκ³Ό κ°’ μ €μž₯

    • method λ©”μ†Œλ“œμ—μ„œ int ν˜•μ˜ λ°°μ—΄ arr이 μ„ μ–Έλ˜κ³ , 크기가 3인 배열이 νž™ μ˜μ—­μ— ν• λ‹Ήλ©λ‹ˆλ‹€.
    • λ°°μ—΄μ˜ 각 μš”μ†Œμ— 값이 μ €μž₯λ©λ‹ˆλ‹€.
  4. λ©”μ†Œλ“œ μ‹€ν–‰ μ’…λ£Œ

    • method λ©”μ†Œλ“œμ˜ 싀행이 μ’…λ£Œλ˜κ³ , method λ©”μ†Œλ“œμ˜ ν”„λ ˆμž„μ΄ ν˜ΈμΆœν•œ μŠ€νƒ μ˜μ—­μ—μ„œ μ œκ±°λ©λ‹ˆλ‹€.
    • λ°°μ—΄ arr은 νž™ μ˜μ—­μ— κ·ΈλŒ€λ‘œ λ‚¨μ•„μžˆμœΌλ©°, λ‹€λ₯Έ λ©”μ†Œλ“œμ—μ„œλ„ μ°Έμ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2. 객체의 μ°Έμ‘° λ³€κ²½

public class Example {
    public static void main(String[] args) {
        Example obj1 = new Example();
        Example obj2 = new Example();

        obj1.method(obj2);
    }

    public void method(Example obj) {
        obj = null;
    }
}

μœ„μ˜ μ˜ˆμ‹œλŠ” 객체의 μ°Έμ‘° 변경을 λ³΄μ—¬μ€λ‹ˆλ‹€.

  1. main λ©”μ†Œλ“œ μ‹€ν–‰

    • main λ©”μ†Œλ“œμ˜ ν”„λ ˆμž„μ΄ ν˜ΈμΆœν•œ μŠ€νƒ μ˜μ—­μ— μƒμ„±λ©λ‹ˆλ‹€.
    • Example 클래슀의 객체 obj1κ³Ό obj2κ°€ λ™μ μœΌλ‘œ νž™ μ˜μ—­μ— μƒμ„±λ˜κ³ , ν•΄λ‹Ή μ£Όμ†Œκ°’μ΄ main λ©”μ†Œλ“œμ˜ ν”„λ ˆμž„μ— μ €μž₯λ©λ‹ˆλ‹€.
  2. method λ©”μ†Œλ“œ 호좜

    • method λ©”μ†Œλ“œμ˜ ν”„λ ˆμž„μ΄ ν˜ΈμΆœν•œ μŠ€νƒ μ˜μ—­μ— μƒμ„±λ©λ‹ˆλ‹€.
    • method λ©”μ†Œλ“œμ˜ 인자둜 μ „λ‹¬λœ obj2의 μ£Όμ†Œκ°’μ΄ method λ©”μ†Œλ“œμ˜ ν”„λ ˆμž„μ— μ €μž₯λ©λ‹ˆλ‹€.
  3. μ°Έμ‘° λ³€κ²½

    • method λ©”μ†Œλ“œμ—μ„œ obj2의 값이 null둜 λ³€κ²½λ©λ‹ˆλ‹€.
    • method λ©”μ†Œλ“œμ˜ ν”„λ ˆμž„μ—μ„œ μ°Έμ‘° λ³€κ²½λœ 값을 λ³΄μœ ν•˜κ²Œ λ©λ‹ˆλ‹€.
  4. λ©”μ†Œλ“œ μ‹€ν–‰ μ’…λ£Œ

    • method λ©”μ†Œλ“œμ˜ 싀행이 μ’…λ£Œλ˜κ³ , method λ©”μ†Œλ“œμ˜ ν”„λ ˆμž„μ΄ ν˜ΈμΆœν•œ μŠ€νƒ μ˜μ—­μ—μ„œ μ œκ±°λ©λ‹ˆλ‹€.
    • obj2λŠ” μ—¬μ „νžˆ νž™ μ˜μ—­μ— μƒμ„±λœ 객체의 μ£Όμ†Œλ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€.

μœ„μ˜ μ˜ˆμ‹œμ—μ„œλŠ” method λ©”μ†Œλ“œμ—μ„œ obj의 값을 변경해도 obj1이 μ°Έμ‘°ν•˜λŠ” κ°μ²΄μ—λŠ” 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ΄λŠ” 객체 참쑰의 볡사본을 μ „λ‹¬ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

μ˜μ—­λ³„ λ©”λͺ¨λ¦¬ 관리와 μ΅œμ ν™”μ˜ μ€‘μš”μ„±

같은 데이터λ₯Ό λ‹€λ₯Έ λ©”λͺ¨λ¦¬ μ˜μ—­μ— μ €μž₯ν•˜λŠ” 것은 λ©”λͺ¨λ¦¬ μ‚¬μš©μ— μžˆμ–΄μ„œ 큰 차이λ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. μ˜μ—­λ³„ λ©”λͺ¨λ¦¬ 관리와 μ΅œμ ν™”μ˜ μ€‘μš”μ„±μ„ μ΄ν•΄ν•˜κΈ° μœ„ν•΄ λ‹€μŒμ„ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

1. μŠ€νƒ μ˜μ—­μ˜ λ©”λͺ¨λ¦¬ 관리

  • μŠ€νƒ μ˜μ—­μ€ 지역 λ³€μˆ˜μ™€ λ©”μ†Œλ“œ 호좜 μŠ€νƒμ„ μ €μž₯ν•˜λŠ”λ° μ‚¬μš©λ©λ‹ˆλ‹€.
  • μŠ€νƒ μ˜μ—­μ€ μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ μžλ™μœΌλ‘œ ν• λ‹Ή 및 ν•΄μ œλ˜λ―€λ‘œ κ°œλ°œμžκ°€ 직접 관리할 ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.
  • μŠ€νƒμ— 크기가 큰 객체λ₯Ό μ €μž₯ν•˜κ±°λ‚˜ μž¬κ·€ 호좜과 같은 κ³Όλ„ν•œ λ©”μ†Œλ“œ ν˜ΈμΆœμ„ ν”Όν•˜λ©΄ μŠ€νƒ λ©”λͺ¨λ¦¬λ₯Ό 졜적으둜 ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2. νž™ μ˜μ—­μ˜ λ©”λͺ¨λ¦¬ 관리

  • νž™ μ˜μ—­μ€ λ™μ μœΌλ‘œ ν• λ‹Ήλœ 객체와 배열을 μ €μž₯ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • νž™ μ˜μ—­μ€ κ°œλ°œμžκ°€ 객체의 생성 및 μ†Œλ©Έμ„ 직접 관리해야 ν•©λ‹ˆλ‹€.
  • 객체가 더 이상 ν•„μš”ν•˜μ§€ μ•Šμ„ λ•Œ null둜 μ„€μ •ν•˜κ±°λ‚˜, finalize() λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ’…λ£Œ κ΄€λ ¨ μž‘μ—…μ„ μˆ˜ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ μ‚¬μš© ν›„μ—λŠ” λ©”λͺ¨λ¦¬λ₯Ό λͺ…μ‹œμ μœΌλ‘œ λ°˜ν™˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

3. μ΅œμ ν™”μ˜ μ€‘μš”μ„±

  • μ˜μ—­λ³„ λ©”λͺ¨λ¦¬ κ΄€λ¦¬μ˜ μ€‘μš”μ„±μ€ 효율적인 λ©”λͺ¨λ¦¬ μ‚¬μš©κ³Ό μ„±λŠ₯ μ΅œμ ν™”μ— κΈ°μΈν•©λ‹ˆλ‹€.
  • μŠ€νƒ μ˜μ—­μ€ κ°„λ‹¨ν•˜λ©΄μ„œλ„ λΉ λ₯Έ λ©”λͺ¨λ¦¬ 관리λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.
  • νž™ μ˜μ—­μ€ 동적 할당에 μœ μ—°ν•¨μ„ μ œκ³΅ν•˜μ§€λ§Œ λ©”λͺ¨λ¦¬ 관리에 μ£Όμ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€.
  • μ μ ˆν•œ λ³€μˆ˜ λ²”μœ„ 지정, λ©”λͺ¨λ¦¬ ν•΄μ œ, 객체 μž¬μ‚¬μš© λ“±μ˜ 개발 관행을 톡해 λ©”λͺ¨λ¦¬ μ‚¬μš©μ„ μ΅œμ ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ©”λͺ¨λ¦¬ μ΅œμ ν™”λŠ” ν”„λ‘œκ·Έλž¨μ˜ μ„±λŠ₯을 ν–₯μƒμ‹œν‚€κ³  μ‹œμŠ€ν…œ λ¦¬μ†ŒμŠ€λ₯Ό 효율적으둜 μ‚¬μš©ν•  수 μžˆλŠ” μ€‘μš”ν•œ μš”μ†Œμž…λ‹ˆλ‹€.

λ©”λͺ¨λ¦¬ 관리와 μ΅œμ ν™”λŠ” ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 및 μ„±λŠ₯에 직접적인 영ν–₯을 λ―ΈμΉ©λ‹ˆλ‹€. μŠ€νƒ μ˜μ—­κ³Ό νž™ μ˜μ—­μ— μ €μž₯λ˜λŠ” λ°μ΄ν„°μ˜ νŠΉμ„±κ³Ό 개발자의 μ μ ˆν•œ κ΄€λ¦¬λŠ” λ©”λͺ¨λ¦¬ μ‚¬μš©μ„ 효율적이고 μ•ˆμ •μ μœΌλ‘œ λ§Œλ“œλŠ” 역할을 ν•©λ‹ˆλ‹€. μ μ ˆν•œ λ³€μˆ˜ λ²”μœ„ 지정과 λ©”λͺ¨λ¦¬ ν•΄μ œ, 객체 μž¬μ‚¬μš©κ³Ό 같은 개발 관행을 μ€€μˆ˜ν•˜λ©΄ λ©”λͺ¨λ¦¬λ₯Ό 졜적으둜 ν™œμš©ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ˜ μ„±λŠ₯을 ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

λŒ“κΈ€