1115 - 1124


# 1115 - 1124

# 1115 - ์ƒ์†๊ณผ ์ปดํฌ์ง€์…˜

# ์ƒ์†๊ณผ composite(์กฐํ•ฉ) ์ด๋ž€?

# ์ƒ์†

  • IS-A๊ด€๊ณ„๋กœ ์ •์˜๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ถ€๋ชจํด๋ž˜์Šค๋ฅผ 'ํ™•์žฅ'ํ•˜๋Š” ๊ฐœ๋…์ด๋‹ค.
  • ์ƒ์†์„ ๋ฐ›์€ ์ž์‹ํด๋ž˜์Šค๋Š”, ๋ถ€๋ชจํด๋ž˜์Šค์˜ ๋ณ€์ˆ˜์™€ ๋ฉ”์†Œ๋“œ์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ณ , ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ ํ•  ์ˆ˜ ์žˆ๋‹ค. (์ƒ์„ฑ์ž, static๋ธ”๋ก์€ ์ƒ์†๋˜์ง€ ์•Š์œผ๋ฉฐ, private ์„ ์–ธ์ž๋Š” ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ , final์„ ์–ธ์ž๋Š” ์žฌ์ •์˜๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.)

# ์ปดํฌ์ง€์…˜(์กฐํ•ฉ)

  • HAS-A ๊ด€๊ณ„๋กœ ์ •์˜๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ธฐ์กด ํด๋ž˜์Šค๊ฐ€ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค์˜ ๊ตฌ์„ฑ์š”์†Œ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ๊ธฐ์กด์— ์กด์žฌํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋ฉค๋ฒ„๋ณ€์ˆ˜๋กœ ์ด์šฉ, ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•

# ์ƒ์†์˜ ๋‹จ์ 

  1. ์บก์Šํ™”๋ฅผ ์œ„๋ฐ˜ํ•œ๋‹ค.
    • ์ƒ์œ„ ํด๋ž˜์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜๋Š๋ƒ์— ๋”ฐ๋ผ ํ•˜์œ„ ํด๋ž˜์Šค์˜ ๋™์ž‘์— ์ด์ƒ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    • ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๋‚ด๋ถ€ ๊ตฌํ˜„์ด ๋‹ฌ๋ผ์ง€๋ฉด ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ๊ณ ์ณ์•ผํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. ์„ค๊ณ„๊ฐ€ ์œ ์—ฐํ•˜์ง€ ๋ชปํ•˜๋‹ค.
    • ์ปดํŒŒ์ผ ์‹œ์ ์— ๊ฐ์ฒด์˜ Type์ด ์ •ํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  3. ๋‹ค์ค‘์ƒ์†
    • ์ž๋ฐ”๋Š” ๋‹ค์ค‘์ƒ์†์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๊ณ ์žˆ๋‹ค๋ฉด ์ถ”๊ฐ€์ ์œผ๋กœ ์ƒ์†์„ ๋ฐ›์„ ์ˆ˜ ์—†๋‹ค.

# 1116 - ์™œ JPA์˜ Entity๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ๊ฐ€์ ธ์•ผ ํ•˜๋Š”๊ฐ€?

์ •ํ™•ํžˆ ๋งํ•˜์ž๋ฉด Entity๋Š” ๋ฐ˜๋“œ์‹œ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์—†๋Š” ์ƒ์„ฑ์ž๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๊ณ , ์ด๊ฒƒ์€ public ๋˜๋Š” protected์ด์–ด์•ผ ํ•œ๋‹ค.

# setter์˜ ์ œํ•œ

Entity์˜ ๋ชจ๋“  ํ•„๋“œ์— public setter ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๊ฐ์ฒด์˜ ๊ฐ’์˜ ๋ณ€๊ฒฝ์„ ์—ด์–ด๋‘๊ธฐ ๋•Œ๋ฌธ์— ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์—†๋‹ค. ๋˜ํ•œ ๋‹จ์ˆœํžˆ setter์ด๊ธฐ ๋•Œ๋ถ„์— ๊ทธ ์˜๋„๋ฅผ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์—†๋‹ค. setter ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ ๋ณด๋‹จ ํ™•์‹คํ•œ ๋น„์ฆˆ๋‹ˆ์Šค๊ฐ€ ๋“œ๋Ÿฌ๋‚˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ๋” ์šฑ ๋ฐ”๋žŒ์งํ•˜๋‹ค.

# Java Reflection API

Java Reflection API๋ž€?
๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค ํƒ€์ž…์„ ์•Œ์ง€ ๋ชปํ•ด๋„ ๊ทธ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ, ํƒ€์ž…, ๋ณ€์ˆ˜๋“ค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” Java API

์ด๋Ÿฌํ•œ Java Reflection์„ ํ™œ์šฉํ•˜๋ฉด ์ปดํŒŒ์ผ ์‹œ์ ์ด ์•„๋‹Œ ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ๋™์ ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ๊ฐ์ฒดํ™”ํ•˜์—ฌ ๋ถ„์„ ๋ฐ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•์ด๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ woowacourse.github.io/javable/post/2020-07-16-reflection-api/ ์„ ์ฐธ๊ณ 

JPA๋Š” DB๊ฐ’์„ ๊ฐ์ฒด ํ•„๋“œ์— ์ฃผ์ž…ํ•  ๋•Œ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ์ด๋Ÿฌํ•œ Reflection์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์„ ๋งคํ•‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

# Proxy ๊ฐ์ฒด

JPA๋Š” ๋งคํ•‘ํ•œ Entity๋ฅผ ์กฐํšŒํ•  ๋•Œ ๋‘ ๊ฐ€์ง€ ์ „๋žต์„ ์‚ฌ์šฉํ•œ๋‹ค. ์กฐํšŒ ์‹œ์ ์— ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ค๋Š” EAGER์™€ ๋งคํ•‘ํ•œ Entity๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์กฐํšŒํ•˜๋Š” LAZY๊ฐ€ ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ LAZY, ์ง€์—ฐ๋กœ๋”ฉ์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ์—๋Š” ๋งคํ•‘ํ•œ Entity์˜ ๋Œ€์ƒ ๊ฐ์ฒด์— proxy ๊ฐ์ฒด๊ฐ€ ๋“ค์–ด์žˆ๋‹ค.

์ •๋ฆฌ
์ •๋ฆฌํ•˜๋ฉด JPA์˜ ๊ตฌํ˜„์ฒด์ธ hibernate์—์„œ ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” public์ด๋‚˜ protected ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ํ•„์š”ํ•˜๋‹ค. private๋กœ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜๋ฉด ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์ œ์•ฝ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋‹ค๋งŒ ์•ˆ์ •์„ฑ ์ธก๋ฉด์—์„œ ์ข€๋” ์ž‘์€ scope๋ฅผ ๊ฐ€์ง„ protected ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.


# 1117 - ์ข‹์€ ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€ ์ž‘์„ฑํ•˜๊ธฐ์œ„ํ•œ ๊ทœ์น™

๊ธ€์ž‘์„ฑ์ „์— ์ •๋‹ต์€ ์—†์œผ๋ฉฐ ํ˜‘์—…์ด๋‚˜ ์ผ๊ด€์„ฑ์žˆ๊ฒŒ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ปจ๋ฒค์…˜์„ ์ ์šฉํ•œ๋‹ค.

AngularJS Git Commit Message Conventions ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑ

# ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์˜ 7๊ฐ€์ง€ ๊ทœ์น™

  1. ์ œ๋ชฉ๊ณผ ๋ณธ๋ฌธ์„ ๋นˆ ํ–‰์œผ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.
  2. ์ œ๋ชฉ์„ 50๊ธ€์ž ๋‚ด๋กœ ์ œํ•œํ•œ๋‹ค.
  3. ์ œ๋ชฉ ์ฒซ ๊ธ€์ž๋Š” ๋Œ€๋ฌธ์ž๋กœ ์ž‘์„ฑํ•œ๋‹ค.
  4. ์ œ๋ชฉ ๋์— ๋งˆ์นจํ‘œ ๋„ฃ์ง€ ์•Š๊ธฐ
  5. ์ œ๋ชฉ์€ ๋ช…๋ น๋ฌธ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ ๊ณผ๊ฑฐํ˜•์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  6. ๋ณธ๋ฌธ์˜ ๊ฐ ํ–‰์€ 72๊ธ€์ž ๋‚ด๋กœ ์ œํ•œํ•œ๋‹ค.
  7. ์–ด๋–ป๊ฒŒ ๋ณด๋‹ค๋Š” ๋ฌด์—‡๊ณผ ์™œ๋ฅผ ์„ค๋ช…ํ•œ๋‹ค.

# ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ๊ตฌ์กฐ

  • ํ—ค๋”๋Š” ํ•„์ˆ˜์ด๋ฉฐ, ๋ฒ”์œ„(scope), ๋ณธ๋ฌธ(body), ๋ฐ”๋‹ฅ๊ธ€(footer)์€ ์„ ํƒ์‚ฌํ•ญ์ด๋‹ค.
<type>(<scope>): <subject>          -- ํ—ค๋”
<BLANK LINE>
<body>                              -- ๋ณธ๋ฌธ
<BLANK LINE>
<footer>                            -- ๋ฐ”๋‹ฅ๊ธ€
  • ์€ ํ•ด๋‹น ์ปค๋ฐ‹์˜ ์„ฑ๊ฒฉ์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์•„๋ž˜ ์ค‘ ํ•˜๋‚˜์—ฌ์•ผ ํ•œ๋‹ค.
feat : ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ปค๋ฐ‹
fix : ๋ฒ„๊ทธ ์ˆ˜์ •์— ๋Œ€ํ•œ ์ปค๋ฐ‹
build : ๋นŒ๋“œ ๊ด€ใ„น๋…€ ํŒŒ์ผ ์ˆ˜์ •์— ๋Œ€ํ•œ ์ปค๋ฐ‹
chore : ๊ทธ ์™ธ ์ž์ž˜ํ•œ ์ˆ˜์ •์— ๋Œ€ํ•œ ์ปค๋ฐ‹
ci : CI๊ด€๋ จ ์„ค์ • ์ˆ˜์ •์— ๋Œ€ํ•œ ์ปค๋ฐ‹
docs : ๋ฌธ์„œ ์ˆ˜์ •์— ๋Œ€ํ•œ ์ปค๋ฐ‹
style : ์ฝ”๋“œ ์Šคํƒ€์ผ ํ˜น์€ ํฌ๋งท ๋“ฑ์— ๊ด€ํ•œ ์ปค๋ฐ‹
refactor : ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง์— ๋Œ€ํ•œ ์ปค๋ฐ‹
test : ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ •์— ๋Œ€ํ•œ ์ปค๋ฐ‹
Last update: September 13, 2022 21:44
Contributors: ahnjs