week 1 jonghun - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki

JVM, JDK, JREλž€ 무엇인가?

μžλ°”μ˜ λ©”λͺ¨λ¦¬ μ˜μ—­μ— λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€

가비지 컬렉터 μž‘λ™ 원리λ₯Ό μ„€λͺ…ν•˜μ‹œμ˜€

=>

1.JVM, JDK, JREλž€ 무엇인가?

JVM Runtime data area

  1. λ©”μ†Œλ“œμ˜μ—­ ( ν΄λž˜μŠ€μ •λ³΄, λ©”μ†Œλ“œμ •λ³΄, static λ³€μˆ˜, final Class λ³€μˆ˜ 정보 λ“± ν”„λ‘œκ·Έλž¨ μ‹œμž‘κ³Ό λ™μ‹œμ— 생성)
  2. νž™μ˜μ—­ ( 가비지 μ½œλ ‰ν„° μ •λ¦¬λŒ€μƒ) => new μΈμŠ€ν„΄μŠ€λ‘œ ν• λ‹Ήλœ μ£Όμ†Œλ“€
  3. μŠ€νƒμ˜μ—­ ( λ©”μ†Œλ“œ μ‹œμž‘κ³Ό λ™μ‹œμ— μŠ€λ ˆλ“œμ˜ 정보 및 λ³€μˆ˜λ“€ ) => λ©”μ†Œλ“œ μ’…λ£Œμ™€ λ™μ‹œμ— 없어짐 JVM의 νŠΉμ§•
  4. μŠ€νƒκΈ°λ°˜μ˜ 가상머신
  5. 가바지 μ»¬λ ‰μ…˜
  6. ν”Œλž«νΌμ— 독립적 WORA JREλž€? Java Runtime Environment의 μ•½μžλ‘œ μžλ°” ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰μ‹œμΌœμ£ΌλŠ” ν™˜κ²½μ„ κ΅¬μ„±ν•΄μ£ΌλŠ” 도ꡬ닀. 즉 JAVAλ₯Ό κ°œλ°œν•  ν•„μš”λŠ” μ—†λŠ”λ°, 싀행은 μ‹œμΌœμ€˜μ•Ό ν•˜λŠ” κ²½μš°μ—λŠ” κΌ­ JREκ°€ μžˆμ–΄μ•Ό ν•œλ‹€. 반면 JAVA κ°œλ°œμ‹œ κΌ­ ν•„μš”ν•œ 것이 μžˆλŠ”λ° 그것이 λ°”λ‘œ JDKλ‹€.

JDKλž€? (JREλ₯Ό ν¬ν•¨ν•˜κ³  μžˆλ‹€.) Java Development Kit의 μ•½μžλ‘œ λ§κ·ΈλŒ€λ‘œ μžλ°” κ°œλ°œμ‹œ ν•„μš”ν•œ νˆ΄ν‚·μ„ μ œκ³΅ν•˜λŠ” 도ꡬλͺ¨μŒμ΄λ‹€. κ°œλ°œν•˜λ €λ©΄ λ‹Ήμ—°νžˆ 싀행도 μ‹œμΌœμ•Ό ν•˜λ―€λ‘œ JDK μ•ˆμ—λŠ” JREκ°€ ν¬ν•¨λ˜μ–΄ μžˆλ‹€.

2. μžλ°” λ©”λͺ¨λ¦¬ ꡬ쑰

  • stack, method( c둜 치면 data + static ), heap
  • methodμ˜μ—­μ€ μ‹€ν–‰μ‹œμ μ— μ†ŒμŠ€μ½”λ“œλ‚˜ staticλ³€μˆ˜λ“€μ΄ ν• λ‹Ή
  • heapμ˜μ—­μ€ λŸ°νƒ€μž„μ— μƒμ„±λœ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ“€μ΄ ν• λ‹Ή
  • stackμ˜μ—­μ€ ν•¨μˆ˜κ°€ ν˜ΈμΆœλ λ•Œ μ§€μ—­λ³€μˆ˜λ‚˜ λ§€κ°œλ³€μˆ˜λ“€μ΄ λ©”λͺ¨λ¦¬μ— ν• λ‹Ή

3.κ°€λΉ„μ§€μ½œλ ‰ν„° = νž™ μ˜μ—­μ˜ μ•ˆμ“°λŠ” λ©”λͺ¨λ¦¬λ₯Ό μ •λ¦¬ν•˜λŠ” μ—­ν• 

  1. Eden(newμ˜μ—­) : new μ—°μ‚°μžλ₯Ό 톡해 μƒμ„±λœ 객체
  2. Survivor0/1 (newμ˜μ—­) : Edenμ—μ„œ μ°Έμ‘°λ˜λŠ” 객체듀이 μ €μž₯λ˜λŠ” 곡간
  3. Old : New/Young μ˜μ—­μ—μ„œ μΌμ •μ‹œκ°„ 이상 참쑰되고 μžˆλŠ” 객체가 μ €μž₯λ˜λŠ” 곡간
  4. Permanent : μƒμ„±λœ κ°μ²΄λ“€μ˜ μ •λ³΄μ˜ μ£Όμ†Œκ°’μ„ 가진 곡간 ● 가비지 μ»¬λ ‰μ…˜ Garbage Collection, GC 은 가비지 컬렉터에 μ˜ν•΄ μ‹€ν–‰λ˜λ©° μ•„λ¬΄μ—κ²Œλ„ μ°Έμ‘°λ˜μ§€ μ•ŠλŠ” λ©”λͺ¨λ¦¬λ₯Ό νšŒμˆ˜ν•˜λŠ” μž‘μ—…μž…λ‹ˆλ‹€. μ΄λŸ¬ν•œ 가비지 μ»¬λ ‰μ…˜μ€ 2가지, Minor GC / Major GC둜 λ‚˜λ‰©λ‹ˆλ‹€. β–Ά Minor GC Heap λ©”λͺ¨λ¦¬μ—μ„œ New/Young μ˜μ—­μ—μ„œ μΌμ–΄λ‚˜λŠ” 가비지 μ»¬λ ‰μ…˜μž…λ‹ˆλ‹€.
  5. 객체가 μƒμ„±λ˜λ©΄ Eden μ˜μ—­μ— μƒμ„±λ©λ‹ˆλ‹€.
  6. Eden μ˜μ—­μ— 객체가 κ°€λ“μ°¨κ²Œ 되면 GCκ°€ μΌμ–΄λ‚©λ‹ˆλ‹€.
  7. GCκ°€ ν•œ 번 λ°œμƒν•œ ν›„ 살아남은 객체가 Survivor 0 으둜 이동을 ν•©λ‹ˆλ‹€.
  8. Survivor0 을 μ œμ™Έν•œ λ‹€λ₯Έ μ˜μ—­μ˜ 객체듀을 μ œκ±°ν•©λ‹ˆλ‹€.(1-4, 반볡)
  9. Edenμ˜μ—­κ³Ό Survivor 0이 κ°€λ“μ°¨κ²Œ 되면 μ—¬κΈ°μ„œ 살아남은 객체λ₯Ό Survivor1으둜
  10. Survivor1을 μ œμ™Έν•œ λ‚˜λ¨Έμ§€ μ˜μ—­μ˜ 객체듀을 μ œκ±°ν•©λ‹ˆλ‹€.
  11. Survivor 1κ³Ό Eden이 가득차면 GC ν›„ 살아남은 객체 Surivor 0 으둜 μ΄λ™ν•˜κ³  μ΄λŸ¬ν•œ μž‘μ—…μ„ λ°˜λ³΅ν•©λ‹ˆλ‹€.
  12. 일정 μ‹œκ°„(횟수) 이상 μ‚΄μ•„ λ‚¨μ•„μžˆλŠ” 객체λ₯Ό Old μ˜μ—­μœΌλ‘œ λ³΄λƒ…λ‹ˆλ‹€. β–Ά Major GC
  13. Old μ˜μ—­μ˜ λͺ¨λ“  객체듀을 κ²€μ‚¬ν•©λ‹ˆλ‹€.
  14. Old μ˜μ—­μ—μ„œ μ°Έμ‘°λ˜μ§€ μ•Šμ€ 객체듀을 λͺ¨μ•„ μ œκ±°ν•©λ‹ˆλ‹€.
  • Major GCκ°€ μΌμ–΄λ‚˜λŠ” λ™μ•ˆ GCλ₯Ό μ œμ™Έν•œ λͺ¨λ“  μ“°λ ˆλ“œκ°€ μ€‘μ§€λ©λ‹ˆλ‹€.

μŠ€ν”„λ§λΆ€νŠΈ 와 μŠ€ν”„λ§μ˜ 차이λ₯Ό μ„€λͺ…ν•˜μ‹œμ˜€

μŠ€ν”„λ§μ˜ νŠΉμ§•μ— λŒ€ν•΄μ„œ μ‚¬μš© 사둀λ₯Ό λΉ—λŒ€μ–΄ μ„€λͺ…ν•˜μ‹œμ˜€

μŠ€ν”„λ§μ˜ μ„œλΉ„μŠ€ μΆ”μƒν™”λž€ 무엇인지 μ„€λͺ…ν•˜μ‹œμ˜€

=>

1.μŠ€ν”„λ§λΆ€νŠΈ 와 μŠ€ν”„λ§μ˜ 차이λ₯Ό μ„€λͺ…ν•˜μ‹œμ˜€

μŠ€ν”„λ§ μ΄λž€? μžλ°” μ—”ν„°ν”„λΌμ΄μ¦ˆ κ°œλ°œμ„ νŽΈν•˜κ²Œ ν•΄μ£ΌλŠ” μ˜€ν”ˆμ†ŒμŠ€ κ²½λŸ‰κΈ‰ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν”„λ ˆμž„μ›Œν¬ μŠ€ν”„λ§ λΆ€νŠΈλž€? μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•˜λŠ” ν”„λ‘œμ νŠΈλ₯Ό μ•„μ£Ό κ°„νŽΈν•˜κ²Œ μ„€μ •ν•  수 μžˆλŠ” μŠ€ν”„λ§ ν”„λ ˆμž„μ›μ˜ μ„œλΈŒ ν”„λ‘œμ νŠΈλΌκ³  ν•  수 μžˆλ‹€. β€» μŠ€ν”„λ§ ν”„λ ˆμž„ μ›Œν¬μ™€ λΉ„κ΅ν•˜μ—¬ μ—¬λŸ¬ 가지 μž₯점이 μžˆλ‹€.

  • μŠ€ν”„λ§ ν”„λ ˆμž„ μ›Œν¬λ₯Ό μ‚¬μš© ν•˜λ©΄ λ§Žμ€ XML μ„€μ •νŒŒμΌλ“±μ„ μž‘μ„± ν•˜λŠ” λ“± μ„€μ •ν•˜λŠ” 방법이 μ–΄λ €μš΄ 편이기 λ•Œλ¬Έμ— 보톡 검색을 톡해 μ„€μ • λ‚΄μš©μ„ 볡사 ν•˜κ±°λ‚˜, κΈ°μ‘΄ μ„€μ •νŒŒμΌλ“€μ„ λ³΅λΆ™ν•˜κΈ° μΌμˆ˜μ˜€λ‹€. ν•˜μ§€λ§Œ μŠ€ν”„λ§ λΆ€νŠΈλŠ” λ°˜λ³΅λ˜λŠ” κ°œλ°œν™˜κ²½ ꡬ좕을 μœ„ν•œ μ½”λ“œμž‘μ„±λ“±μ˜ λ…Έλ ₯을 쀄여주고 쉽고 λΉ λ₯΄κ²Œ ν”„λ‘œμ νŠΈλ₯Ό μ„€μ •ν•  수 μžˆλ„λ‘ 도와쀀닀.
  • 맀우 λΉ λ₯΄κ²Œ λͺ¨λ“  μŠ€ν”„λ§ κ°œλ°œμ— κ΄€ν•œ κ²½ν—˜μ— κ΄‘λ²”μœ„ν•œ 접근을 μ œκ³΅ν•œλ‹€.
  • ν”„λ‘œμ νŠΈ ν™˜κ²½ κ΅¬μΆ•μ—μ„œ 큰 μ˜μ—­μ„ μ°¨μ§€ν•˜λŠ” λΉ„κΈ°λŠ₯적인 κΈ°λŠ₯듀을 기본적으둜 μ œκ³΅ν•œλ‹€. (λ‚΄μž₯ν˜• μ„œλ²„, μ‹œνλ¦¬ν‹°, μΈ‘μ •, μƒνƒœ 점검, μ™ΈλΆ€ μ„€μ •)

2.μŠ€ν”„λ§μ˜ νŠΉμ§•μ— λŒ€ν•΄μ„œ μ‚¬μš© 사둀λ₯Ό λΉ—λŒ€μ–΄ μ„€λͺ…ν•˜μ‹œμ˜€

3.μŠ€ν”„λ§μ˜ μ„œλΉ„μŠ€ μΆ”μƒν™”λž€ 무엇인지 μ„€λͺ…ν•˜μ‹œμ˜€

μ„œλΉ„μŠ€ μΆ”μƒν™”λž€? ν•˜μœ„ μ‹œμŠ€ν…œμ˜ 곡톡점을 λ½‘μ•„λ‚΄μ„œ λΆ„λ¦¬μ‹œν‚€λŠ” 것을 λ§ν•œλ‹€. κ·Έλ ‡κ²Œ ν•˜λ©΄ ν•˜μœ„ μ‹œμŠ€ν…œμ΄ μ–΄λ–€ 것인지 μ•Œμ§€ λͺ»ν•΄λ„, λ˜λŠ” ν•˜μœ„ μ‹œμŠ€ν…œμ΄ λ°”λ€Œλ”λΌλ„ μΌκ΄€λœ λ°©λ²•μœΌλ‘œ μ ‘κ·Ό ν•  μˆ˜κ°€ μžˆλ‹€. Spring frameworkλŠ” λ¬Όλ‘  객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ•„μ£Ό μ€‘μš”ν•œ κ°œλ…μ΄λ‹€. κ°„λ‹¨ν•˜κ²Œ κ°œλ°œν™˜κ²½, ν˜Ήμ€ μ–΄λ– ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μœ„ν•œ 둜우레벨의 κΈ°μˆ μ— ꡬ애 받지 μ•Šκ²Œ ν•˜κΈ°μœ„ν•΄μ„œ, 그리고 μ±…μž„μ„ 뢄리 μ‹œν‚€κΈ° μœ„ν•œ κ°œλ…μ΄λ‹€.


객체지ν–₯κ³Ό μ ˆμ°¨μ§€ν–₯에 차이에 λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€

SOLID 원칙에 λŒ€ν•΄ μ•„λŠ”λŒ€λ‘œ μ„€λͺ…ν•˜μ‹œμ˜€

μΊ‘μŠν™”μ— λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€

=>

1.객체지ν–₯κ³Ό μ ˆμ°¨μ§€ν–₯에 차이에 λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€

μ ˆμ°¨μ§€ν–₯

  1. 루틴 μ„œλΈŒλ£¨ν‹΄, ν•¨μˆ˜(ν”„λ‘œμ‹œμ Έ) 등을 μ΄μš©ν•œ ν”„λ‘œκ·Έλž˜λ°
  2. 절차적으둜 μ‹€ν–‰λ˜λŠ” 것(X) -> ν”„λ‘œμ‹œμ Έ 콜, 즉 ν•¨μˆ˜ ν˜ΈμΆœμ„ ν†΅ν•΄μ„œ μž¬μ‚¬μš©μ„±μ„ μ–»μ–΄λ‚΄λŠ” 것이 본질!
  3. μž₯점 : ν•¨μˆ˜λ₯Ό ν†΅ν•œ μ½”λ“œμ˜ μž¬ν™œμš©μ„± , λͺ¨λ“ˆν™”와 ꡬ쑰화에 μš©μ΄ν•¨
  4. 단점 : ν”„λ‘œμ‹œμ € ν˜ΈμΆœμ— μžμ› λ‚­λΉ„(졜근 컴파일러, ν•˜λ“œμ›¨μ–΄ μ„±λŠ₯ν–₯μƒμœΌλ‘œ 거의 μƒκ΄€μ—†μŒ)

객체지ν–₯

  1. ν”„λ‘œκ·Έλž¨μ„ λ‹¨μˆœνžˆ 데이터와 처리 λ°©λ²•μœΌλ‘œ λ‚˜λˆ„λŠ” 것이 μ•„λ‹ˆλΌ, ν”„λ‘œκ·Έλž¨μ„ μˆ˜λ§Žμ€ '객체'λΌλŠ” κΈ°λ³Έ λ‹¨μœ„λ‘œ λ‚˜λˆ„κ³  이 κ°μ²΄λ“€μ˜ μƒν˜Έμž‘μš©μœΌλ‘œ μ„œμˆ ν•˜λŠ” 방식
  2. μΊ‘μŠν™”, 상속, λ‹€ν˜•μ„±, 좔상화 의 νŠΉμ§•μ„ 가짐
  3. μž₯단점 : 상속(νŽΈλ¦¬ν•˜μ§€λ§Œ ꡬ쑰가 μ΄μƒν•˜κ²Œ λ³€ν•  수있음), μΈμŠ€ν„΄μŠ€μ— 데이터 μ ‘κ·Ό λΆˆκ°€, μƒˆλ‘œμš΄ 데이터 ν˜•μ‹μ„ μ •μ˜ν•  수 있게 ν•΄μ€Œ

객체지ν–₯ μ–Έμ–΄μ˜ νŠΉμ§•

  1. μΊ‘μŠν™” : 객체의 속성(data fields)κ³Ό ν–‰μœ„(methods)λ₯Ό ν•˜λ‚˜λ‘œ λ¬Άκ³  μ‹€μ œ κ΅¬ν˜„ λ‚΄μš© 일뢀λ₯Ό 외뢀에 감좔어 μ€λ‹‰ν•œλ‹€.
  2. 상속 : μƒˆλ‘œμš΄ ν΄λž˜μŠ€κ°€ 기쑴의클래슀의 μžλ£Œμ™€ 연산을 μ΄μš©ν•  수 있게 ν•˜λŠ” κΈ°λŠ₯이닀.
  3. λ‹€ν˜•μ„± : μ–΄λ–€ ν•œ μš”μ†Œμ— μ—¬λŸ¬ κ°œλ…μ„ λ„£μ–΄ 놓은 것(μ˜€λ²„λΌμ΄λ”©, μ˜€λ²„λ‘œλ”©)
  4. 좔상화 : κ³΅ν†΅μ˜ μ†μ„±μ΄λ‚˜ κΈ°λŠ₯을 λ¬Άμ–΄ 이름을 λΆ™μ΄λŠ” 것

2.SOLID 원칙에 λŒ€ν•΄ μ•„λŠ”λŒ€λ‘œ μ„€λͺ…ν•˜μ‹œμ˜€

SOLID 원칙 = SRP(단일 μ±…μž„ 원칙) + OCP(개방/폐쇄 원칙) + LSP(λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜ 원칙) + DIP(의쑴 μ—­μ „ 원칙) + ISP(μΈν„°νŽ˜μ΄μŠ€ 뢄리 원칙)

  1. SRP(Single Responsibility Principle) β€” 단일 μ±…μž„ 원칙 = λͺ¨λ“  ν΄λž˜μŠ€λŠ” 단 ν•˜λ‚˜μ˜ μ±…μž„(κΈ°λŠ₯)을 가지며, ν•˜λ‚˜μ˜ μ±…μž„μ„ μˆ˜ν–‰ν•˜λŠ”λ° μ§‘μ€‘λ˜μ–΄μ•Ό ν•œλ‹€λŠ” 원칙이닀.
  2. OCP(Open/Closed Principle) β€” 개방/폐쇄 원칙 = 클래슀, λͺ¨λ“ˆ ν•¨μˆ˜ λ“±μ˜ μ†Œν”„νŠΈμ›¨μ–΄ κ°œμ²΄λŠ” ν™•μž₯에 λŒ€ν•΄ μ—΄λ €μžˆμ–΄μ•Όν•˜κ³ , μˆ˜μ •μ— λŒ€ν•΄μ„œλŠ” λ‹«ν˜€ μžˆμ–΄μ•Ό ν•œλ‹€λŠ” 원칙이닀. = μˆ˜μ •μ΄ μΌμ–΄λ‚˜λ„ 기쑴의 κ΅¬μ„±μš”μ†Œμ—£λŠ” μˆ˜μ •μ΄ μΌμ–΄λ‚˜μ§€ μ•Šμ•„μ•Ό ν•˜λ©°, μ‰½κ²Œ ν™•μž₯이 κ°€λŠ₯ν•˜μ—¬ μž¬μ‚¬μš©μ„ ν•  수 μžˆλ„λ‘ ν•΄μ•Όν•œλ‹€λŠ” μ˜λ―Έμ΄λ‹€.
  3. LSP(Liskov Substitutions Principle) β€” λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜ 원칙 = 상속에 λŒ€ν•œ κ°œλ…μœΌλ‘œμ„œ, λΆ€λͺ¨ classκ°€ λ“€μ–΄κ°ˆ μžλ¦¬μ— μžμ‹ classλ₯Ό 넣어도 잘 κ΅¬λ™λ˜μ–΄μ•Ό ν•œλ‹€λŠ” 원칙이닀.
  4. DIP(Dependency Inversion Principle) β€” μ˜μ‘΄μ„± μ—­μ „ 원칙 = μƒμœ„ λͺ¨λ“ˆμ€ ν•˜μœ„ λͺ¨λ“ˆμ— μ’…μ†λ˜μ–΄μ„œλŠ” μ•ˆλœλ‹€. λ‘˜λ‹€ 좔상화에 μ˜μ‘΄ν•΄μ•Ό ν•œλ‹€. μΆ”μƒν™”λŠ” 세뢀사항에 μ˜μ‘΄ν•˜μ§€ μ•ŠλŠ”λ‹€. 세뢀사항은 좔상화에 μ˜ν•΄ 달라져야 ν•œλ‹€.
  5. ISP(Interface Segregation Principle) β€” μΈν„°νŽ˜μ΄μŠ€ 뢄리 원칙 = ν΄λΌμ΄μ–ΈνŠΈλŠ” μžμ‹ μ΄ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” λ©”μ†Œλ“œμ— 의쑴 관계λ₯Ό 맺으면 μ•ˆλœλ‹€λΌλŠ” 원칙이닀.

3.μΊ‘μŠν™”μ— λŒ€ν•΄ μ„€λͺ…ν•˜μ‹œμ˜€

μΊ‘μŠν™” : 객체의 속성(data fields)κ³Ό ν–‰μœ„(methods)λ₯Ό ν•˜λ‚˜λ‘œ λ¬Άκ³  μ‹€μ œ κ΅¬ν˜„ λ‚΄μš© 일뢀λ₯Ό 외뢀에 감좔어 μ€λ‹‰ν•œλ‹€. 였직 μΊ‘μŠν™”λœ 클래슀 λ‚΄λΆ€μ˜ λ©”μ„œλ“œλ§Œμ„ 톡해 λ³€μˆ˜λ₯Ό μ‘°μž‘μ΄ κ°€λŠ₯ν•˜λ‹€. 이유 = μ™ΈλΆ€μ—μ„œ 데이터λ₯Ό μ‘°μž‘ν•˜κ±°λ‚˜ λ‚΄μš©μ„ μ•Œ 수 μ—†κ²Œ ν•˜κΈ°μœ„ν•˜μ—¬ μ‚¬μš©ν•œλ‹€. μ˜ˆμ‹œ) 음료수 자판기λ₯Ό μ΄μš©ν•˜μ§€λ§Œ μž‘λ™μ›λ¦¬λŠ” μ•Œ 수 μ—†λ‹€.

-- 데이터λ₯Ό 물어보지 μ•Šκ³ , κΈ°λŠ₯을 μ‹€ν–‰ν•΄λ‹¬λΌλŠ” κ·œμΉ™ -- λ°λ―Έν…Œλ₯΄μ˜ 법칙 = 객체의 λ‚΄λΆ€ ꡬ쑰에 κ°•ν•˜κ²Œ κ²°ν•©λ˜μ§€ μ•Šλ„λ‘ ν˜‘λ ₯ 경둜λ₯Ό μ œν•œν•˜λΌλŠ” 것