Skip to content

Latest commit

Β 

History

History
299 lines (213 loc) Β· 12.2 KB

Section2.md

File metadata and controls

299 lines (213 loc) Β· 12.2 KB

2. μžλ°”μ™€ 절차적/ꡬ쑰적 ν”„λ‘œκ·Έλž˜λ°

μžλ°” ν”„λ‘œκ·Έλž¨μ˜ 개발과 ꡬ동

ν˜„μ‹€μ„Έκ³„ 가상 세계(μžλ°” μ›”λ“œ)
μ†Œν”„νŠΈμ›¨μ–΄ 개발 도ꡬ JDK(Java Development Kit) - μžλ°” 개발 도ꡬ JVM용 μ†Œν”„νŠΈμ›¨μ–΄ 개발 도ꡬ
운영체제 JRE(Java Runtime Environment) - μžλ°” μ‹€ν–‰ ν™˜κ²½ JVM용 OS
ν•˜λ“œμ›¨μ–΄ - 물리적 컴퓨터 JVM(Java Virtual Machine) - μžλ°” 가상 기계 κ°€μƒμ˜ 컴퓨터
  • JDKλ₯Ό μ΄μš©ν•΄ 개발된 ν”„λ‘œκ·Έλž¨μ€ JRE에 μ˜ν•΄ κ°€μƒμ˜ 컴퓨터인 JVMμƒμ—μ„œ κ΅¬λ™λœλ‹€.

    • JDKκ°€ JREλ₯Ό ν¬ν•¨ν•˜κ³  JREλŠ” JVM을 ν¬ν•¨ν•˜λŠ” ν˜•νƒœλ‘œ λ°°ν¬λœλ‹€.
    • μ΄λ‘œμΈν•΄ κ°œλ°œμžλŠ” 본인 OS에 λ§žλŠ” JVM용으둜 ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜κ³  λ°°ν¬ν•˜λ©΄ JVM이 μ€‘μž¬μžλ‘œμ„œ 각 OSμ—μ„œ κ΅¬λ™ν•˜λŠ” 데 아무 문제 없이 λ§Œλ“€μ–΄μ€€λ‹€.
  • 객체 지ν–₯ ν”„λ‘œκ·Έλž¨μ˜ λ©”λͺ¨λ¦¬ μ‚¬μš©λ°©μ‹

    • 데이터 μ €μž₯ μ˜μ—­ = Tλ©”λͺ¨λ¦¬ ꡬ쑰

μžλ°”μ— μ‘΄μž¬ν•˜λŠ” 절차적/ꡬ쑰적 ν”„λ‘œκ·Έλž˜λ°μ˜ μœ μ‚°

  • 절차적 ν”„λ‘œκ·Έλž˜λ° : gotoλ₯Ό 쓰지 λ§λΌλŠ” 것
    • goto : ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ μˆœμ„œλ₯Ό 이리저리 이동 μ‹œν‚€λŠ” μ˜ˆμ•½μ–΄ (μ œμ–΄μ˜ μ—­ν• )
    • 이동이 μž¦μ•„μ§€λ©΄ ν”„λ‘œκ·Έλž¨ 이해가 νž˜λ“€λ‹€. ν”„λ‘œκ·Έλž¨μ„ λ…Όλ¦¬μ μœΌλ‘œ 잘 κ΅¬μ„±ν•˜λ©΄ gotoλ₯Ό ν”Όν•  수 μžˆλ‹€.
  • ꡬ쑰적 ν”„λ‘œκ·Έλž˜λ° : ν•¨μˆ˜λ₯Ό μ“°λΌλŠ” 것
    • μ€‘λ³΅μ½”λ“œλ₯Ό ν•œκ³³μ— λͺ¨μ•„ 관리할 수 있고 논리λ₯Ό ν•¨μˆ˜ λ‹¨μœ„λ‘œ λΆ„λ¦¬ν•΄μ„œ μ΄ν•΄ν•˜κΈ° μ‰¬μš΄ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆλ‹€.

    곡유 문제둜 μ „μ—­λ³€μˆ˜λ³΄λ‹€ μ§€μ—­λ³€μˆ˜λ₯Ό μ“°λΌλŠ” 지침도 있음.

  • 객체 지ν–₯ μ–Έμ–΄μ—μ„œ 절차적/ꡬ쑰적 ν”„λ‘œκ·Έλž˜λ°μ˜ μœ μ‚°μ€ λ©”μ„œλ“œ μ•ˆμ—μ„œ 확인할 수 μžˆλ‹€.
    • μ œμ–΄λ¬Έμ΄ μ‘΄μž¬ν•  수 μžˆλŠ” 곡간은 λ°”λ‘œ λ©”μ„œλ“œ 내뢀이기 λ•Œλ¬Έ.
    • goto = μ œμ–΄λ¬Έ , ν•¨μˆ˜ = λ©”μ„œλ“œ

    ν•¨μˆ˜μ™€ λ©”μ„œλ“œ 차이 : ν•¨μˆ˜λŠ” ν΄λž˜μŠ€λ‚˜ 객체와 아무관계 μ—†μ§€λ§Œ λ©”μ„œλ“œλŠ” λ°˜λ“œμ‹œ 클래슀 μ•ˆμ— μ‘΄μž¬ν•΄μ•Ό ν•œλ‹€.

  • 절차적/ꡬ쑰적 ν”„λ‘œκ·Έλž˜λ°μ˜ μœ μ‚°μ˜ 예λ₯Ό 보면 μžλ°” ν‚€μ›Œλ“œ 쀑 절반 이상이닀.
    • for, switch, if, else, while, return, continue, break λ“±
  • 객체지ν–₯을 μ΄ν•΄ν•˜κΈ°μœ„ν•΄ 절차적/ꡬ쑰적 ν”„λ‘œκ·Έλž˜λ°μ„ μ΄ν•΄ν•΄λ³΄μž.

λ‹€μ‹œ λ³΄λŠ” main()λ©”μ„œλ“œ : λ©”μ„œλ“œ μŠ€νƒ ν”„λ ˆμž„

ackage section2.ex2_1;

public class Start{

  public static void main(String[] args) {
    System.out.println("Hello OOP!!");
  }
}
  1. JREλŠ” ν”„λ‘œκ·Έλž¨ μ•ˆμ— main()λ©”μ„œλ“œκ°€ μžˆλŠ”μ§€ ν™•μΈν•œλ‹€.

  2. 확인 되면 JREλŠ” JVM에 전원을 λ„£μ–΄ λΆ€νŒ…ν•œλ‹€.

  3. λΆ€νŒ…λœ JVM은 λͺ©μ  νŒŒμΌμ„ μ‹€ν–‰ν•œλ‹€. (λ©”λͺ¨λ¦¬ ꡬ쑰λ₯Ό ꡬ성 및 ꡬ문 μ‹€ν–‰)
    3-1. main()λ©”μ„œλ“œ μ‹€ν–‰μ „ μ „μ²˜λ¦¬ μž‘μ—…μ„ μ§„ν–‰ν•œλ‹€.

    • κ°€μž₯ λ¨Όμ € java.lang νŒ¨ν‚€μ§€λ₯Ό Tλ©”λͺ¨λ¦¬ μŠ€νƒœν‹± μ˜μ—­μ— λ°°μΉ˜ν•œλ‹€.
    • κ°œλ°œμžκ°€ μž‘μ„±ν•œ λͺ¨λ“  ν΄λž˜μŠ€μ™€ importνŒ¨ν‚€μ§€ μ—­μ‹œ Tλ©”λͺ¨λ¦¬ μŠ€νƒœν‹± μ˜μ—­μ— λ°°μΉ˜ν•œλ‹€.

    3-2. main()λ©”μ„œλ“œλ₯Ό μŠ€νƒν”„λ ˆμž„(stack frame)에 ν• λ‹Ήν•œλ‹€.

    • μ—¬λŠ” μ€‘κ΄„ν˜Έλ₯Ό λ§Œλ‚  λ•Œ μŠ€νŒ©ν”„λ ˆμž„μ΄ ν•˜λ‚˜μ”© 생기며 λ‹«λŠ” μ€‘κ΄„ν˜Έλ₯Ό λ§Œλ‚˜λ©΄ μŠ€νƒν”„λ ˆμž„μ΄ μ†Œλ©Έλœλ‹€.

    3-3. λ©”μ„œλ“œ 인자인 argsλ₯Ό μŠ€νƒν”„λ ˆμž„(stack frame)의 λ³€μˆ˜ 곡간에 ν• λ‹Ήν•œλ‹€.
    3-4. λ©”λͺ¨λ¦¬ ꡬ쑰 ꡬ성 ν›„ main()λ©”μ„œλ“œμ˜ 첫 λͺ…령문을 μ‹€ν–‰ν•œλ‹€.

    3-5. ꡬ문 싀행이 λλ‚˜λ©΄ main()λ©”μ„œλ“œμ˜ μŠ€νƒν”„λ ˆμž„μ΄ μ†Œλ©Έλœλ‹€.

  4. 싀행이 λλ‚˜λ©΄ JREλŠ” JVM을 μ’…λ£Œν•œλ‹€.

  5. JRE도 μ‚¬μš©ν–ˆλ˜ μžμ›μ„ μš΄μ˜μ²΄μ œμ— λ°˜λ‚©ν•œλ‹€. (운영체제 μƒμ˜ λ©”λͺ¨λ¦¬μ—μ„œ μ†Œλ©Έ)

  • μ‹€μ œ Debug ν™”λ©΄


λ³€μˆ˜μ™€ λ©”λͺ¨λ¦¬ : λ³€μˆ˜! λ„ˆ μ–΄λ”” μžˆλ‹ˆ?

package section2.ex2_2;

public class Start2 {

  public static void main(String[] args) {
    int i;
    i = 10;

    double d = 20.0;
  }
}
  • int i;

    • λ©”λͺ¨λ¦¬μ— 4λ°”μ΄νŠΈ 크기의 μ •μˆ˜ μ €μž₯ 곡간을 main()λ©”μ„œλ“œ μŠ€νƒν”„λ ˆμž„μ•ˆμ— λ§ˆλ ¨ν•˜λΌλŠ” λͺ…λ Ήμ–΄λ‹€.
    • 아직 μ΄ˆκΈ°ν™” λ˜μ§€ μ•Šμ€ μƒνƒœμ΄λ―€λ‘œ, λ‹€λ₯Έ ν”„λ‘œκ·Έλž¨μ΄ μ²­μ†Œν•˜μ§€ μ•Šκ³  κ°„ 값을 κ·ΈλŒ€λ‘œ 가지고 있게 λœλ‹€.
    • 이 μƒνƒœλ‘œ i λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” μ½”λ“œλ₯Ό λ§Œλ‚˜κ²Œ 되면, 컴파일 μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.
      • The local variable i may not have been initialized
  • i = 10; double d = 20.0;

    • double d = 20.0;의 경우 λ³€μˆ˜ μ„ μ–Έ λͺ…λ Ήλ¬Έκ³Ό ν• λ‹Ή λͺ…령문이 ν•œμ€„μ— μžˆλŠ” 것

블둝 ꡬ문과 λ©”λͺ¨λ¦¬ : 블둝 μŠ€νƒ ν”„λ ˆμž„

package section2.ex2_3;

public class Start3 {

  public static void main(String[] args) {
    int i = 10;
    int k = 20;

    if (i == 10) {
      int m = k + 5;
      k = m;
    } else {
      int p = k + 10;
      k = p;
    }
  }

  //k = m + p;
}
  • if (i == 10) λΆ„κΈ°

    • 비ꡐ κ²°κ³Όκ°€ true μ΄λ―€λ‘œ ifλΈ”λ‘μ˜ μŠ€νƒ ν”„λ ˆμž„μ΄ main() λ©”μ„œλ“œμ˜ μŠ€νƒν”„λ ˆμž„ μ•ˆμ— μ€‘μ²©λ˜μ–΄ μƒμ„±λœλ‹€.
  • int m = k + 5;

    • λ³€μˆ˜ m에 값을 ν• λ‹Ήν•œλ‹€.
    • 이 λ•Œ if μŠ€νƒ ν”„λ ˆμž„ 밖에 μžˆλŠ” kλ³€μˆ˜λ₯Ό 연산에 μ°Έμ—¬μ‹œν‚¨λ‹€.
  • if 블둝 μ’…λ£Œ ν›„ μŠ€νƒ ν”„λ ˆμž„μ€ μ†Œλ©Έλœλ‹€.

    • else 블둝은 μŠ€νƒ λ©”λͺ¨λ¦¬μ— λ“±μž₯ν•˜μ§€λ„ λͺ»ν–ˆμŒ.

λ§Œμ•½ 주석을 ν•΄μ œν•œλ‹€λ©΄?
mλ³€μˆ˜μ™€ pλ³€μˆ˜λŠ” 더 이상 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€. 주석을 ν’€κ³  μ‹€ν–‰ν•˜λ©΄ 컴파일 였λ₯˜κ°€ λ°œμƒν•œλ‹€.
m cannot be resolved to a variable , p cannot be resolved to a variable


지역 λ³€μˆ˜μ™€ λ©”λͺ¨λ¦¬ : μŠ€νƒ ν”„λ ˆμž„μ— κ°‡ν˜”μ–΄μš”!

  • 지역 λ³€μˆ˜ : μŠ€νƒ ν”„λ ˆμž„ μ•ˆμ—μ„œ 일생을 보낸닀. μŠ€νƒ ν”„λ ˆμž„μ΄ 사라지면 ν•¨κ»˜ 사라진닀.
  • 클래슀 멀버 : μŠ€νƒœν‹± μ˜μ—­μ—μ„œ 일생을 보낸닀. JVM이 μ’…λ£Œλ  λ•Œ κΉŒμ§€ κ³ μ •λœ(static) μƒνƒœλ‘œ 자리λ₯Ό 지킨닀.
  • 객체 멀버 λ³€μˆ˜ : νž™μ—μ„œ 일생을 보낸닀. 객체와 ν•¨κ»˜ 가비지 컬렉터(λ©”λͺ¨λ¦¬ 회수기)에 μ˜ν•΄ 일생을 λ§ˆμΉœλ‹€.

μ™ΈλΆ€ μŠ€νƒ ν”„λ ˆμž„μ—μ„œ λ‚΄λΆ€ μŠ€νƒ ν”„λ ˆμž„μ˜ λ³€μˆ˜μ— μ ‘κ·Όν•˜λŠ” 것은 λΆˆκ°€λŠ₯ ν•˜λ‚˜ κ·Έ 역은 κ°€λŠ₯ν•˜λ‹€.
κ·Έλž˜μ„œ μŠ€νƒ λ©”λͺ¨λ¦¬ λ‚΄μ˜ μŠ€νƒ ν”„λ ˆμž„ μ•ˆμ˜ λ³€μˆ˜λ₯Ό 지역 λ³€μˆ˜λΌκ³  ν•œλ‹€.


λ©”μ„œλ“œ 호좜과 λ©”λͺ¨λ¦¬ : λ©”μ„œλ“œ μŠ€νƒ ν”„λ ˆμž„2

package section2.ex2_5;

public class Start4 {

  public static void main(String[] args) {
    int k = 5;
    int m;

    m = square(k);
  }

  private static int square(int k) {
    int result;

    k = 25;
    
    result = k;

    return result;
  }
}
  • square() 호좜

    • main()λ©”μ„œλ“œμ˜ λ³€μˆ˜ k와 square()λ©”μ„œλ“œμ˜ λ³€μˆ˜ kλŠ” λ³„λ„μ˜ λ³€μˆ˜ 곡간이닀.
    • 이λ₯Ό Call By Value(값에 μ˜ν•œ 호좜) λΌν•˜λ©°, square()λ©”μ„œλ“œμ˜ k에 무슨 짓을 해도 main()λ©”μ„œλ“œμ˜ k에 영ν–₯이 μ—†λ‹€.
      • 인자둜 μ „λ‹¬λ˜λŠ” 것은 λ³€μˆ˜κ°€ μ €μž₯ν•œ κ°’λ§Œ λ³΅μ œν•΄μ„œ μ „λ‹¬ν•œλ‹€.
    • square()κ°€ λλ‚˜λ©΄ μŠ€ν…ν”„λ ˆμž„μ€ μ‚¬λΌμ§€μ§€λ§Œ, λ°˜ν™˜κ°’μ΄ μžˆμœΌλ‹ˆ 그값을 λŒλ €μ£Όλ©΄μ„œ μ†Œλ©Έλœλ‹€.

μ—¬κΈ°μ„œ λ“œλŠ” λͺ‡κ°€μ§€ 의문

  • main()μ–΄λ”˜κ°€ square()λ‚΄μ˜ μ§€μ—­λ³€μˆ˜μ— μ ‘κ·Όν•  수 μžˆμ„κΉŒ? μ—†λ‹€.
    • square()호좜 μ „μ—” μŠ€νƒ ν”„λ ˆμž„ μ‘°μ°¨ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€.
    • square()호좜이 λλ‚œ ν›„μ—” λ°”λ‘œ μŠ€ν… ν”„λ ˆμž„μ΄ μ†Œλ©Έλœλ‹€.
  • square()μ–΄λ”˜κ°€ main()λ‚΄μ˜ μ§€μ—­λ³€μˆ˜μ— μ ‘κ·Όν•  수 μžˆμ„κΉŒ? μ—†λ‹€.
    μ €μžκ°€ μ§μž‘ν•˜λŠ” 이유 3가지
    1. 그것이 μ΄μΉ˜μ— 맞기 λ•Œλ¬Έμ΄λ‹€.
      • λ©”μ„œλ“œλŠ” μ„œλ‘œμ˜ 고유 곡간이며, μ„œλ‘œ μΉ¨λ²”ν•˜λ©΄ 문제λ₯Ό μœ λ°œν•  수 있기 λ•Œλ¬Έμ΄λ‹€.
    2. 포인터 문제 λ•Œλ¬Έμ΄λ‹€.
      • square()λ©”μ„œλ“œμ—μ„œ main()λ©”μ„œλ“œ λ‚΄λΆ€μ˜ μ§€μ—­λ³€μˆ˜μ— μ ‘κ·Όν•˜λ €λ©΄ λ³€μˆ˜μ˜ μ •ν™•ν•œ μœ„μΉ˜λ₯Ό μ•Œμ•„μ•Όν•œλ‹€.
      • μœ„μΉ˜λ₯Ό μ•ŒκΈ°μœ„ν•΄μ„  포인터(λ©”λͺ¨λ¦¬ μ£Όμ†Œκ°’)을 μ•Œμ•„μ•Όν•œλ‹€. ν•˜μ§€λ§Œ Javaμ—” 포인터가 μ—†λ‹€.
    3. λ©”μ„œλ“œλŠ” λ‹€μ–‘ν•œ κ³³μœΌλ‘œλΆ€ν„° ν˜ΈμΆœλœλ‹€.
      • λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄μ„œ λ§Œλ“€μ–΄μ§€λŠ” μŠ€νƒ κ΅¬μ‘°λŠ” ν•­μ‹œ λ³€ν™”ν•œλ‹€.
      • A ➑️ B ➑️ C둜 호좜될 수 있고 F ➑️ B ➑️ C둜 호좜될 μˆ˜λ„ μžˆλ‹€.
      • λ§Œμ•½ ν•œ Cλ©”μ„œλ“œκ°€ ν•˜λ‹¨ λ©”μ„œλ“œ μŠ€νƒ ν”„λ ˆμž„ 쀑 ν•œ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•œλ‹€λ©΄, μ–΄λŠ μŠ€νƒ ν”„λ ˆμž„μ˜ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•΄μ•Όν•˜λŠ”κ°€?
      • κ²°κ΅­ 이 문제λ₯Ό ν•΄κ²°ν•˜λ €λ©΄ 또 포인터가 ν•„μš”ν•˜λ‹€.

μ „μ—­ λ³€μˆ˜μ™€ λ©”λͺ¨λ¦¬ : μ „μ—­ λ³€μˆ˜ 쓰지 λ§λΌλ‹ˆκΉŒμš”!

λ©”μ„œλ“œ 사이 값을 κ³΅μœ ν•˜λŠ” 또 ν•˜λ‚˜μ˜ 방법은 μ „μ—­λ³€μˆ˜ μ‚¬μš©μ΄λ‹€.

package section2.ex2_6;

public class Start5 {

  static int share;

  public static void main(String[] args) {
    share = 55;

    int k = fun(5, 7);
  }

  private static int fun(int m, int p) {
    share = m + p;

    return m - p;
  }
}
  • mainλ©”μ„œλ“œ μ‹€ν–‰ μ „ Tλ©”λͺ¨λ¦¬

    • shareλŠ” static λ³€μˆ˜μ΄λ―€λ‘œ 클래슀 λ©€λ²„λ‘œμ„œ μŠ€νƒœν‹± μ˜μ—­μ˜ λ³€μˆ˜ 곡간에 ν• λ‹Ήλœλ‹€.
  • funλ©”μ„œλ“œ 호좜

    • static λ³€μˆ˜ ν• λ‹Ή μ „

    • static λ³€μˆ˜ ν• λ‹Ή ν›„

μ „μ—­λ³€μˆ˜μ˜ νŠΉμ§•

  • μ „μ—­ λ³€μˆ˜λŠ” μŠ€νƒ ν”„λ ˆμž„μ— 독립적이며, μ—¬λŸ¬ λ©”μ„œλ“œλ“€μ΄ κ³΅μœ ν•΄μ„œ μ‚¬μš©ν•  수 μžˆλ‹€.
  • ν•˜μ§€λ§Œ, μ½”λ“œκ°€ μ»€μ§€λ©΄μ„œ μ—¬λŸ¬ λ©”μ„œλ“œμ—μ„œ μ „μ—­ λ³€μˆ˜μ˜ 값을 λ³€κ²½ν•˜κΈ° μ‹œμž‘ν•œλ‹€λ©΄?
  • Tλ©”λͺ¨λ¦¬λ‘œ μΆ”μ ν•˜μ§€ μ•ŠλŠ” 이상 μ „μ—­ λ³€μˆ˜μ— μ €μž₯λ˜μ–΄ μžˆλŠ” κ°’ νŒŒμ•…μ΄ 쉽지 μ•Šλ‹€.
    • μœ„ μ˜ˆμ œμ—μ„œλ„ μ½”λ“œλ₯Ό 좔적해 λ“€μ–΄κ°€μ•Όλ§Œ κ·Έ 값이 λ³€ν•œ 이유λ₯Ό νŒŒμ•…ν•  수 μžˆλ‹€.

κ²°λ‘ 

  • μ „μ—­ λ³€μˆ˜λ₯Ό ν”Όν•  수 있으면 ν”Όν•˜λΌ.
  • ν•˜μ§€λ§Œ 읽기 μ „μš©μœΌλ‘œ 값을 κ³΅μœ ν•΄μ„œ μ „μ—­ λ³€μˆ˜λ‘œ μ“°λŠ” 건 적극 μΆ”μ²œ. ex) μ›μ£Όμœ¨

λ©€ν‹° μŠ€λ ˆλ“œ / λ©€ν‹° ν”„λ‘œμ„ΈμŠ€μ˜ 이해

  • λ©€ν‹° μŠ€λ ˆλ“œ : ν•˜λ‚˜μ˜ Tλ©”λͺ¨λ¦¬μ˜ μŠ€νƒ μ˜μ—­μ„ μŠ€λ ˆλ“œ 개수만큼 λΆ„ν• ν•΄μ„œ μ“΄λ‹€.

    • ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œμ—μ„œ λ‹€λ₯Έ μŠ€λ ˆλ“œμ˜ μŠ€νƒμ˜μ—­μ€ μ ‘κ·Όν•  수 μ—†μ§€λ§Œ, staticκ³Ό νž™μ˜μ—­μ€ κ³΅μœ ν•΄μ„œ μ‚¬μš©ν•˜λŠ” ꡬ쑰.
    • λ©”λͺ¨λ¦¬λ₯Ό 적게 μ‚¬μš©ν•  수 μžˆλŠ” ꡬ쑰.
  • λ©€ν‹° ν”„λ‘œμ„ΈμŠ€ : λ‹€μˆ˜μ˜ 데이터 μ €μž₯ μ˜μ—­. 즉 λ‹€μˆ˜μ˜ Tλ©”λͺ¨λ¦¬λ₯Ό κ°–λŠ”λ‹€.

    • 각자 κ³ μœ ν•œ 곡간을 κ°–κΈ° λ•Œλ¬Έμ— λ©”λͺ¨λ¦¬ μ•ˆμ „ν•œ ꡬ쑰.
    • λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ€ 그만큼 크닀.

μ„œλΈ”λ¦Ώμ€ μš”μ²­λ‹Ή μŠ€λ ˆλ“œλ₯Ό μƒμ„±ν•œλ‹€ ➑️ μ΄λŠ” ν”„λ‘œμ„ΈμŠ€λ³΄λ‹€ νš¨μœ¨μ μ΄λ‹€.

λ©€ν‹° μŠ€λ ˆλ“œμ—μ„œ μ „μ—­ λ³€μˆ˜ μ‚¬μš©μ˜ 문제점

  • μ“°κΈ° κ°€λŠ₯ν•œ μ „μ—­ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ μŠ€λ ˆλ“œ μ•ˆμ „μ„±μ΄ 깨진닀고 ν‘œν˜„ν•œλ‹€.
    • λ¬Όλ‘  lock을 κ±°λŠ” 방법이 μžˆμ§€λ§Œ μ΄λŠ” λ©€ν‹° μŠ€λ ˆλ“œμ˜ μž₯점은 버린것과 κ°™λ‹€.
  • μ˜ˆμ‹œ
    • μŠ€λ ˆλ“œ1이 μ „μ—­λ³€μˆ˜A에 10을 ν• λ‹Ήν–ˆλ‹€.
    • CPU μ‚¬μš©κΆŒμ΄ μŠ€λ ˆλ“œ2둜 λ„˜μ–΄κ°€κ³  μŠ€λ ˆλ“œ2κ°€ μ „μ—­λ³€μˆ˜A에 20을 ν• λ‹Ήν–ˆλ‹€.
    • CPU μ‚¬μš©κΆŒμ΄ λ‹€μ‹œ μŠ€λ ˆλ“œ1둜 λ„˜μ–΄κ°€κ³  μŠ€λ ˆλ“œ1은 μ „μ—­λ³€μˆ˜Aλ₯Ό 좜λ ₯ν–ˆλ”λ‹ˆ κ°‘μžκΈ° 20이 λ‚˜μ™”λ‹€.

μš©μ–΄ 정리
절차적/ꡬ쑰적 ν”„λ‘œκ·Έλž˜λ° : κ³΅μœ λ³€μˆ˜ = ν•„λ“œ, κΈ°λŠ₯적 μš”μ†Œ = ν•¨μˆ˜
객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° : μ „μ—­λ³€μˆ˜ = ν”„λ‘œνΌν‹°, ν•¨μˆ˜ = λ©”μ„œλ“œ

정리 - 객체 지ν–₯은 절차적/ꡬ쑰적 ν”„λ‘œκ·Έλž˜λ°μ˜ μ–΄κΉ¨λ₯Ό λ”›κ³ 

  • μ—°μ‚°μž, μ œμ–΄λ¬Έ, λ©”λͺ¨λ¦¬ 관리 체계 λ“±λ“± 객체 지ν–₯은 절차적/ꡬ쑰적 ν”„λ‘œκ·Έλž˜λ°μ˜ λ§Žμ€ 뢀뢄을 μ°¨μš©ν•˜κ³  μžˆλ‹€.
    • C++도 Cμ–Έμ–΄λ₯Ό λΆ€μ •ν•œ 것이 μ•„λ‹ˆλΌ κ³„μŠΉν•œ 것이닀.
  • κ·Έλž˜μ„œ ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” 절차적/ꡬ쑰적 ν”„λ‘œκ·Έλž˜λ°λ„ 잘 μ•Œκ³ μžˆμ–΄μ•Όν•œλ‹€.

2μž₯μ—μ„œλŠ” 객체λ₯Ό μ‚¬μš©ν•œ 적이 μ—†κΈ° λ•Œλ¬Έμ— νž™ μ˜μ—­μ€ λ™μž‘ν•˜μ§€ μ•Šμ•˜μŒ.