μƒˆμ†Œμ‹

Java

[Java] 04. ν΄λž˜μŠ€μ™€ 객체

  • -

πŸ“Œ. ν΄λž˜μŠ€μ™€ 객체

λ°˜λ³΅λ˜λŠ” λͺ¨μ–‘μ˜ μΏ ν‚€λ₯Ό λ§Œλ“€ λ•ŒλŠ” 쿠킀틀을 톡해 κ°„νŽΈν•˜κ²Œ 각 쿠킀듀을 λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. 컴퓨터 μ—­μ‹œ 각 객체λ₯Ό μ‰½κ²Œ λ§Œλ“œλŠ” ν΄λž˜μŠ€λΌλŠ” κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜λ‹€ 보면 객체 지ν–₯ 방식과 절차 지ν–₯ 방식 λ“± λ‹€μ–‘ν•œ ν”„λ‘œκ·Έλž˜λ° 개발 방식에 λŒ€ν•΄ 많이 λ“€μ–΄λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ λ°˜λ³΅λ˜λŠ” λ³€μˆ˜λ“€κ³Ό ν•¨μˆ˜λ“€μ„ μ•ˆμ „ν•˜κ³  νŽΈλ¦¬ν•˜κ²Œ κ΄€λ¦¬ν•˜λŠ” 방법을 μ°Ύμ•„λ³΄κ²Œ λ©λ‹ˆλ‹€.

μ˜€λŠ˜μ€ 객체 지ν–₯ 언어와 절차 지ν–₯ μ–Έμ–΄μ˜ 차이점과 객체 지ν–₯ μ–Έμ–΄μ˜ νŠΉμ§•μ„ λ°°μ›Œλ³΄κ² μŠ΅λ‹ˆλ‹€. 객체 지ν–₯ μ–Έμ–΄μ˜ λŒ€ν‘œμ  μ˜ˆμ‹œμΈ μžλ°”μ˜ ν΄λž˜μŠ€μ™€ 객체에 λŒ€ν•΄ μ•Œμ•„λ³΄κ³ , 객체 지ν–₯ μ–Έμ–΄λ‘œμ¨ 자반의 νŠΉμ§•μ„ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. λ§ˆμ§€λ§‰μœΌλ‘œ μžλ°” 클래슀의 κΈ°λ³Έ ꡬ쑰λ₯Ό μ•Œμ•„λ΄…λ‹ˆλ‹€.

πŸ“Œ I. 객체 지ν–₯ μ–Έμ–΄μ˜ νŠΉμ§•

πŸ“š 1. 절차 지ν–₯ μ–Έμ–΄ vs 객체 지ν–₯ μ–Έμ–΄

(1) 절차 지ν–₯ μ–Έμ–΄ (Procedural Programming)

컀피λ₯Ό λ‚΄λ¦°λ‹€κ³  가정을 ν•΄λ΄…μ‹œλ‹€. 이 과정을 μ„œμˆ ν•˜λ©΄

λ“±μœΌλ‘œ μ„œμˆ λ  수 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.

ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ μ΄λ ‡κ²Œ 문제 ν•΄κ²° 방법을 각 λ‹¨κ³„λ³„λ‘œ λ‚˜λˆ„λŠ” 것을 절차 지ν–₯ ν”„λ‘œκ·Έλž˜λ° (Procedural Programming)라고 ν•©λ‹ˆλ‹€. C언어와 같은 절차 지ν–₯ μ–Έμ–΄λŠ” 데이터λ₯Ό λ¨Όμ € κΈ°μˆ ν•˜κ³  데이터λ₯Ό μ‚¬μš©ν•˜κ³  μ‘°μž‘ν•˜λŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“­λ‹ˆλ‹€. μ΄λ ‡κ²Œ 절차 지ν–₯ μ–Έμ–΄λŠ” ν•¨μˆ˜ κΈ°λ°˜μ„ μ‚¬μš©ν•΄ 각쒅 ν•¨μˆ˜λ‘œ 데이터λ₯Ό μ‘°μž‘ν•˜λ©° 문제λ₯Ό ν•΄κ²°ν•΄ λ‚˜κ°ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. κ°€μž₯ 큰 문제λ₯Ό μž‘μ€ λ¬Έμ œλ“€λ‘œ λ‚˜λˆ„μ–΄ ν•΄κ²°ν•˜λŠ” Top-Down 방식을 μ΄μš©ν•˜μ—¬ 문제λ₯Ό ν•΄κ²°ν•©λ‹ˆλ‹€.

 

(2) 절차 지ν–₯ μ–Έμ–΄μ˜ 문제점

ν•˜λ“œμ›¨μ–΄μ™€ μ†Œν”„νŠΈμ›¨μ–΄κ°€ λΉ λ₯΄κ²Œ λ³€ν™”ν•˜κ³  λ°œμ „ν•˜λ©΄μ„œ 절차 지ν–₯ μ–Έμ–΄μ˜ 단점이 λ“œλŸ¬λ‚˜κ²Œ λ©λ‹ˆλ‹€.

  • μœ μ§€ 보수의 어렀움
    λͺ¨λ“  κ΅¬μ„±μš”μ†Œκ°€ 유기적으둜 μ—°κ²°λ˜μ–΄ ν•˜λ‚˜μ˜ μš”μ†Œκ°€ κ³ μž₯ 났을 λ•Œ, μ‹œμŠ€ν…œ 전체에 문제λ₯Ό μΌμœΌν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

  • μ—„κ²©ν•˜κ²Œ μˆœμ„œκ°€ μ •ν•΄μ Έ λΉ„νš¨μœ¨μ 
    μ‹€ν–‰ μˆœμ„œκ°€ μ •ν•΄μ Έ μžˆμ–΄ μ½”λ“œμ˜ μˆœμ„œκ°€ 변경될 λ•Œ κ²°κ³Όκ°€ λ‹¬λΌμ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

(3) 객체 지ν–₯ μ–Έμ–΄(Object-Oriented Language)

λ‹€μ‹œ 컀피λ₯Ό λ‚΄λ¦°λ‹€κ³  가정을 ν•©μ‹œλ‹€. μ΄λ²ˆμ—λŠ” μ „κ³Ό λ‹€λ₯΄κ²Œ ꡬ체적인 사물, μ‚¬λžŒ, κ°œλ… λ“±μœΌλ‘œ 과정을 λΆ„λ¦¬ν•΄λ΄…μ‹œλ‹€.

λ“±κ³Ό 같이 기술될 수 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€. 전원 μΌœκΈ°λŠ” 컀피 κΈ°κ³„μ˜ 전원을 μΌ€ 것이고, 컀피 원두 μΊ‘μŠμ€ 컀피 기계에 컀피 원두 μΊ‘μŠμ„ 넣을 κ²ƒμž…λ‹ˆλ‹€.  

ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œλŠ” 정보λ₯Ό λ‹΄κ³  μžˆλŠ” 데이터와 이λ₯Ό μ‘°μž‘ν•˜λŠ” ν•¨μˆ˜λ₯Ό ν•˜λ‚˜λ‘œ λ¬Άμ–΄ 객체(Object)λ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. 객체듀 κ°„μ˜ μƒν˜Έμž‘μš©μœΌλ‘œ 문제λ₯Ό ν•΄κ²°ν•˜λŠ” μ–Έμ–΄λ₯Ό 객체 지ν–₯ μ–Έμ–΄ (Object-Oriented Language)라고 ν•©λ‹ˆλ‹€. μ‹€μ œ κ°μ²΄λŠ” 슀슀둜 κΈ°λŠ₯을 ν•  수 μžˆμ–΄ ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” μž‘λ™ 과정을 μ•Œ ν•„μš” 없이 μ€‘μž¬λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€. 객체 지ν–₯ μ–Έμ–΄λŠ” κ°€μž₯ μž‘μ€ λ¬Έμ œλ“€λΆ€ν„° ν•˜λ‚˜μ”© ν•΄κ²°ν•΄κ°€λ©° 큰 문제λ₯Ό ν•΄κ²°ν•˜λŠ” Bottom-Up λ°©μ‹μœΌλ‘œ ν”„λ‘œκ·Έλž˜λ°ν•©λ‹ˆλ‹€.


πŸ“š 2. 객체 지ν–₯ μ–Έμ–΄(Object-Oriented Language)의 νŠΉμ§•

객체지ν–₯μ–Έμ–΄λŠ” λ‹€μŒμ˜ νŠΉμ§•λ“€μ„ κ°€μ§‘λ‹ˆλ‹€.

  • 좔상화 (Abstraction) : 문제 해결을 μœ„ν•΄ 관심 μžˆλŠ” λΆ€λΆ„μ—λ§Œ μ§‘μ€‘ν•˜μ—¬ ν•΄κ²°
  • μΊ‘μŠν™” (Encapsulation) : μ—°κ΄€λœ 데이터와 μ•Œκ³ λ¦¬μ¦˜μ„ ν•œ λ©μ–΄λ¦¬λ‘œ 묢음
  • 정보은닉 (Information Hiding) : 묢인 λͺ¨λ“  것 쀑 μ€‘μš”ν•œ μΈν„°νŽ˜μ΄μŠ€λ§Œ λ“œλŸ¬λ‚΄κ³  λ‚΄λΆ€ κ΅¬ν˜„μ€ μˆ¨κΉ€
  • 상속성 (Inheritance) : ν•œ 객체의 μ„±μ§ˆμ„ λ‹€λ₯Έ 객체가 λ¬Όλ €λ°›μŒ
  • λ‹€ν˜•μ„± (Polymorphism) : ν•œ ν˜•νƒœλ‘œ λ³΄μ΄λ‚˜ λ‹€λ₯Έ 역할듀을 μˆ˜ν–‰ν•  수 있음

πŸ“š 3. 객체 지ν–₯ μ–Έμ–΄μ˜ μž₯점

  • μ‚¬μš©λœ μ½”λ“œμ™€ 데이터가 뭉쳐져 μžˆμ–΄ λͺ¨λ“ˆν™” 된 μ½”λ“œμ˜ μž¬μ‚¬μš©μ΄ 용이
  • 잘 μž‘μ„±λœ μ½”λ“œλ₯Ό μž¬μ‚¬μš©ν•˜κΈ°μ— μ‹ λ’°μ„± μžˆλŠ” μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ‰½κ²Œ μž‘μ„±
  • 디버깅이 쉬움
  • μ—…κ·Έλ ˆμ΄λ“œ λ“±μ˜ μœ μ§€ λ³΄μˆ˜κ°€ 용이

πŸ“Œ II. ν΄λž˜μŠ€μ™€ 객체의 기초 κ°œλ…

πŸ“š 1. 객체(Object)

  • ν˜„μ‹€ μ„Έκ³„μ˜ 사물 λ˜λŠ” λŒ€μƒ, 관념을 λͺ¨λ°©ν•œ ν”„λ‘œκ·Έλž¨ μƒμ˜ 객체
  • 일 처리λ₯Ό μœ„ν•œ 객체가 κ°–λŠ” "데이터"와 객체가 μ œκ³΅ν•˜λŠ” "κΈ°λŠ₯"으둜 ν‘œν˜„

πŸ“š 2. OOP νŠΉμ§• 1: 좔상화(Abstraction)

  • 좔상화 : 객체λ₯Ό λ§Œλ“€ λ•ŒλŠ” κ°μ²΄μ—κ²Œ 관심 μžˆλŠ” λΆ€λΆ„μ—λ§Œ 관심을 κ°€μ Έμ•Ό 함
  • κ°μ²΄λ“€μ˜ κ³΅ν†΅λœ 속성과 ν–‰μœ„λ₯Ό μΆ”μΆœ
  • 객체의 속성과 ν–‰μœ„ μ€‘μ—μ„œ 관심 λŒ€μƒλ§Œ μΆ”μΆœν•΄ ν‘œν˜„ν•˜κ³  μ•„λ‹Œ 뢀뢄은 λ“œλŸ¬λ‚΄μ§€ μ•ŠμŒ

πŸ“š 3. 객체 지ν–₯(Object-Oriented) ν”„λ‘œκ·Έλž˜λ°

  • ν˜„μ‹€μ— μ‘΄μž¬ν•˜λŠ” 사물과 μ‚¬λ¬Όμ˜ μƒνƒœ, κ·Έ 행동을 μ‹€μ²΄ν™”μ‹œν‚€λŠ” ν”„λ‘œκ·Έλž˜λ°
  • 객체 = 데이터(속성) + μ•Œκ³ λ¦¬μ¦˜(λ©”μ„œλ“œ)
  • ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨μ„ μƒν˜Έ μ—°κ²°λœ 객체 μ§‘ν•©μ˜ μƒν˜Έμž‘μš©μ„ ν†΅ν•œ 문제 해결을 좔ꡬ
  • λ¬Έμ œμ™€ κ΄€λ ¨λœ 객체λ₯Ό λ§Œλ“€κ³  객체 κ°„μ˜ λ©”μ‹œμ§€ κ΅ν™˜μœΌλ‘œ 문제 ν•΄κ²°

πŸ“š 4. ν΄λž˜μŠ€μ™€ 객체의 관계

별 λͺ¨μ–‘ μΏ ν‚€λ₯Ό λ§Œλ“ λ‹€κ³  μƒκ°ν•΄λ΄…μ‹œλ‹€. λ§Žμ€ μΏ ν‚€λ₯Ό κ΅¬μ›Œμ•Ό ν•  λ•Œ μΏ ν‚€ ν•˜λ‚˜μ”© λͺ¨μ–‘을 λΉšλŠ” 것은 λΉ„νš¨μœ¨μ μ΄κ³  νž˜λ“€ 일

이 될 κ²ƒμž…λ‹ˆλ‹€. 별 λͺ¨μ–‘ 틀을 λ§Œλ“€κ³  κ·Έ 틀에 λ§žμΆ”μ–΄ μΏ ν‚€λ₯Ό 찍어낸닀면 효율적으둜 μž‘μ—…ν•  수 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.

 ν”„λ‘œκ·Έλž¨ μ–Έμ–΄μ—μ„œλ„ λ˜‘κ°™μŠ΅λ‹ˆλ‹€. λ§Œλ“€κ³ μž ν•˜λŠ” 틀이 "클래슀", κ·Έ ν‹€λ‘œ λ§Œλ“  것이 "객체"μž…λ‹ˆλ‹€.

λ˜ν•œ μΏ ν‚€μ˜ λͺ¨μ–‘은 κ°™μ§€λ§Œ μ΄ˆμ½” μΏ ν‚€, 버터 μΏ ν‚€ λ“± λ‹€μ–‘ν•œ 속성 값을 κ°€μ§ˆ 수 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.

  • 클래슀(Class) : 객체λ₯Ό λ§Œλ“€μ–΄ λ‚΄κΈ° μœ„ν•œ 섀계도 ν˜Ήμ€ ν‹€
  • 객체(Object) : 클래슀 λͺ¨μ–‘ κ·ΈλŒ€λ‘œ μƒμ„±λœ 싀체, 객체λ₯Ό 클래슀의 μΈμŠ€ν„΄μŠ€(instance)라고도 뢀름
  • ν΄λž˜μŠ€λŠ” ν•˜λ‚˜μ§€λ§Œ 객체듀은 수 없이 생산될 수 있음
  • 객체듀은 클래슀의 λͺ¨μ–‘λŒ€λ‘œ λ™μΌν•œ 속성을 κ°€μ§€μ§€λ§Œ, κ³ μœ ν•œ κ°’μœΌλ‘œ ꡬ뢄됨

πŸ“š 5. 객체의 κ΅¬μ„±μš”μ†Œ

(1) 속성 (attributes)

  • 객체의 μƒνƒœ 정보인 νŠΉμ„±μ„ ν‘œν˜„
  • 정적인 μ„±μ§ˆ

(2) ν–‰μœ„ (behaviors)

  • 객체 λ‚΄λΆ€μ—μ„œ μ²˜λ¦¬ν•  μΌμ΄λ‚˜ 객체듀 간에 영ν–₯을 μ£Όκ³ λ°›λŠ” 일
  • 동적인 일을 처리

πŸ“š 6. 클래슀(class)

  • 같은 μ’…λ₯˜μ˜ 객체의 κ³΅ν†΅λœ '데이터 ꡬ쑰'와 'κΈ°λŠ₯'을 λ”°λ‘œ 뽑고 μΆ”μƒμ μœΌλ‘œ ν‘œν˜„ν•˜μ—¬ ν΄λž˜μŠ€λ₯Ό μ •μ˜
  • 클래슀 μ •μ˜λŠ” 직접 객체가 λ§Œλ“€μ–΄μ§€κ±°λ‚˜ μ‹€ν–‰λ˜λŠ” 것이 μ•„λ‹Œ, 틀을 μ •μ˜ν•  뿐
  • 멀버 ν•„λ“œ(속성) μ •μ˜μ™€ λ©”μ„œλ“œ(ν–‰μœ„) μ •μ˜ 두 λ²”μœ„λ‘œ λ‚˜λ‰¨

πŸ“š 7. OOP νŠΉμ§• 2: μΊ‘μŠν™”(Encapsulation)

  • 데이터와 그와 κ΄€λ ¨λœ μ—°μ‚°(ν•¨μˆ˜)듀을 객체(object)둜 묢음
  • μ—°κ΄€λœ 처리λ₯Ό ν•˜λŠ” ν–‰μœ„μ™€ μƒνƒœ 데이터λ₯Ό λ¬Άμ–΄ λ³΅μž‘ν•œ 과정은 μˆ¨κΉ€
  • κΌ­ ν•„μš”ν•œ μΈν„°νŽ˜μ΄μŠ€λ§Œ 외뢀에 λ‚˜νƒ€λ‚΄ μ‰½κ²Œ μ‚¬μš©ν•˜λ„λ‘ 함

πŸ“Œ III. μžλ°” 클래슀의 κΈ°λ³Έ ꡬ쑰 및 μ‚¬μš©

πŸ“š 1. κΈ°λ³Έ 클래슀의 ꡬ쑰

  • λ³€μˆ˜μ™€ μƒμˆ˜λ‘œ μƒνƒœ 정보λ₯Ό μ €μž₯ν•˜λŠ” 멀버 ν•„λ“œ, ν–‰μœ„ 정보λ₯Ό κΈ°μˆ ν•˜λŠ” λ©”μ„œλ“œλ‘œ ꡬ성
  • 클래슀 멀버 및 λ©”μ„œλ“œ μ‚¬μš©μ„ μ–΄λŠ μ •λ„κΉŒμ§€ ν—ˆμš©ν• μ§€λ₯Ό μ •ν•˜λŠ” μ ‘κ·Ό μ œν•œμž
  • 클래슀의 νŠΉμ§•μ„ μ§€μ •ν•˜λŠ” 클래슀 μ’…λ₯˜
  • ν΄λž˜μŠ€λŠ” μ„Έλ―Έμ½œλ‘ (;)으둜 λλ‚˜μ§€ μ•Šκ³ , ν•¨μˆ˜μ˜ κ΅¬ν˜„μ„ λͺΈμ²΄μ—μ„œ 기술

πŸ“š 2. 멀버 ν•„λ“œ

[μ ‘κ·Ό μ œν•œ] [static] <μžλ£Œν˜•> <μ‹λ³„μž>;
  • 멀버 ν•„λ“œλŠ” instance / static 두 κ°€μ§€λ‘œ 뢄리됨
  • instance 멀버 ν•„λ“œλŠ” κ³ μœ ν•œ λ©”λͺ¨λ¦¬ μ €μž₯ 곡간이 할당됨
  • static 멀버 ν•„λ“œλŠ” ν”„λ‘œκ·Έλž¨μ΄ μ‹œμž‘λ˜λ©΄ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ή λ°›μŒ

* μ ‘κ·Ό μ œν•œμ€ 이 멀버λ₯Ό μ–΄λŠ λ²”μœ„μ—μ„œ μ ‘κ·Όν•  수 μžˆλŠ”μ§€λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€. 각 λ³€μˆ˜λ³„λ‘œ 지정할 수 있으며 λŒ€ν‘œμ μœΌλ‘œ public ν‚€μ›Œλ“œκ°€ μžˆμŠ΅λ‹ˆλ‹€. static 멀버 λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λ©΄ λͺ¨λ“  객체가 멀버λ₯Ό κ³΅μœ ν•©λ‹ˆλ‹€


πŸ“š 3. λ©”μ„œλ“œ

  • 객체가 μˆ˜ν–‰λ  수 μžˆλŠ” λ™μž‘μ„ μ •μ˜
  • 슀슀둜 μƒνƒœ 값을 μ €μž₯ν•˜κ³  κ·Έ μƒνƒœ κ°’μœΌλ‘œ ν–‰μœ„λ₯Ό μˆ˜ν–‰ν•œλ‹€λŠ” μ μ—μ„œ λ‹¨μˆœ λ³€μˆ˜λ“€κ³ΌλŠ” λ‹€λ₯Έ νŠΉμ§•
  • 멀버 ν•„λ“œλ₯Ό μ‘°μž‘ν•˜λŠ” μ•ˆμ „ν•œ 방법을 제곡 ex) getter/setter
  • 클래슀 μ •μ˜ μ•ˆμ— λ©”μ„œλ“œ κ΅¬ν˜„λΆ€λ₯Ό λͺ¨λ‘ 기술

πŸ“š 4. λ©”μ„œλ“œμ˜ μž‘μ„±

  • 클래슀 μ •μ˜ μ•ˆμ— 객체의 ν–‰μœ„λ₯Ό 기술
  • μ‹€μ œλ₯Ό μˆ˜ν–‰ν•˜λŠ” λ¬Έμž₯듀을 { } μ•ˆμ— λ‚˜μ—΄
  • μΈμˆ˜λ“€μ€ μˆœμ„œλŒ€λ‘œ λ§€κ°œλ³€μˆ˜λ₯Ό 톡해 전달 λ°›μŒ
  • λ°˜ν™˜ 값은 return을 톡해 λ°›κ³ , λ°˜ν™˜ 값이 μ•„λ‹ˆλ©΄ void 밖에 μ—†μŒ

πŸ“š 5. λ©”μ„œλ“œμ˜ 호좜

[λ³€μˆ˜ = ] 객체λͺ…. λ©”μ„œλ“œλͺ… (인수1, 인수2, ... , 인수n)
  • 객체에 μ§€μ •λœ ν–‰μœ„λ₯Ό μˆ˜ν–‰ν•˜λ„λ‘ ν•˜λŠ” 것
  • 클래슀λ₯Ό μ •μ˜ν•˜λŠ” 것은 λ©”μ„œλ“œλ₯Ό μžλ™ μ‹€ν–‰ν•˜λŠ” 것이 μ•„λ‹Œ ν˜ΈμΆœλ˜μ–΄μ•Ό 싀행될 수 있음
  • λ©”μ„œλ“œ 호좜 μ‹œ 호좜 츑은 인수λ₯Ό λ„˜κ²¨μ€„ 수 있고, 호좜의 κ²°κ³Όλ₯Ό λ°˜ν™˜ν•  μˆ˜λ„ 있음

πŸ“š 6. 동적 λ©”λͺ¨λ¦¬ ν• λ‹Ή

  • 동적 ν• λ‹Ήλ˜λŠ” κ°μ²΄λŠ” μ‹€μ œλ‘œ 많이 μ‚¬μš©λ˜κ³  ν•„μš”μ— 따라 μ§€μ—­μ μœΌλ‘œ μ‚¬μš©λ˜λ„λ‘ λ§Œλ“€ 수 있음
  • JAVA ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” μ΄λŸ¬ν•œ 고민듀을 λ°”νƒ•μœΌλ‘œ κ°μ²΄λŠ” λ°˜λ“œμ‹œ 동적 할당을 톡해 λ§Œλ“€μ–΄μ§€λ„λ‘ 함
  • ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μ›ν•˜λŠ” μˆœκ°„μ— μ›ν•˜λŠ” 크기의 λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήλ°›λŠ” 방법
  • new μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ 동적 ν• λ‹Ήλœ 크기λ₯Ό μžλ™μœΌλ‘œ κ³„μ‚°ν•΄μ€Œ
  • μ°Έμ‘° μžλ£Œν˜• λ³€μˆ˜μ— μ‹€μ œ 값에 λŒ€ν•œ μ €μž₯곡간을 ν• λ‹Ήλ°›κΈ° μœ„ν•΄ ν•„μš”

동적 할당받은 λ©”λͺ¨λ¦¬κ°€ 더 이상 μ°Έμ‘°λ˜μ§€ μ•ŠλŠ”λ‹€λ©΄ JVM에 μ˜ν•˜μ—¬ μžλ™μœΌλ‘œ νšŒμˆ˜λ©λ‹ˆλ‹€. μ΄λ ‡κ²Œ μ°Έμ‘°λ˜μ§€ μ•ŠλŠ” 동적 ν• λ‹Ήλœ λ©”λͺ¨λ¦¬λ₯Ό μžλ™ ν• λ‹Ή ν•΄μ œν•˜λŠ” 것을 가비지 μ»¬λ ‰μ…˜(Garbage Collection)이라고 ν•©λ‹ˆλ‹€. JVM의 가비지 컬렉터에 μ˜ν•΄ λ©”λͺ¨λ¦¬ 뢀쑱을 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.


πŸ“š 7. 객체의 생성과 멀버 μ ‘κ·Ό

1. μ°Έμ‘° λ³€μˆ˜μ˜ μ„ μ–Έ

Circle c1;

클래슀 νƒ€μž…μ— λ³€μˆ˜λ₯Ό μ„ μ–Έν•©λ‹ˆλ‹€. 이 λ³€μˆ˜λŠ” μ°Έμ‘° μžλ£Œν˜•μœΌλ‘œ 각 객체의 idκ°’λ§Œμ„ μ €μž₯ν•©λ‹ˆλ‹€.

 

2. μ„ μ–Έλœ λ³€μˆ˜μ— 객체λ₯Ό 생성

c1 = new Circle();

동적 ν• λ‹Ή μ—°μ‚°μž newλ₯Ό μ΄μš©ν•΄ λ³€μˆ˜μ— 객체λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. 객체 생성 μ‹œ Circle();κ³Ό 같이 ( )λ₯Ό λ°˜λ“œμ‹œ μž‘μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ΄λŠ” μƒμ„±μžμ™€ 관련이 μžˆμŠ΅λ‹ˆλ‹€.

 

3. 멀버 μ ‘κ·Ό

c1.radius = 1;
double area = c1.getArea();

c1은 μ°Έμ‘° λ³€μˆ˜μž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μžλ°”μ—μ„œ 객체에 μ ‘κ·Όν•˜λŠ” 방법은 μ°Έμ‘° λ³€μˆ˜λ₯Ό μ΄μš©ν•΄ 동적 할당받은 λΆ€λΆ„μœΌλ‘œ μ ‘κ·Όν•˜λŠ” 방법밖에 μ—†κΈ° λ•Œλ¬Έμ— c1을 객체라고도 ν•©λ‹ˆλ‹€. 멀버 접근은 .μ—°μ‚°μžλ‘œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

Contents

ν¬μŠ€νŒ… μ£Όμ†Œλ₯Ό λ³΅μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€

이 글이 도움이 λ˜μ—ˆλ‹€λ©΄ 곡감 λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.