Home > Archive > CS_archive > πŸ’Ύ [CS] λͺ…λ Ήμ–΄μ˜ ꡬ쑰

πŸ’Ύ [CS] λͺ…λ Ήμ–΄μ˜ ꡬ쑰
CS

λͺ…λ Ήμ–΄μ˜ ꡬ쑰

μ—°μ‚°μ½”λ“œμ™€ μ˜€νΌλžœλ“œ

μ•„λž˜ 그림을 보면 색 λ°°κ²½ ν•„λ“œλŠ” λͺ…λ Ήμ˜ β€˜μž‘λ™β€™, 달리 말해 β€˜μ—°μ‚°β€™μ„ λ‹΄κ³  있고 흰색 λ°°κ²½ ν•„λ“œλŠ” β€˜μ—°μ‚°μ— μ‚¬μš©ν•  데이터’ λ˜λŠ” β€˜μ—°μ‚°μ— μ‚¬μš©ν•  데이터가 μ €μž₯된 μœ„μΉ˜β€™λ₯Ό λ‹΄κ³  μžˆμŠ΅λ‹ˆλ‹€.

  • λͺ…λ Ήμ–΄ : μ—°μ‚° μ½”λ“œμ™€ μ˜€νΌλžœλ“œλ‘œ κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • μ—°μ‚°μ½”λ“œ(Opreation Code): 색 λ°°κ²½ ν•„λ“œ κ°’, 즉 β€˜λͺ…λ Ήμ–΄κ°€ μˆ˜ν–‰ν•  연산’을 μ—°μ‚°μ½”λ“œ(Operation Code) 라 ν•©λ‹ˆλ‹€.
  • μ˜€νΌλžœλ“œ(Operand) : 흰색 λ°°κ²½ ν•„λ“œ κ°’, 즉 β€˜μ—°μ‚°μ— μ‚¬μš©ν•  데이터’ λ˜λŠ” β€˜μ—°μ‚°μ— μ‚¬μš©ν•  데이터가 μ €μž₯된 μœ„μΉ˜β€™λ₯Ό μ˜€νΌλžœλ“œλΌκ³  ν•©λ‹ˆλ‹€.

μ—°μ‚° μ½”λ“œλŠ” μ—°μ‚°μž, μ˜€νΌλžœλ“œλŠ” ν”Όμ—°μ‚°μž 라고도 λΆ€λ¦…λ‹ˆλ‹€.

  • μ—°μ‚° μ½”λ“œ ν•„λ“œ: μ—°μ‚° μ½”λ“œκ°€ λ‹΄κΈ°λŠ” μ˜μ—­(μƒ‰μΉ λœ λΆ€λΆ„)
  • μ˜€νΌλžœλ“œ ν•„λ“œ: μ˜€νΌλžœλ“œκ°€ λ‹΄κΈ°λŠ” μ˜μ—­(μƒ‰μΉ λ˜μ§€ μ•Šμ€ λΆ€λΆ„)

μ˜€νΌλžœλ“œ

μ˜€νΌλžœλ“œλŠ” β€˜μ—°μ‚°μ— μ‚¬μš©ν•  데이터’ λ˜λŠ” β€˜μ—°μ‚°μ— μ‚¬μš©ν•  데이터가 μ €μž₯된 μœ„μΉ˜β€™λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.

  • κ·Έλž˜μ„œ μ˜€νΌλžœλ“œ ν•„λ“œμ—λŠ” μˆ«μžμ™€ 문자 등을 λ‚˜νƒ€λ‚΄λŠ” 데이터 λ˜λŠ” λ©”λͺ¨λ¦¬λ‚˜ λ ˆμ§€μŠ€ν„° μ£Όμ†Œκ°€ 올 수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ‹€λ§Œ μ˜€νΌλžœλ“œ ν•„λ“œμ—λŠ” μˆ«μžλ‚˜ λ¬Έμžμ™€ 같이 연산에 μ‚¬μš©ν•  데이터λ₯Ό 직접 λͺ…μ‹œν•˜κΈ°λ³΄λ‹€λŠ”, λ§Žμ€ 경우 연산에 μ‚¬μš©ν•  데이터가 μ €μž₯된 μœ„μΉ˜, 즉 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ‚˜ λ ˆμ§€μŠ€ν„° 이름이 λ‹΄κΉλ‹ˆλ‹€.
    • κ·Έλž˜μ„œ μ˜€νΌλžœλ“œ ν•„λ“œλ₯Ό μ£Όμ†Œ ν•„λ“œ 라고 λΆ€λ₯΄κΈ°λ„ ν•©λ‹ˆλ‹€.

μ˜€νΌλžœλ“œλŠ” λͺ…λ Ήμ–΄ μ•ˆμ— ν•˜λ‚˜λ„ 없을 μˆ˜λ„ 있고, ν•œ 개만 μžˆμ„ μˆ˜λ„ 있고, 두 개 λ˜λŠ” μ„Έ 개 λ“± μ—¬λŸ¬κ°œκ°€ μžˆμ„ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

  • μ˜€νΌλžœλ“œκ°€ ν•˜λ‚˜λ„ μ—†λŠ” λͺ…λ Ήμ–΄ 0-μ£Όμ†Œ λͺ…λ Ήμ–΄
  • μ˜€νΌλžœλ“œκ°€ ν•˜λ‚˜μΈ λͺ…λ Ήμ–΄ 1-μ£Όμ†Œ λͺ…λ Ήμ–΄
  • μ˜€νΌλžœλ“œκ°€ 두 개인 λͺ…λ Ήμ–΄ 2-μ£Όμ†Œ λͺ…λ Ήμ–΄
  • μ˜€νΌλžœλ“œκ°€ μ„Έ 개인 λͺ…λ Ήμ–΄ 3-μ£Όμ†Œ λͺ…λ Ήμ–΄

μ—°μ‚° μ½”λ“œ

μ—°μ‚° μ½”λ“œ μ’…λ₯˜λŠ” 맀우 λ§Žμ§€λ§Œ, κ°€μž₯ 기본적인 μ—°μ‚° μ½”λ“œ μœ ν˜•μ€ 크게 λ„€ κ°€μ§€λ‘œ λ‚˜λˆŒ 수 μžˆμŠ΅λ‹ˆλ‹€.

  1. 데이터 전솑
  2. μ‚°μˆ /논리 μ—°μ‚°
  3. μ œμ–΄ 흐름 λ³€κ²½
  4. μž…μΆœλ ₯ μ œμ–΄

μ£Όμ†Œ 지정 방식

μ—°μ‚° μ½”λ“œμ— μ‚¬μš©ν•  데이터가 μ €μž₯된 μœ„μΉ˜, 즉 μ—°μ‚°μ˜ λŒ€μƒμ΄ λ˜λŠ” 데이터가 μ €μž₯된 μœ„μΉ˜λ₯Ό 유효 μ£Όμ†Œ(effective address) 라고 ν•©λ‹ˆλ‹€.

μ˜€νΌλžœλ“œ ν•„λ“œμ— 데이터가 μ €μž₯된 μœ„ν”Όλ₯Ό λͺ…μ‹œ ν•  λ•Œ 연산에 μ‚¬μš©ν•  데이터 μœ„μΉ˜λ₯Ό μ°ΎλŠ” 방법을 μ£Όμ†Œ 지정 방식(addressing mode) 이라고 ν•©λ‹ˆλ‹€

  • λ‹€μ‹œ 말해, μ£Όμ†Œ 지정 방식은 유효 μ£Όμ†Œλ₯Ό μ°ΎλŠ” λ°©λ²•μž…λ‹ˆλ‹€.

μ¦‰μ‹œ μ£Όμ†Œ 지정 방식

  • μ¦‰μ‹œ μ£Όμ†Œ 지정 방식(immediate addressing mode): 연산에 μ‚¬μš©ν•  데이터λ₯Ό μ˜€νΌλžœλ“œ ν•„λ“œμ— 직접 λͺ…μ‹œν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.
    • 이런 방식은 ν‘œν˜„ν•  수 μžˆλŠ” λ°μ΄ν„°μ˜ 크기가 μž‘μ•„μ§€λŠ” 단점이 μžˆμ§€λ§Œ, 연산에 μ‚¬μš©ν•  데이터λ₯Ό λ©”λͺ¨λ¦¬λ‚˜ λ ˆμ§€μŠ€ν„°λ‘œλΆ€ν„° μ°ΎλŠ” 과정이 μ—†κΈ° λ•Œλ¬Έμ— μ΄ν•˜ μ„€λͺ…ν•  μ£Όμ†Œ 지정 방식듀보닀 λΉ λ¦…λ‹ˆλ‹€.

직접 μ£Όμ†Œ 지정 방식

  • 직접 μ£Όμ†Œ 지정 방식(direct addressing mode): μ˜€νΌλžœλ“œ ν•„λ“œμ— 유효 μ£Όμ†Œλ₯Ό 직접 λͺ…μ‹œν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.
    • μ˜€νΌλžœλ“œ ν•„λ“œμ—μ„œ ν‘œν˜„ν•  수 μžˆλŠ” λ°μ΄ν„°μ˜ ν¬κΈ°λŠ” μ¦‰μ‹œ μ£Όμ†Œ 지정 방식보닀 더 μ»€μ‘Œμ§€λ§Œ, μ—¬μ „νžˆ 유효 μ£Όμ†Œλ₯Ό ν‘œν˜„ν•  수 μžˆλŠ” λ²”μœ„κ°€ μ—°μ‚° μ½”λ“œμ˜ λΉ„νŠΈ 수만큼 μ€„μ–΄λ“€μ—ˆμŠ΅λ‹ˆλ‹€.
    • λ‹€μ‹œ 말해 ν‘œν˜„ν•  수 μžˆλŠ” μ˜€νΌλžœλ“œ ν•„λ“œμ˜ 길이가 μ—°μ‚° μ½”λ“œμ˜ 길이만큼 짧아져 ν‘œν˜„ν•  수 μžˆλŠ” 유효 μ£Όμ†Œμ— μ œν•œμ΄ 생길 수 μžˆμŠ΅λ‹ˆλ‹€.

κ°„μ ‘ μ£Όμ†Œ 지정 방식

  • κ°„μ ‘ μ£Όμ†Œ 지정 방식(indirect addressing mode): 유효 μ£Όμ†Œμ˜ μ£Όμ†Œλ₯Ό μ˜€νΌλžœλ“œ ν•„λ“œμ— λͺ…μ‹œν•©λ‹ˆλ‹€. 직접 μ£Όμ†Œ 지정 방식보닀 ν‘œν˜„ν•  수 μžˆλŠ” 유효 μ£Όμ†Œμ˜ λ²”μœ„κ°€ 더 λ„“μŠ΅λ‹ˆλ‹€.
    • 두 번의 λ©”λͺ¨λ¦¬ 접근이 ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ— μ•žμ„œ μ„€λͺ…ν•œ μ£Όμ†Œ 지정 방식듀보닀 일반적으둜 느린 λ°©μ‹μž…λ‹ˆλ‹€.

λ ˆμ§€μŠ€ν„° μ£Όμ†Œ 지정 방식

  • λ ˆμ§€μŠ€ν„° μ£Όμ†Œ 지정 방식(register addressing mode): 직접 μ£Όμ†Œ 지정 방식과 λΉ„μŠ·ν•˜κ²Œ 연산에 μ‚¬μš©ν•  데이터λ₯Ό μ €μž₯ν•œ λ ˆμ§€μŠ€ν„°λ₯Ό μ˜€νΌλžœλ“œ ν•„λ“œμ— 직접 λͺ…μ‹œν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.
    • 일반적으둜 CPU 외뢀에 μžˆλŠ” λ©”λͺ¨λ¦¬μ— μ ‘κ·Όν•˜λŠ” 것보닀 CPU 내뢀에 μžˆλŠ” λ ˆμ§€μŠ€ν„°μ— μ ‘κ·Όν•˜λŠ” 것이 더 λΉ λ¦…λ‹ˆλ‹€.
    • κ·ΈλŸ¬λ―€λ‘œ λ ˆμ§€μŠ€ν„° μ£Όμ†Œ 지정 방식은 직접 μ£Όμ†Œ 지정 방식보닀 λΉ λ₯΄κ²Œ 데이터에 μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • λ‹€λ§Œ, λ ˆμ§€μŠ€ν„° μ£Όμ†Œ 지정 방식은 직접 μ£Όμ†Œ 지정 방식과 λΉ„μŠ·ν•œ 문제λ₯Ό κ³΅μœ ν•©λ‹ˆλ‹€. ν‘œν˜„ν•  수 μžˆλŠ” λ ˆμ§€μŠ€ν„° 크기에 μ œν•œμ΄ 생길 수 μžˆλ‹€λŠ” μ μž…λ‹ˆλ‹€.

λ ˆμ§€μŠ€ν„° κ°„μ ‘ μ£Όμ†Œ 지정 방식

  • λ ˆμ§€μŠ€ν„° κ°„μ ‘ μ£Όμ†Œ 지정 방식(register indirect addressing mode): 연산에 μ‚¬μš©ν•  데이터λ₯Ό λ©”λͺ¨λ¦¬μ— μ €μž₯ν•˜κ³ , κ·Έ μ£Όμ†Œ(유효 μ£Όμ†Œ)λ₯Ό μ €μž₯ν•œ λ ˆμ§€μŠ€ν„°λ₯Ό μ˜€νΌλžœλ“œ ν•„λ“œμ— λͺ…μ‹œν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.
    • 유효 μ£Όμ†Œλ₯Ό μ°ΎλŠ” 과정이 κ°„μ „ μ£Όμ†Œ 지정 방식과 λΉ„μŠ·ν•˜μ§€λ§Œ, λ©”λͺ¨λ¦¬μ— μ ‘κ·Όν•˜λŠ” νšŸμˆ˜κ°€ ν•œ 번으둜 μ€„μ–΄λ“ λ‹€λŠ” 차이이자 μž₯점이 μžˆμŠ΅λ‹ˆλ‹€.
    • λ ˆμ§€μŠ€ν„° κ°„μ ‘ μ£Όμ†Œ 지μž₯ 방식은 κ°„μ ‘ μ£Όμ†Œ 지정 방식보닀 λΉ λ¦…λ‹ˆλ‹€.

정리

  • 연산에 μ‚¬μš©ν•  데이터λ₯Ό μ°ΎλŠ” 방법을 μ£Όμ†Œ 지정 방식 이라고 ν–ˆμŠ΅λ‹ˆλ‹€.
  • 연산에 μ‚¬μš©ν•  데이터가 μ €μž₯된 μœ„μΉ˜λ₯Ό 유효 μ£Όμ†Œ 라고 ν–ˆμŠ΅λ‹ˆλ‹€.
  • λŒ€ν‘œμ μΈ μ£Όμ†Œ 지정 λ°©μ‹μœΌλ‘œ μ•„λž˜μ˜ λ‹€μ„― 가지 방식을 μ†Œκ°œν–ˆμŠ΅λ‹ˆλ‹€.
    • 각각의 방식이 μ˜€νΌλžœλ“œ ν•„λ“œμ— λͺ…μ‹œν•˜λŠ” 값을 정리해 보면 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.
      • μ¦‰μ‹œ μ£Όμ†Œ 지정 방식: 연산에 μ‚¬μš©ν•  데이터
      • 직접 μ£Όμ†Œ 지정 방식: 유효 μ£Όμ†Œ(λ©”λͺ¨λ¦¬ μ£Όμ†Œ)
      • κ°„μ ‘ μ£Όμ†Œ 지정 방식: 유효 μ£Όμ†Œμ˜ μ£Όμ†Œ
      • λ ˆμ§€μŠ€ν„° μ£Όμ†Œ 지정 방식: 유효 μ£Όμ†Œ(λ ˆμ§€μŠ€ν„° 이름)
      • λ ˆμ§€μŠ€ν„° κ°„μ ‘ μ£Όμ†Œ 지정 방식: 유효 μ£Όμ†Œλ₯Ό μ €μž₯ν•œ λ ˆμ§€μŠ€ν„°

ν‚€μ›Œλ“œλ‘œ μ •λ¦¬ν•˜λŠ” 핡심 포인트

  • λͺ…λ Ήμ–΄ λŠ” μ—°μ‚° μ½”λ“œμ™€ μ˜€νΌλžœλ“œλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€.
  • μ—°μ‚° μ½”λ“œλŠ” λͺ…λ Ήμ–΄κ°€ μˆ˜ν–‰ν•  연산을 μ˜λ―Έν•©λ‹ˆλ‹€.
  • μ˜€νΌλžœλ“œλŠ” 연산에 μ‚¬μš©ν•  데이터 λ˜λŠ” 연산에 μ‚¬μš©ν•  데이터가 μ €μž₯된 μœ„μΉ˜λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.
  • μ£Όμ†Œ 지정 방식은 연산에 μ‚¬μš©ν•  데이터 μœ„μΉ˜λ₯Ό μ°ΎλŠ” λ°©λ²•μž…λ‹ˆλ‹€.

Q1. Swiftμ—μ„œ λ©”λͺ¨λ¦¬ μ£Όμ†Œμ— μ ‘κ·Όν•˜κΈ° μœ„ν•΄ μ–΄λ–€ νƒ€μž…μ„ μ‚¬μš©ν•  수 μžˆλŠ”μ§€ μ„€λͺ…ν•΄ μ£Όμ„Έμš”. 그리고 μ™œ μ΄λŸ¬ν•œ μ ‘κ·Ό 방식이 ν•„μš”ν• κΉŒμš”?

Swiftμ—μ„œ λ©”λͺ¨λ¦¬ μ£Όμ†Œμ— 직접 μ ‘κ·Όν•˜κΈ° μœ„ν•΄ UnsafePointer<T> νƒ€μž…κ³Ό κ·Έ λ³€ν˜•μΈ UnsafeMutablePointer<T>λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ 포인터듀은 C μ–Έμ–΄μ˜ 포인터와 μœ μ‚¬ν•˜κ²Œ μž‘λ™ν•˜λ©°, λ©”λͺ¨λ¦¬μ˜ νŠΉμ • μœ„μΉ˜λ₯Ό 직접 κ°€λ¦¬ν‚€λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. μ΄λŸ¬ν•œ μ ‘κ·Ό 방식은 일반적으둜 Swift의 μ•ˆμ „μ„± 및 좔상화 원칙에 μ–΄κΈ‹λ‚˜μ§€λ§Œ, μ„±λŠ₯ μ΅œμ ν™”, κΈ°μ‘΄ C 기반 μ½”λ“œμ™€μ˜ μƒν˜Έ μž‘μš©, ν˜Ήμ€ μ €μˆ˜μ€€ μ‹œμŠ€ν…œ μΈν„°νŽ˜μ΄μŠ€μ™€μ˜ 직접적인 μƒν˜Έ μž‘μš©μ΄ ν•„μš”ν•œ κ²½μš°μ— ν•„μš”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λŒ€λŸ‰μ˜ 데이터 μ²˜λ¦¬λ‚˜ κΈ°μ‘΄ C 라이브러리의 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ μ΄λŸ¬ν•œ 방식이 μœ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ•„λž˜λŠ” μ£Όλ‹ˆμ–΄ Java λ°±μ—”λ“œ 개발자 λ©΄μ ‘ μ§ˆλ¬Έμ— λŒ€ν•œ λͺ¨λ²” λ‹΅μ•ˆ μ˜ˆμ‹œμž…λ‹ˆλ‹€. 이 닡변듀은 Java의 λ©”λͺ¨λ¦¬ 관리와 κ΄€λ ¨λœ 기본적인 지식을 λ³΄μ—¬μ£ΌλŠ” 데 λͺ©μ μ΄ μžˆμŠ΅λ‹ˆλ‹€.

Q2. Javaμ—μ„œλŠ” 일반적으둜 κ°œλ°œμžκ°€ 직접 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό 닀루지 μ•ŠμŠ΅λ‹ˆλ‹€. 이에 λŒ€ν•œ 이유λ₯Ό μ„€λͺ…ν•΄ μ£Όμ„Έμš”. λ˜ν•œ, μžλ™ λ©”λͺ¨λ¦¬ κ΄€λ¦¬λŠ” μ–΄λ–€ μž₯점을 μ œκ³΅ν•˜λ‚˜μš”?

λ‹΅λ³€: Javaμ—μ„œ κ°œλ°œμžκ°€ 직접 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό 닀루지 μ•ŠλŠ” 주된 μ΄μœ λŠ” Javaκ°€ μžλ™ λ©”λͺ¨λ¦¬ 관리 μ‹œμŠ€ν…œμΈ 가비지 μ»¬λ ‰μ…˜(Garbage Collection, GC)을 μ œκ³΅ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. 이둜 인해 λ©”λͺ¨λ¦¬ λˆ„μˆ˜μ™€ 같은 였λ₯˜λ₯Ό λ°©μ§€ν•˜κ³ , κ°œλ°œμžκ°€ λ©”λͺ¨λ¦¬ 관리에 λ“œλŠ” μ‹œκ°„κ³Ό λ…Έλ ₯을 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€. μžλ™ λ©”λͺ¨λ¦¬ κ΄€λ¦¬μ˜ μž₯μ μœΌλ‘œλŠ” μ•ˆμ •μ„±μ˜ ν–₯상, λ©”λͺ¨λ¦¬ 관리 였λ₯˜μ˜ κ°μ†Œ, 그리고 개발자의 생산성 ν–₯상 등이 μžˆμŠ΅λ‹ˆλ‹€.

Q3. JVM의 λ©”λͺ¨λ¦¬ λͺ¨λΈμ„ μ„€λͺ…ν•΄ μ£Όμ„Έμš”. Heapκ³Ό Stack λ©”λͺ¨λ¦¬ μ˜μ—­μ˜ 차이점은 무엇이며, 각각 μ–΄λ–€ μ’…λ₯˜μ˜ 데이터λ₯Ό μ €μž₯ν•˜λ‚˜μš”?

λ‹΅λ³€: JVM의 λ©”λͺ¨λ¦¬ λͺ¨λΈμ€ 크게 Heap μ˜μ—­κ³Ό Stack μ˜μ—­μœΌλ‘œ λ‚˜λ‰©λ‹ˆλ‹€. Heap μ˜μ—­μ€ λͺ¨λ“  μŠ€λ ˆλ“œμ— 걸쳐 곡유되며, 주둜 객체와 클래슀의 메타데이터가 μ €μž₯λ©λ‹ˆλ‹€. 가비지 μ»¬λ ‰μ…˜μ€ 이 Heap μ˜μ—­μ—μ„œ 주둜 μž‘λ™ν•©λ‹ˆλ‹€. 반면, Stack μ˜μ—­μ€ μŠ€λ ˆλ“œ λ³„λ‘œ λ³„λ„λ‘œ ν• λ‹Ήλ˜λ©°, λ©”μ†Œλ“œ 호좜과 κ΄€λ ¨λœ 지역 λ³€μˆ˜μ™€ μ°Έμ‘° λ³€μˆ˜λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€. Stack은 LIFO(Last In, First Out) λ°©μ‹μœΌλ‘œ 데이터λ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€.

Q4. λŒ€κ·œλͺ¨ 데이터 처리 μž‘μ—…μ„ μˆ˜ν–‰ν•  λ•Œ Javaμ—μ„œ λ©”λͺ¨λ¦¬ νš¨μœ¨μ„ μ΅œμ ν™”ν•˜λŠ” λ°©λ²•μ—λŠ” μ–΄λ–€ 것듀이 μžˆλ‚˜μš”?

λ‹΅λ³€: λŒ€κ·œλͺ¨ 데이터 처리 μ‹œ λ©”λͺ¨λ¦¬ νš¨μœ¨μ„ μ΅œμ ν™”ν•˜κΈ° μœ„ν•΄, 객체 μž¬μ‚¬μš©, μ μ ˆν•œ μ»¬λ ‰μ…˜ 선택, 슀트림 API μ‚¬μš©, 그리고 λ©”λͺ¨λ¦¬ 캐싱 μ „λž΅ 등을 μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 객체 풀링을 톡해 빈번히 생성 및 νŒŒκ΄΄λ˜λŠ” 객체의 생성 λΉ„μš©μ„ 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, 데이터 양에 따라 μ μ ˆν•œ 자료ꡬ쑰λ₯Ό μ„ νƒν•˜μ—¬ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰κ³Ό μ„±λŠ₯을 κ· ν˜•μžˆκ²Œ 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

Q5. JNI(Java Native Interface)λŠ” 무엇이며, μ™œ μ‚¬μš©ν•˜λ‚˜μš”? Java μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ JNIλ₯Ό μ‚¬μš©ν•˜μ—¬ λ„€μ΄ν‹°λΈŒ μ½”λ“œμ™€ μƒν˜Έ μž‘μš©ν•˜λŠ” 예λ₯Ό λ“€ 수 μžˆλ‚˜μš”?

λ‹΅λ³€: JNI(Java Native Interface)λŠ” Java μ½”λ“œ λ‚΄μ—μ„œ Cλ‚˜ C++κ³Ό 같은 λ„€μ΄ν‹°λΈŒ μ½”λ“œλ₯Ό ν˜ΈμΆœν•˜κ±°λ‚˜, λ°˜λŒ€λ‘œ λ„€μ΄ν‹°λΈŒ μ½”λ“œμ—μ„œ Java μ½”λ“œλ₯Ό ν˜ΈμΆœν•  수 μžˆλŠ” ν”„λ‘œκ·Έλž˜λ° ν”„λ ˆμž„μ›Œν¬μž…λ‹ˆλ‹€. JNIλŠ” μ‹œμŠ€ν…œ 레벨의 λ¦¬μ†ŒμŠ€λ‚˜ λ ˆκ±°μ‹œ 라이브러리λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•  λ•Œ, λ˜λŠ” μ„±λŠ₯μƒμ˜ 이유둜 직접 ν•˜λ“œμ›¨μ–΄λ₯Ό μ œμ–΄ν•΄μ•Ό ν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄,

κ³ μ„±λŠ₯ κ·Έλž˜ν”½ μ²˜λ¦¬λ‚˜ νŠΉμ • ν•˜λ“œμ›¨μ–΄ μž₯μΉ˜μ™€μ˜ 직접적인 μƒν˜Έμž‘μš©μ„ κ΅¬ν˜„ν•  λ•Œ JNIλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Q6. 가비지 μ»¬λ ‰μ…˜(Garbage Collection)의 κΈ°λ³Έ 원리λ₯Ό μ„€λͺ…ν•΄ μ£Όμ„Έμš”. Javaμ—μ„œ 가비지 μ»¬λ ‰ν„°μ˜ μž‘λ™ 방식에 영ν–₯을 λ―ΈμΉ  수 μžˆλŠ” ν”„λ‘œκ·Έλž˜λ° κ΄€ν–‰μ—λŠ” μ–΄λ–€ 것듀이 μžˆλ‚˜μš”?

λ‹΅λ³€: 가비지 μ»¬λ ‰μ…˜μ€ μ°Έμ‘°λ˜μ§€ μ•ŠλŠ” 객체λ₯Ό μžλ™μœΌλ‘œ κ²€μΆœν•˜κ³ , 이λ₯Ό λ©”λͺ¨λ¦¬μ—μ„œ μ œκ±°ν•˜μ—¬ λ©”λͺ¨λ¦¬λ₯Ό νšŒμˆ˜ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€μž…λ‹ˆλ‹€. Javaμ—μ„œ 가비지 μ»¬λ ‰ν„°μ˜ νš¨μœ¨μ„±μ— 영ν–₯을 λ―ΈμΉ  수 μžˆλŠ” ν”„λ‘œκ·Έλž˜λ° κ΄€ν–‰μœΌλ‘œλŠ”, 객체 μ°Έμ‘°λ₯Ό 적절히 ν•΄μ œν•˜λŠ” 것, λŒ€μš©λŸ‰ 객체의 μž¬μ‚¬μš©, 그리고 μ μ ˆν•œ μ»¬λ ‰μ…˜ μ‚¬μš© 등이 μžˆμŠ΅λ‹ˆλ‹€. λΆˆν•„μš”ν•œ 객체 μ°Έμ‘°λ₯Ό 남겨두지 μ•Šκ³ , λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ΄ 큰 κ°μ²΄λŠ” 풀링 기법을 μ‚¬μš©ν•˜μ—¬ κ΄€λ¦¬ν•¨μœΌλ‘œμ¨, 가비지 μ»¬λ ‰ν„°μ˜ λΆ€ν•˜λ₯Ό 쀄이고 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ„±λŠ₯을 κ°œμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.