πŸ’»

Java ν”„λ‘œκ·Έλž˜λ° - 클래슀(Class) λ³Έλ¬Έ

KITRI/JAVA

Java ν”„λ‘œκ·Έλž˜λ° - 클래슀(Class)

λ˜νš¨λ‹ˆ 2020. 4. 29. 10:25

객체지ν–₯μ–Έμ–΄

객체지ν–₯이둠의 κΈ°λ³Έ κ°œλ…μ€ 'μ‹€μ œ μ„Έκ³„λŠ” 사물(객체)둜 이루어져 있으며, λ°œμƒν•˜λŠ” λͺ¨λ“  사건듀은 μ‚¬λ¬Όκ°„μ˜ μƒν˜Έμž‘μš©μ΄λ‹€.' λΌλŠ” 것이닀.  객체지ν–₯이둠은 상속, μΊ‘μŠν™”, 좔상화 κ°œλ…μ„ μ€‘μ‹¬μœΌλ‘œ 점차 ꡬ체적으둜 λ°œμ „λ˜μ—ˆλ‹€. 객체지ν–₯μ–Έμ–΄μ˜ κ°€μž₯ 큰 μž₯점은 μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ΄ λ†’κ³  μœ μ§€λ³΄μˆ˜κ°€ μš©μ΄ν•˜λ‹€λŠ” 것이닀. 

 

 

 

 

객체

: κ°μ²΄λž€? 'μ‹€μ œλ‘œ μ‘΄μž¬ν•˜λŠ” 것. 사물 λ˜λŠ” κ°œλ…' 이닀. 객체지ν–₯μ΄λ‘ μ—μ„œ κ°μ²΄λŠ” μœ λ¬΄ν˜• λ‹€ κ°€λŠ₯ν•˜λ‹€. ν”„λ‘œκ·Έλž˜λ°μ—μ„œμ˜ κ°μ²΄λŠ” ν΄λž˜μŠ€μ— μ •μ˜λœ λ‚΄μš©λŒ€λ‘œ λ©”λͺ¨λ¦¬μ— μƒμ„±λœ 것을 λœ»ν•œλ‹€.

 

- 객체의 κ΅¬μ„±μš”μ†Œ (속성과 κΈ°λŠ₯)

: κ°μ²΄λŠ” 속성과 κΈ°λŠ₯μ΄λΌλŠ” 두 μ’…λ₯˜μ˜ κ΅¬μ„±μš”μ†Œλ‘œ 이루어져 μžˆλ‹€. 

 

속성(Property) - λ©€λ²„λ³€μˆ˜(member variable), νŠΉμ„±(attribute), ν•„λ“œ(field), μƒνƒœ(state)

κΈ°λŠ₯(Function) - λ©”μ†Œλ“œ(method), ν•¨μˆ˜(function), ν–‰μœ„(behavior)

 

객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” 속성과 κΈ°λŠ₯을 각각 λ³€μˆ˜μ™€ λ©”μ†Œλ“œλ‘œ ν‘œν˜„ν•œλ‹€. 

 

 

객체와 μΈμŠ€ν„΄μŠ€

: ν΄λž˜μŠ€λ‘œλΆ€ν„° 객체λ₯Ό λ§Œλ“œλŠ” 과정을 클래슀의 μΈμŠ€ν„΄μŠ€ν™”(instantiate)라고 ν•˜λ©°, μ–΄λ–€ ν΄λž˜μŠ€λ‘œλΆ€ν„° λ§Œλ“€μ–΄μ§„ 객체λ₯Ό κ·Έ 클래슀의 μΈμŠ€ν„΄μŠ€(instance)라고 ν•œλ‹€. 

 

예λ₯Ό λ“€λ©΄, Tvν΄λž˜μŠ€λ‘œλΆ€ν„° λ§Œλ“€μ–΄μ§„ 객체λ₯Ό Tv클래슀의 μΈμŠ€ν„΄μŠ€λΌκ³  ν•œλ‹€. κ²°κ΅­ μΈμŠ€ν„΄μŠ€λŠ” 객체와 같은 μ˜λ―Έμ΄μ§€λ§Œ, κ°μ²΄λŠ” λͺ¨λ“  μΈμŠ€ν„΄μŠ€λ₯Ό λŒ€ν‘œν•˜λŠ” 포괄적인 의미λ₯Ό κ°–κ³  있으며, μΈμŠ€ν„΄μŠ€λŠ” μ–΄λ–€ ν΄λž˜μŠ€λ‘œλΆ€ν„° λ§Œλ“€μ–΄μ§„ 것인지λ₯Ό κ°•μ‘°ν•˜λŠ” 보닀 ꡬ체적인 의미λ₯Ό κ°–κ³  μžˆλ‹€. 

 

'책상은 μΈμŠ€ν„΄μŠ€λ‹€.' (X) 라고 ν•˜κΈ° λ³΄λ‹€λŠ” '책상은 객체닀'(O)

'책상은 μ±…μƒν΄λž˜μŠ€μ˜ 객체이닀.'(X) 라고 ν•˜κΈ° λ³΄λ‹€λŠ” '책상은 책상 클래슀의 μΈμŠ€ν„΄μŠ€λ‹€.'(O) 

 

 

 

 

클래슀

: ν΄λž˜μŠ€λž€? '객체λ₯Ό μ •μ˜ν•΄λ†“μ€ 것' 이닀. ν΄λž˜μŠ€λŠ” 객체λ₯Ό μƒμ„±ν•˜λŠ”λ° μ‚¬μš©λœλ‹€.

 

  • κ΅¬ν˜„ν΄λž˜μŠ€ : λ‹€λ₯Έ ν΄λž˜μŠ€μ—μ„œ μ“Έ 수 있게 μ‚¬μš©μžκ°€ λ§Œλ“  클래슀
  • μ‹€ν–‰ν΄λž˜μŠ€ : main ν•¨μˆ˜ κ°–κ³  μžˆλŠ” 클래슀
  • μΆ”μƒν΄λž˜μŠ€ : 상속 / μžμ‹ μ˜ κ°μ²΄λ°œμƒμ΄ μ•ˆλ¨
  • Interface : 상속 / μžμ‹ μ˜ κ°μ²΄λ°œμƒμ΄ μ•ˆλ¨

 

예제 1) x, y μ •μˆ˜λ₯Ό 가지고 μžˆλŠ” Su클래슀λ₯Ό λ§Œλ“€μ–΄λ³΄μž.

 

 

디버깅을 ν•΄λ³΄μž

 

ν•΄λ‹Ήν΄λž˜μŠ€λ‘œ λ„˜μ–΄κ°€λ €λ©΄ F5, λ‹€μŒμ„ μ‹€ν–‰ν•˜λ €λ©΄ F6

 

 

객체 μƒμ„±μ‹œ λͺ¨λ‘ 0으둜 μ΄ˆκΈ°ν™”λœλ‹€.

[μ°Έκ³ ] μ „μ—­λ³€μˆ˜ μ„ μ–Έμ‹œ λͺ¨λ‘ 0으둜 μ΄ˆκΈ°ν™”, μ§€μ—­λ³€μˆ˜λŠ” μ΄ˆκΈ°ν™”λ˜μ§€ μ•ŠλŠ”λ‹€.

 

 

예제 2) 이름, λ‚˜μ΄, ν‚€ 정보λ₯Ό 가지고 μžˆλŠ” Person 클래슀λ₯Ό λ§Œλ“€μ–΄λ³΄μž.

 

λ§Œμ•½ 데이터가 100만개라면? μœ„μ˜ λ°©μ‹μœΌλ‘œ 100만개 λ‹€ μž…λ ₯ν•˜λŠ” 것은 λΉ„νš¨μœ¨μ μ΄λ‹€. 가독성 λ–¨μ–΄μ§€κ³  μ½”λ“œ μ€‘볡

 

좜λ ₯κΈ°λŠ₯을 ν•˜λŠ” 좜λ ₯ν•¨μˆ˜λ‘œ disp()λ₯Ό μž‘μ„±ν•΄λ³΄μž.

 

 

객체λ₯Ό μƒμ„±ν•΄μ„œ 데이터λ₯Ό μ „λ‹¬ν•˜λŠ” input() μž…λ ₯ν•¨μˆ˜λ„ μž‘μ„±ν•΄λ³΄μž.

 

ν΄λž˜μŠ€κ°€ μ „λ‹¬ν•΄μ£ΌλŠ” λ³€μˆ˜κ°’μ„ 가지고 μžˆμ§€ μ•Šμ•„μ„œ 데이터λ₯Ό λ„£μ–΄μ€¬μŒμ—λ„ 값이 좜λ ₯λ˜μ§€ μ•Šμ•˜λ‹€.

 

 

input() ν•¨μˆ˜μ˜ μΈμžκ°’μ„ Person 속성에 전달해쀀닀. 

 

ν•¨μˆ˜λ₯Ό μ΄μš©ν•΄μ„œ μ½”λ“œλ₯Ό κ°„κ²°ν•˜κ²Œ μž‘μ„±ν•  수 μžˆλ‹€.

 

[정리]

  • ν΄λž˜μŠ€μ—λŠ” ν•¨μˆ˜, λ³€μˆ˜κ°€ λ“€μ–΄κ°€μžˆλ‹€. (멀버 ν•¨μˆ˜, 멀버 λ³€μˆ˜)
  • ν΄λž˜μŠ€λŠ” ν•˜λ‚˜μ˜ λͺ¨λ“ˆ. λ³€μˆ˜λŠ” 데이터λ₯Ό μž…λ ₯λ°›λŠ” λ©€λ²„λ³€μˆ˜, ν΄λž˜μŠ€μ•ˆμ—μ„œ μ‚¬μš©ν•˜λŠ” λ‘œμ§μ„ μœ„ν•œ λ³€μˆ˜, 그리고 ν•¨μˆ˜κ°€ μžˆλ‹€.  
  • λ³€μˆ˜ μ•ˆμ—λŠ” 데이터가 λ“€μ–΄κ°€μ•Όν•œλ‹€. 데이터에 μ ‘κ·Όν•˜λŠ” 3가지 방법이 μžˆλ‹€.
  • μ‹€λ¬΄μ—μ„œλŠ” λŒ€λΆ€λΆ„ ν•¨μˆ˜λ₯Ό 톡해 μ ‘κ·Όν•œλ‹€.   

 

데이터에 μ ‘κ·Όν•˜λŠ” 3가지 방법

  1. . μ—°μ‚°μžλ₯Ό ν†΅ν•œ μ ‘κ·Ό
  2. ν•¨μˆ˜λ₯Ό 톡합 μ ‘κ·Ό
  3. μƒμ„±μžλ₯Ό ν†΅ν•œ μ ‘κ·Ό

μžλ°”μ˜ 3가지 μ‹λ³„μž

  1. λ³€μˆ˜
  2. 객체
  3. λ°°μ—΄

 

예제 3) μ΄λ¦„, 연봉, μ„ΈκΈˆ, μ‹€μˆ˜λ Ήμ•‘ 정보λ₯Ό 가지고 μžˆλŠ” Pay 클래슀λ₯Ό λ§Œλ“€μ–΄λ³΄μž.

 

 

예제 4) μ΄λ¦„, ꡭ어성적, μ˜μ–΄μ„±μ , μˆ˜ν•™μ„±μ , μ΄ν•©μ μˆ˜, 총점평균, 학점 정보λ₯Ό 가지고 μžˆλŠ” sungjuk 클래슀λ₯Ό λ§Œλ“€μ–΄λ³΄μž.

 

 


 

μ„ μ–Έμœ„μΉ˜μ— λ”°λ₯Έ λ³€μˆ˜μ˜ μ’…λ₯˜

 

λ³€μˆ˜μ˜ μ’…λ₯˜ μ„ μ–Έμœ„μΉ˜ μƒμ„±μ‹œκΈ°
ν΄λž˜μŠ€λ³€μˆ˜ ν΄λž˜μŠ€μ˜μ—­ ν΄λž˜μŠ€κ°€ λ©”λͺ¨λ¦¬μ— 올라갈 λ•Œ
μΈμŠ€ν„΄μŠ€λ³€μˆ˜ μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λ˜μ—ˆμ„ λ•Œ
μ§€μ—­λ³€μˆ˜ 클래슀 μ˜μ—­ μ΄μ™Έμ˜ μ˜μ—­(λ©”μ†Œλ“œ, μƒμ„±μž, μ΄ˆκΈ°ν™” λΈ”λŸ­ λ‚΄λΆ€) λ³€μˆ˜ 선언문이 μˆ˜ν–‰λ˜μ—ˆμ„ λ•Œ

 

1. μΈμŠ€ν„΄μŠ€λ³€μˆ˜ 

: 클래슀 μ˜μ—­μ— μ„ μ–Έλ˜λ©°, 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 λ•Œ λ§Œλ“€μ–΄μ§„λ‹€. μΈμŠ€ν„΄μŠ€λŠ” 독립적인 μ €μž₯곡간을 κ°€μ§€λ―€λ‘œ μ„œλ‘œ λ‹€λ₯Έ 값을 κ°€μ§ˆ 수 μžˆλ‹€. μΈμŠ€ν„΄μŠ€λ§ˆλ‹€ κ³ μœ ν•œ μƒνƒœλ₯Ό μœ μ§€ν•΄μ•Όν•˜λŠ” μ†μ„±μ˜ 경우, μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ‘œ μ„ μ–Έν•΄μ•Όν•œλ‹€. 

 

2. ν΄λž˜μŠ€λ³€μˆ˜

: 클래슀 λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” 방법은 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ μ•žμ— static을 λΆ™μ΄κΈ°λ§Œ ν•˜λ©΄ λœλ‹€. 

μΈμŠ€ν„΄μŠ€λ§ˆλ‹€ 독립적인 μ €μž₯곡간을 κ°–λŠ” μΈμŠ€ν„΄μŠ€λ³€μˆ˜μ™€λŠ” 달리, ν΄λž˜μŠ€λ³€μˆ˜λŠ” λͺ¨λ“  μΈμŠ€ν„΄μŠ€κ°€ κ³΅ν†΅λœ μ €μž₯곡간(λ³€μˆ˜)을 κ³΅μœ ν•˜κ²Œ λœλ‹€. ν•œ 클래슀의 λͺ¨λ“  μΈμŠ€ν„΄μŠ€λ“€μ΄ 곡톡적인 값을 μœ μ§€ν•΄μ•Όν•˜λŠ” μ†μ„±μ˜ 경우, 클래슀 λ³€μˆ˜λ‘œ μ„ μ–Έν•΄μ•Όν•œλ‹€. 

 

3. μ§€μ—­λ³€μˆ˜

: λ©”μ†Œλ“œ 내에 μ„ μ–Έλ˜μ–΄ λ©”μ†Œλ“œ λ‚΄μ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯ν•˜λ©°, λ©”μ†Œλ“œκ°€ μ’…λ£Œλ˜λ©΄ μ†Œλ©Έλ˜μ–΄ μ‚¬μš©ν•  수 μ—†κ²Œ λœλ‹€. forλ¬Έ λ˜λŠ” while문의 λΈ”λŸ­ 내에 μ„ μ–Έλœ μ§€μ—­λ³€μˆ˜λŠ”, μ§€μ—­λ³€μˆ˜κ°€ μ„ μ–Έλœ λΈ”λŸ­{} λ‚΄μ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯ν•˜λ©°, λΈ”λŸ­{}을 λ²—μ–΄λ‚˜λ©΄ μ†Œλ©Έλ˜μ–΄ μ‚¬μš©ν•  수 μ—†κ²Œ λœλ‹€ .

 

class Card{

    //μΈμŠ€ν„΄μŠ€ λ³€μˆ˜
      String kind;
      int number;
    
    //ν΄λž˜μŠ€λ³€μˆ˜
      static int width = 100;
      static int height = 200;
      
}

 

 

 

 

 

λ°˜μ‘ν˜•
Comments