λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

TIL/Java

πŸ“š 1/17(수) 내일배움캠프 Java-Spring 18일차 TIL - java 클래슀(1)

πŸ“ μ˜€λŠ˜μ˜ ν•™μŠ΅ ν‚€μ›Œλ“œ

  • 클래슀(class)
    • 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°

 

 

 

 

πŸ“ 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄λž€?

  ν˜„μ‹€ μ„Έκ³„μ—μ„œ μ–΄λ–€ μ œν’ˆμ„ λ§Œλ“€ λ•Œ, λΆ€ν’ˆμ„ λ¨Όμ € κ°œλ°œν•˜κ³  이 λΆ€ν’ˆλ“€μ„ ν•˜λ‚˜μ”© μ‘°λ¦½ν•΄μ„œ μ™„μ„±λœ μ œν’ˆμ„ λ§Œλ“€ 듯이, μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό κ°œλ°œν•  λ•Œμ—λ„ λΆ€ν’ˆμ— ν•΄λ‹Ήν•˜λŠ” 객체듀을 λ¨Όμ € λ§Œλ“€κ³ , 이것듀을 ν•˜λ‚˜μ”© μ‘°λ¦½ν•΄μ„œ μ™„μ„±λœ ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“œλŠ” 기법을 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP-Object Oriented Programming)이라고 ν•œλ‹€.

 

 

 

 

 

 

 

πŸ“ κ°μ²΄λž€?

  객체(Object)λž€ 물리적으둜 μ‘΄μž¬ν•˜κ±°λ‚˜ μΆ”μƒμ μœΌλ‘œ 생각할 수 μžˆλŠ” 것 μ€‘μ—μ„œ μžμ‹ μ˜ 속성을 κ°€μ§€κ³  있고 λ‹€λ₯Έ 것과 식별 κ°€λŠ₯ν•œ 것을 λ§ν•œλ‹€.

 

- 속성과 ν–‰μœ„λ₯Ό κ°€μ§€κ³  μžˆλ‹€.
속성은 ν•„λ“œ, ν–‰μœ„λŠ” λ©”μ†Œλ“œλ‘œ κ΅¬ν˜„ν•œλ‹€.

- ν˜„μ‹€ 세계에 μžˆλŠ” 객체λ₯Ό μ†Œν”„νŠΈμ›¨μ–΄μ˜ 객체둜 μ„€κ³„ν•˜λŠ” 것을 '객체 λͺ¨λΈλ§'이라 ν•œλ‹€.
ν•„λ“œμ™€ λ©”μ†Œλ“œλ₯Ό μ •μ˜ν•˜λŠ” 과정이닀.

- 독립적인 두 객체가 μ„œλ‘œ μƒν˜Έ μž‘μš©μ„ ν•œλ‹€.
μ†Œν”„νŠΈμ›¨μ–΄μ—μ„œλŠ” λ©”μ†Œλ“œλ₯Ό 톡해 μƒν˜Έ μž‘μš©μ„ ν•œλ‹€.

- μ†Œν”„νŠΈμ›¨μ–΄ 객체 κ°„μ˜ 관계
μ‚¬μš© 관계(μ„œλ‘œ 독립적인 관계, ex-μ‚¬λžŒκ³Ό μžλ™μ°¨)
포함 관계(μ†ν•˜λŠ” 관계, ex-μžλ™μ°¨μ™€ 타이어)
상속 관계(λ¬Όλ €λ°›λŠ” 관계, ex-κ³΅ν†΅μ˜ 기계 μ‹œμŠ€ν…œ 속 λΆ€ν’ˆ)

 

 

 

 

 

πŸ“ 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ μž₯단점 및 νŠΉμ§•

πŸ“Œ μž₯점: μ½”λ“œκ°€ κ°„κ²°ν•΄μ§„λ‹€. μ½”λ“œ μž¬μ‚¬μš©μ„±μ΄ 놓아진닀. μœ μ§€λ³΄μˆ˜κ°€ μ‰¬μ›Œμ§„λ‹€.
πŸ“Œ 단점: 객체듀을 μ‘°ν•©ν•˜κΈ° λ•Œλ¬Έμ— ν”„λ‘œκ·Έλž¨μ„ 섀계할 λ•Œ λ§Žμ€ κ³ λ―Όκ³Ό μ‹œκ°„μ„ νˆ¬μžν•΄μ•Ό ν•œλ‹€. 처리 μ‹œκ°„μ΄ 비ꡐ적 였래 κ±Έλ¦°λ‹€.

 

객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ 4κ°€μ§€ νŠΉμ§•

 

  • μΊ‘μŠν™”(Encapsulation)
    • μ„œλ‘œ μ—°κ΄€ μžˆλŠ” 속성과 κΈ°λŠ₯듀을 ν•˜λ‚˜μ˜ 캑슐둜 λ§Œλ“€μ–΄ 데이터λ₯Ό μ™ΈλΆ€λ‘œλΆ€ν„° λ³΄ν˜Έν•˜λŠ” 것이닀.
    • 내뢀에 무엇이 κ΅¬ν˜„λ˜μ—ˆλŠ”μ§€ μ™ΈλΆ€μ—μ„œ λ³Ό 수 μ—†κ²Œ ν•œλ‹€.
    • μ™ΈλΆ€μ—μ„œ 직접 μ ‘κ·Όν•  수 μ—†μ–΄, λ³΄μ•ˆμ  μΈ‘λ©΄μ—μ„œ μ’‹λ‹€.
    • ν΄λž˜μŠ€λ‚˜ 멀버에 μ ‘κ·Όμ œμ–΄μžλ₯Ό 톡해 μ ‘κ·Όν•΄μ•Όν•œλ‹€.
  • 상속(Inheritance)
    • λΆ€λͺ¨ 객체와 μžμ‹ 객체가 μ‘΄μž¬ν•œλ‹€.(μƒμœ„ -> ν•˜μœ„)
    • μžμ‹ κ°μ²΄λŠ” λΆ€λͺ¨ 객체가 κ°€μ§€κ³  μžˆλŠ” ν•„λ“œμ™€ λ©”μ†Œλ“œλ₯Ό λ¬Όλ €λ°›μ•„ μ‚¬μš©ν•  수 μžˆλ‹€.
    • μ½”λ“œμ˜ 쀑볡이 쀄어든닀.
  • λ‹€ν˜•μ„±(Polymorphism)
    • μ–΄λ–€ 객체의 μ†μ„±μ΄λ‚˜ κΈ°λŠ₯이 상황에 따라 μ—¬λŸ¬ κ°€μ§€ ν˜•νƒœλ₯Ό κ°€μ§ˆ 수 μžˆλŠ” μ„±μ§ˆμ΄λ‹€.
    • 같은 μ΄λ¦„μ˜ λ©”μ†Œλ“œκ°€ 상황에 따라 λ‹€λ₯Έ 역할을 μˆ˜ν–‰ν•œλ‹€.
    • ν•˜λ‚˜μ˜ ν–‰μœ„μ— λŒ€ν•΄ 각 객체가 κ°€μ§€κ³  μžˆλŠ” κ³ μœ ν•œ νŠΉμ„±μ— 따라 μž¬κ΅¬μ„±ν•  수 μžˆλ‹€.
    • λŒ€ν‘œμ μΈ 예둜, λ©”μ†Œλ“œ μ˜€λ²„λΌμ΄λ”©(overriding)κ³Ό μ˜€λ²„λ‘œλ”©(overloading)이 μžˆλ‹€.
  • 좔상화(Abstraction)
    • 객체의 곡톡적인 속성과 κΈ°λŠ₯을 μΆ”μΆœν•˜μ—¬ μ •μ˜ν•œλ‹€.
    • λΆˆν•„μš”ν•œ μ„ΈλΆ€ 사항듀은 μ œκ±°ν•˜μ—¬, κ°€μž₯ 본질적이고 곡톡적인 λΆ€λΆ„λ§Œ μΆ”μΆœν•˜μ—¬ ν‘œν˜„ν•œλ‹€. 
    • 곡톡적인 것을 λͺ¨μ•„ μƒμœ„ κ°œλ…μœΌλ‘œ μƒˆλ‘­κ²Œ 객체λ₯Ό λͺ¨λΈλ§ν•œλ‹€.