DAY 12

πŸ”– 였늘 읽은 λ²”μœ„: Day 6

πŸ˜ƒ μ±…μ—μ„œ κΈ°μ–΅ν•˜κ³  싢은 λ‚΄μš©μ„ μ¨λ³΄μ„Έμš”.

1.자료 좔상화

  • μžλ£ŒμΆ”μƒν™”:
    μ‚¬μš©μžκ°€ κ΅¬ν˜„μ„ λͺ¨λ₯Έ 채 자료의 핡심을 μ‘°μž‘ν•  수 μžˆμ–΄μ•Ό μ§„μ •ν•œ 의미의 ν΄λž˜μŠ€λ‹€. 자료λ₯Ό μ„Έμ„Έν•˜κ²Œ κ³΅κ°œν•˜κΈ°λ³΄λ‹€λŠ” 좔상적인 κ°œλ…μœΌλ‘œ ν‘œν˜„ν•˜λŠ” 편이 μ’‹λ‹€.

  • 자료/객체의 λΉ„λŒ€μΉ­μ„±: 자료/객체의 차이λ₯Ό μ„€λͺ…ν•œ μž₯.

    객체 & 자료 ꡬ쑰:
    - 객체: 좔상화 λ’€λ‘œ 자료λ₯Ό 숨긴 채 자료λ₯Ό λ‹€λ£¨λŠ” ν•¨μˆ˜λ§Œ κ³΅κ°œν•œλ‹€.
    - 자료 ꡬ쑰: 자료λ₯Ό κ·ΈλŒ€λ‘œ κ³΅κ°œν•˜λ©° 별닀λ₯Έ ν•¨μˆ˜λ₯Ό μ œκ³΅ν•˜μ§€ μ•ŠλŠ”λ‹€.

  • μžλ£Œμ™€ 객체의 μž₯단점:
    (자료 ꡬ쑰λ₯Ό μ‚¬μš©ν•˜λŠ”) 절차적인 μ½”λ“œλŠ” κΈ°μ‘΄ 자료 ꡬ쑰λ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠμœΌλ©΄μ„œ μƒˆ ν•¨μˆ˜λ₯Ό μΆ”κ°€ν•˜κΈ° 쉽닀. 반면, 객체 지ν–₯ μ½”λ“œλŠ” κΈ°μ‘΄ ν•¨μˆ˜λ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠμœΌλ©΄μ„œ μƒˆ 클래슀λ₯Ό μΆ”κ°€ν•˜κΈ° 쉽닀.

  • (μ°Έκ³ ) 절차 지ν–₯ μ½”λ“œ vs. 객체 지ν–₯ μ½”λ“œ:
    절차적 μ½”λ“œμ˜ μ˜ˆμ‹œλŠ” λ„ν˜•3개λ₯Ό λ¨Όμ € μ„ μ–Έν•˜κ³  λͺ¨μ–‘을 λ‹€λ£¨λŠ” ν•œ ν•¨μˆ˜μ—μ„œ 3개의 λ„ν˜• 클래슀λ₯Ό λ‹€ λ‹€λ£¨μ—ˆκ³  (ex. public class Square{} ), 객체 지ν–₯ μ½”λ“œμ—μ„œλŠ” λ”°λ‘œ λ„ν˜•μ„ μ„ μ–Έν•˜μ§€ μ•Šκ³ , 3개의 ν•¨μˆ˜μ—μ„œ 각각 λ„ν˜•μ„ μ„ μ–Έ 및 λͺ¨ν˜• λ³€ν˜•κΉŒμ§€ ν•œ λ²ˆμ— λ‹€λ£¨μ—ˆλ‹€. ( ex. public class Square implements Shape {} )



    2. λ””λ―Έν„° 법칙:

    λͺ¨λ“ˆμ€ μžμ‹ μ΄ μ‘°μž‘ν•˜λŠ” 객체의 속사정을 λͺ°λΌμ•Ό ν•œλ‹€λŠ” 법칙이닀.

  • 기차좩돌(train wreck): μ•„λž˜μ™€ 같이 μ—¬λŸ¬ 객차가 ν•œμ€„λ‘œ 이어진 기차처럼 λ³΄μ΄λŠ” ν˜•μ‹μ˜ μ½”λ“œ. ν”Όν•˜κΈΈ κΆŒκ³ λœλ‹€.

final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();

μ•„λž˜μ™€ 같이 κ³ μΉ˜λŠ” 게 μ’‹λ‹€.

Ooptions opts = ctxt.getOptions();
File scratchDir = opts.getScratchDir();
final String outputDir = scratchDir.getAbsolutePath();

λ””λ―Έν„° λ²•μΉ™κΉŒμ§€ κ³ λ €ν•œλ‹€λ©΄ μ΄λ ‡κ²Œ getν•¨μˆ˜λ₯Ό ν”Όν•˜λ©΄ λœλ‹€:

Ooptions opts = ctxt.options();
File scratchDir = opts.scratchDir();
final String outputDir = scratchDir.absolutePath();

  • μž‘μ’… ꡬ쑰:
    λ‹¨μˆœν•œ μžλ£Œκ΅¬μ‘°μ—λ„ 쑰회 ν•¨μˆ˜μ™€ μ„€μ • ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜λΌ μš”κ΅¬ν•˜λŠ” ν”„λ ˆμž„μ›Œν¬μ™€ ν‘œμ€€(ex.bean) 이 μ‘΄μž¬ν•˜κΈ°μ— 객체와 μžλ£Œκ΅¬μ‘°κ°€ μ„žμΈ μž‘μ’… ꡬ쑰가 λ‚˜μ˜¬ λ•Œκ°€ μžˆλŠ”λ°, μƒˆλ‘œμš΄ 자료 ꡬ쑰 λ‘˜ λ‹€ μΆ”κ°€ν•˜κΈ° μ–΄λ €μš΄ λ‹¨μ λ§Œ λͺ¨μ•„놓은 ꡬ쑰둜 ν”Όν•˜λŠ” 게 λ‚«λ‹€.

3. ν•΄κ²°μ±…

  • ꡬ쑰체 감좔기:
    λ§Œμ•½ μœ„μ˜ ctxt, options, scratchDir 이 λ‹¨μˆœ 자료 ꡬ쑰가 μ•„λ‹Œ 객체라면 λ‚΄λΆ€ ꡬ쑰λ₯Ό 감좰야 ν•˜λ―€λ‘œ get 은 ν”Όν•˜λŠ” 게 μ’‹λ‹€. κ·Έλ ‡λ‹€λ©΄ μž„μ‹œ λ””λ ‰ν„°λ¦¬μ˜ μ ˆλŒ€ κ²½λ‘œλŠ” μ–΄λ–»κ²Œ μ–»μ–΄μ•Ό μ’‹μ„κΉŒ?

    String outFile = outputDir + "/" + class.Namereplace('.','/')+".class";
    FileOutputStream fout = new FileOutputStream(outFile);
    BufferedOutputStream bos = new BufferedOutputStream(fout);

ctxt κ°€ 객체라면 λ­”κ°€λ₯Ό ν•˜λΌκ³  말해야지 속을 λ“œλŸ¬λ‚΄λΌκ³  λ§ν•˜λ©΄ μ•ˆ λœλ‹€. 예λ₯Ό λ“€μ–΄, μž„μ‹œ λ””λ ‰ν„°λ¦¬μ˜ μ ˆλŒ€ κ²½λ‘œκ°€ μ™œ ν•„μš”ν• κΉŒ? μ ˆλŒ€ 경둜λ₯Ό μ–»μ–΄ 어디에 μ“Έλ €κ³ ? κ·Έλ ‡λ‹€λ©΄ ctxt 객체에 μž„μ‹œ νŒŒμΌμ„ μƒμ„±ν•˜λΌκ³  μ‹œν‚€λ©΄ μ–΄λ–¨κΉŒ?

BufferedOutputStream bos = ctxt.createScratchFileStream(classFileName);

  • 자료 전달 객체:
    자료 ꡬ쑰체의 μ „ν˜•μ μΈ ν˜•νƒœλŠ” 곡개 λ³€μˆ˜λ§Œ 있고 ν•¨μˆ˜κ°€ μ—†λŠ” ν΄λž˜μŠ€λ‹€. 이런 자료 ꡬ쑰체λ₯Ό λ•Œλ‘œλŠ” 자료 전달 객체(DTO, Data Transfer Object) 라고 ν•œλ‹€.

    μ’€ 더 일반적인 ν˜•νƒœλŠ” '빈(bean)' ꡬ쑰이닀. λΉˆμ€ λΉ„κ³΅κ°œ λ³€μˆ˜λ₯Ό get/set ν•¨μˆ˜λ‘œ μ‘°μž‘ν•œλ‹€.

    ν™œμ„± λ ˆμ½”λ“œλŠ” DTO 의 νŠΉμˆ˜ν•œ ν˜•νƒœλ‹€. 곡개 λ³€μˆ˜κ°€ μžˆκ±°λ‚˜ λΉ„κ³΅κ°œ λ³€μˆ˜μ— 쑰회/μ„€μ • ν•¨μˆ˜κ°€ μžˆλŠ” 자료 κ΅¬μ‘°μ§€λ§Œ, λŒ€κ°œ save λ‚˜ find 같은 탐색 ν•¨μˆ˜λ„ μ œκ³΅ν•œλ‹€. ν™œμ„± λ ˆμ½”λ“œλŠ” 자료 ꡬ쑰둜 μ·¨κΈ‰ν•œλ‹€. λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™μ„ λ‹΄μœΌλ©΄μ„œ λ‚΄λΆ€ 자료λ₯Ό μˆ¨κΈ°λŠ” κ°μ²΄λŠ” λ”°λ‘œ μƒμ„±ν•œλ‹€.


πŸ€” 였늘 읽은 μ†Œκ°μ€? λ– μ˜€λ₯΄λŠ” 생각을 κ°€λ³κ²Œ μ μ–΄λ³΄μ„Έμš”

객체, 자료 ꡬ쑰의 차이λ₯Ό μ•Œκ²Œ λ˜μ—ˆλ‹€. 그리고 κ°€λŠ₯ν•˜λ©΄ 객체 지ν–₯ μ½”λ“œλ₯Ό μ‚¬μš©ν•˜λΌλŠ” λ””λ―Έν„° 법칙에 λŒ€ν•΄ 배우게 됐닀. μžλ°” λ‚΄μš©μ΄ 많이 λ‚˜μ˜€κ³  ν˜„μž¬ λ‹€λ£¨λŠ” JS λ‚˜ React μ™€λŠ” 거리가 μžˆλŠ” κ²ƒμ²˜λŸΌ 보여 λ‹€μ†Œ 거리감이 λŠκ»΄μ§€λŠ” μž₯μ΄μ—ˆλ‹€.

πŸ”Ž κΆκΈˆν•œ λ‚΄μš©μ΄ μžˆκ±°λ‚˜, 잘 μ΄ν•΄λ˜μ§€ μ•ŠλŠ” λ‚΄μš©μ΄ μžˆλ‹€λ©΄ μ μ–΄λ³΄μ„Έμš”.

객체 & 자료 ꡬ쑰:

  • 객체: 좔상화 λ’€λ‘œ 자료λ₯Ό 숨긴 채 자료λ₯Ό λ‹€λ£¨λŠ” ν•¨μˆ˜λ§Œ κ³΅κ°œν•œλ‹€.
  • 자료 ꡬ쑰: 자료λ₯Ό κ·ΈλŒ€λ‘œ κ³΅κ°œν•˜λ©° 별닀λ₯Έ ν•¨μˆ˜λ₯Ό μ œκ³΅ν•˜μ§€ μ•ŠλŠ”λ‹€.

μ†Œκ° 3쀄 μš”μ•½

  • μ‚¬μš©μžκ°€ κ΅¬ν˜„μ„ λͺ¨λ₯Έ 채 자료의 핡심을 μ‘°μž‘ν•  수 μžˆμ–΄μ•Ό μ§„μ •ν•œ 의미의 ν΄λž˜μŠ€λ‹€. 자료λ₯Ό μ„Έμ„Έν•˜κ²Œ κ³΅κ°œν•˜κΈ°λ³΄λ‹€λŠ” 좔상적인 κ°œλ…μœΌλ‘œ ν‘œν˜„ν•˜λŠ” 편이 μ’‹λ‹€.
  • λ””λ―Έν„° 법칙: λͺ¨λ“ˆμ€ μžμ‹ μ΄ μ‘°μž‘ν•˜λŠ” 객체의 속사정을 λͺ°λΌμ•Ό ν•œλ‹€λŠ” 법칙이닀.
  • μ–΄λ–€ μ‹œμŠ€ν…œμ„ κ΅¬ν˜„ν•  λ•Œ, μƒˆλ‘œμš΄ 자료 νƒ€μž…μ„ μΆ”κ°€ν•˜λŠ” μœ μ—°μ„±μ΄ ν•„μš”ν•˜λ©΄ 객체가 더 μ ν•©ν•˜λ‹€. λ°˜λŒ€λ‘œ μƒˆλ‘œμš΄ λ™μž‘μ„ μΆ”κ°€ν•˜λŠ” μœ μ—°μ„±μ΄ ν•„μš”ν•˜λ©΄ 자료 ꡬ쑰와 μ ˆμ±„ 지ν–₯ μ½”λ“œκ°€ 더 μ ν•©ν•˜λ‹€.

0개의 λŒ“κΈ€