Bibi's DevLog πŸ€“πŸŽ

[μ½”λ“œμŠ€μΏΌλ“œ μ½”μ½”μ•„] Day3 - λ°°μ—΄, 객체, λ©”μ†Œλ“œ, 클래슀 λ³Έλ¬Έ

Records/Codesquad - cocoa Java

[μ½”λ“œμŠ€μΏΌλ“œ μ½”μ½”μ•„] Day3 - λ°°μ—΄, 객체, λ©”μ†Œλ“œ, 클래슀

λΉ„λΉ„ bibi 2020. 11. 4. 15:25

λ―Έμ…˜μ„ μœ„ν•œ μ„ ν–‰ν•™μŠ΅ - 자슡.

 

λ°°μ—΄ 

- μƒν™œμ½”λ”© μžλ°” λ°°μ—΄ (opentutorials.org/course/1223/5373)

  • λ°°μ—΄(Array)
    • 배열은 μ—°κ΄€λœ 정보λ₯Ό κ·Έλ£Ήν•‘ν•˜λŠ” 데 μ‚¬μš©ν•œλ‹€.
    • λ³€μˆ˜μ— μƒμˆ˜λ₯Ό λŒ€μž…
      • (예) '반μž₯', 'λΆ€λ°˜μž₯'μ΄λΌλŠ” λ³€μˆ˜μ— 각각 'μ΅œμ§„ν˜', '졜유빈'μ΄λΌλŠ” μƒμˆ˜λ₯Ό λŒ€μž…ν•œλ‹€.
        -> λ³€μˆ˜ : 값이 λ°”λ€” 수 μžˆλ‹€. 반μž₯이 μ΅œμ§„ν˜μ—μ„œ ν™κΈΈλ™μœΌλ‘œ λ°”λ€Œμ–΄λ„ 반μž₯μ—κ²Œ μ§€μ‹œλ₯Ό 내릴 수 μžˆλ‹€.
        -> μƒμˆ˜ : λ³€ν•˜μ§€ μ•ŠλŠ” 값이닀. μ—¬κΈ°μ„œλŠ” ν•™μƒλ“€μ˜ 이름이 μƒμˆ˜μ΄λ‹€.
    • λ³€μˆ˜μ— 배열을 λŒ€μž… (배열을 μ“°λŠ” 이유)
      • (예) 1λ°˜μ΄λΌλŠ” λ³€μˆ˜μ— ['μ΅œμ§„ν˜', '졜유빈', ... 'μ΄κ³ μž‰']μ΄λΌλŠ” 학생듀을 λŒ€μž….
      • λ³€μˆ˜μ— μ—°κ΄€λœ μƒμˆ˜λ“€μ„ λ°°μ—΄λ‘œ λ‹΄μœΌλ©΄ κ΄€λ¦¬ν•˜κΈ°κ°€ 더 μ‰¬μ›Œμ§„λ‹€.
  • λ°°μ—΄μ˜ κ°œλ…
    λ°°μ—΄(Array) : μ—°κ΄€λœ 데이터λ₯Ό λͺ¨μ•„μ„œ κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” 데이터 νƒ€μž….
    • λ³€μˆ˜κ°€ ν•˜λ‚˜μ˜ 데이터λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•œ 것이라면, 배열은 μ—¬λŸ¬ 개의 데이터λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•œ 것이닀.
public class DefineDemo {
    public static void main(String[] args) {
        String[] classGroup = { "μ΅œμ§„ν˜", "졜유빈", "ν•œμ΄λžŒ", "μ΄κ³ μž‰" };
    }
}
  • μžλ°”μ—μ„œ λ°°μ—΄μ˜ 생성 (μœ„ μ½”λ“œμ˜ String[] classGroup = { .. } μ°Έκ³ )
    • String[]
      • String : ν•΄λ‹Ή λ°°μ—΄μ˜ λ°μ΄ν„°νƒ€μž…(μžλ£Œν˜•). μ—¬κΈ°μ„œλŠ” λ¬Έμžμ—΄μ΄λ―€λ‘œ String
      • [] : 배열을 μ„ μ–Έν•  λ•ŒλŠ” 데이터 νƒ€μž… 뒀에 λŒ€κ΄„ν˜Έλ₯Ό μ—΄κ³  λ‹«μ•„μ•Ό ν•œλ‹€.
        β€» []이 μ—†λ‹€λ©΄, classGroup은 배열이 μ•„λ‹Œ λ¬Έμžμ—΄ μžλ£Œν˜•μ˜ λ³€μˆ˜κ°€ λœλ‹€.
    • classGroup : λ°°μ—΄μ˜ 이름
    • { "μ΅œμ§„ν˜", "졜유빈", "ν•œμ΄λžŒ", "μ΄κ³ μž‰" };
      • μ›μ†Œ element : λ°°μ—΄ 속 데이터을 λ§ν•œλ‹€.
      • λ°°μ—΄μ˜ μ›μ†Œλ“€μ€ μ€‘κ΄„ν˜Έ { } 내에 μœ„μΉ˜ν•œλ‹€.
      • λ°°μ—΄ 속 μ›μ†Œλ“€μ€ , (μ‰Όν‘œ)둜 κ΅¬λΆ„λœλ‹€.
        (ν•΄λ‹Ή 배열은 λ¬Έμžμ—΄ λ°°μ—΄μ΄λ―€λ‘œ 각 데이터듀을 ν°λ”°μ˜΄ν‘œλ‘œ 감싼닀)

 

  • 인덱슀 index
    • λ°°μ—΄μ˜ 각 μ›μ†Œλ“€μ„ μ‹λ³„ν•˜λŠ” μ‹λ³„μž.
      (μΈλ±μŠ€λŠ” μ‹λ³„μžμ΄λ―€λ‘œ μ€‘λ³΅λ˜λ©΄ μ•ˆ λœλ‹€.
      λ”°λΌμ„œ 데이터가 좔가될 λ•Œλ§ˆλ‹€ μžλ™μœΌλ‘œ 0λΆ€ν„° 1μ”© μ¦κ°€ν•˜λ©° λ§Œλ“€μ–΄μ§„λ‹€)
    • ⚠ μΈλ±μŠ€λŠ” 0λΆ€ν„° μ‹œμž‘ν•œλ‹€.
      λ°°μ—΄μ˜ 첫 번째 μ›μ†Œ = [0], 두 번째 μ›μ†Œ = [1], μ„Έ 번쨰 μ›μ†Œ = [2] ....
  • λ°°μ—΄μ˜ 길이 length
    • 배열을 μ„ μ–Έν•  λ•Œ, μ§€μ •ν•œ 배열이 담을 수 μžˆλŠ” κ°’μ˜ 크기.
    • λ°°μ—΄ 내에 빈 μ›μ†Œκ°€ μ—†λŠ” 경우, λ°°μ—΄μ˜ κΈΈμ΄λŠ” 배열에 λ‹΄κΈ΄ μ›μ†Œμ˜ μˆ«μžμ™€ κ°™λ‹€.
  • λ°°μ—΄κ³Ό 반볡문
    • λ°°μ—΄κ³Ό λ°˜λ³΅λ¬Έμ€ 맀우 λ°€μ ‘ν•œ 관계이닀.
      forλ¬Έ, whileλ¬Έ λ“± "반볡문"을 μ΄μš©ν•΄ λ°°μ—΄μ˜ λ‚΄μš©μ„ ν•˜λ‚˜ν•˜λ‚˜μ”© κΊΌλ‚΄ μ‚¬μš©ν•  수 있기 λ•Œλ¬Έ.
    • λ°°μ—΄ : μ—°κ΄€λœ 정보λ₯Ό ν•˜λ‚˜μ˜ 그룹으둜 κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€.
    • λ°°μ—΄λ‘œ κ·Έλ£Ήν•‘λœ 정보λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ λ°˜λ³΅λ¬Έμ„ 주둜 μ‚¬μš©ν•œλ‹€.
  • (JAVA) λ°°μ—΄μ˜ ν•œκ³„
    • (μžλ°”μŠ€ν¬λ¦½νŠΈ, 파이썬 λ“±κ³Ό λ‹€λ₯΄κ²Œ)
      μžλ°”μ—μ„œ 배열은 μ΄ˆκΈ°ν™”ν•  λ•Œ κ·Έ 크기가 정해진닀.
      κ·Έλž˜μ„œ 정해진 크기 μ΄μƒμ˜ 값을 넣을 수 μ—†λ‹€.
      • 학생(μ›μ†Œ) μˆ˜μš”λ₯Ό 미리 μ˜ˆμΈ‘ν•˜κ³  그에 λ§žλŠ” ꡐ싀(λ°°μ—΄)을 지어야 ν•˜λŠ” 것과 κ°™λ‹€.
        ꡐ싀(λ°°μ—΄) 크기보닀 더 λ§Žμ€ 학생(μ›μ†Œ)을 μˆ˜μš©ν•˜λ €λ©΄,
        ꡐ싀을 λΆ€μˆ˜κ³  λ‹€μ‹œ μ§“κ±°λ‚˜ μƒˆλ‘œμš΄ ꡐ싀을 λ§Œλ“€μ–΄μ•Ό 함.
    • 해결방법) μžλ°”μ˜ μ»¬λ ‰μ…˜ Collection(λ˜λŠ” μ»¨ν…Œμ΄λ„ˆ Container) κΈ°λŠ₯을 μ΄μš©ν•œλ‹€.
      (객체지ν–₯ κ°œλ…μ„ μ΄ν•΄ν•˜κ³  λ‚˜μ„œ μ»¬λ ‰μ…˜μ„ 배우자)
  • 이외..
    • for-each : λ°°μ—΄μ˜ λ‚΄μš©μ„ 탐색할 λ•Œ, forλ¬Έ 더 κ°„κ²°ν•˜κ²Œ μ‚¬μš©ν•˜κΈ°.
      opentutorials.org/course/1223/5373

λ©”μ†Œλ“œ

- μƒν™œμ½”λ”© μžλ°” - λ©”μ†Œλ“œ opentutorials.org/course/1223/5369

  • λ©”μ†Œλ“œ method
    μžλ°”μ—μ„œμ˜ ν•¨μˆ˜ κ°œλ…. μžλ°”μ—μ„œμ˜ ν•¨μˆ˜ = λ©”μ†Œλ“œ 이닀.
    •  λ©”μ†Œλ“œμ˜ 두 가지 νŠΉμ§•
      • 1. λ©”μ†Œλ“œλŠ” μ½”λ“œλ₯Ό μž¬ν™œμš©ν•  수 있게 ν•΄ μ€€λ‹€. (μž¬ν™œμš©μ„±)
        : 즉 λ°˜λ³΅λ˜λŠ” μ½”λ“œλ₯Ό 쀄여 μ£Όμ–΄, μ½”λ“œμ˜ 양을 쀄이고 가독성을 높인닀.
      • 2. λ©”μ†Œλ“œλŠ” μž…λ ₯κ°’κ³Ό 좜λ ₯값을 쀄 수 μžˆλ‹€.
        : λ©”μ†Œλ“œλŠ” ν”„λ‘œκ·Έλž¨ λ‚΄μ˜ μž‘μ€ ν”„λ‘œκ·Έλž¨μ΄λΌκ³  ν•  수 μžˆλ‹€.
        μž…λ ₯값에 따라 λ‹€λ₯Έ κ²°κ³Όλ₯Ό 좜λ ₯ν•΄ 쀌으둜써 νš¨μš©μ„ 높일 수 μžˆλ‹€.
  • λ©”μ†Œλ“œμ˜ ν˜•νƒœ
    : μ§€κΈˆκΉŒμ§€ 많이 λ§Œλ“€μ–΄ λ³΄μ•˜λ˜ μ•„λž˜ ν˜•νƒœκ°€ λ©”μ†Œλ“œμ˜ ν˜•νƒœμ΄λ‹€.
public static void main(String[] args) {
	return
}
  • (μœ„) λ©”μ†Œλ“œμ˜ ν˜•νƒœ 뢄석
    • public static : 객체, 객체지ν–₯κ³Ό ν•¨κ»˜ 곡뢀해야 ν•˜λŠ” 뢀뢄이닀.
      μ΄ν•΄ν•˜κΈ° μ „κΉŒμ§€λŠ” μ™Έμ›Œμ„œ μ“°μž.
    • μ§€κΈˆμ€ void μ΄ν•˜ 뢀뢄듀을 λ°°μ›Œλ³Ό 것이닀.
  • λ©”μ†Œλ“œμ˜ μ •μ˜μ™€ 호좜
    • (λ©”μ†Œλ“œμ˜) μ •μ˜ : 직접 λ©”μ†Œλ“œλ₯Ό λ§Œλ“œλŠ” 것.
    • (λ©”μ†Œλ“œμ˜) 호좜 : λ§Œλ“€μ–΄μ§„ λ©”μ†Œλ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” 것.
public class MethodDemo1 {
    public static void numbering() {
        int i = 0;
        while (i < 10) {
            System.out.println(i);
            i++;
        }
    }
 
    public static void main(String[] args) {
        numbering();
    }
}

// μ‹€ν–‰κ²°κ³Ό : 0 1 2 3 4 5 6 7 8 9 
  • (μœ„) μ½”λ“œ 뢄석
    • public static void numbering() { ..... }
      : λ©”μ†Œλ“œμ˜ μ •μ˜. numbering μ΄λΌλŠ” μ΄λ¦„μ˜ λ©”μ†Œλ“œλ₯Ό μ •μ˜ν•˜κ³  μžˆλ‹€.
    • numbering();
      : λ©”μ†Œλ“œμ˜ 호좜. mainμ΄λΌλŠ” λ©”μ†Œλ“œ μ•ˆμ—μ„œ numberingμ΄λΌλŠ” λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜κ³  μžˆλ‹€.

μ™Όμͺ½ μ½”λ“œμ™€ 였λ₯Έμͺ½ μ½”λ“œλŠ” μ™„μ „νžˆ λ™μΌν•œ 의미λ₯Ό κ°–λŠ”λ‹€. 였λ₯Έμͺ½ μ‚¬μ§„μ˜ 핑크색 μ½”λ“œλ₯Ό, numberingμ΄λΌλŠ” λ©”μ†Œλ“œλ‘œ λ¬Άμ–΄μ„œ μ™ΈλΆ€λ‘œ λΆ„λ¦¬ν•œ 것이닀. 그리고 numbering의 둜직이 ν•„μš”ν•  λ•Œ numbering(); 으둜 ν˜ΈμΆœν•΄ μ‚¬μš©ν•˜λ©΄ numbering의 둜직이 μ‹€ν–‰λœλ‹€.

  • main λ©”μ†Œλ“œ
    • main λ©”μ†Œλ“œλŠ” κ·œμΉ™μ΄λ‹€.
      μžλ°”λ‘œ ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€ λ•ŒλŠ” λ°˜λ“œμ‹œ,
      public static void main(String[] args) { ..... } 
      의 μ€‘κ΄„ν˜Έ 내에 μ‹€ν–‰ν•˜κ³  싢은 λ‘œμ§μ„ λ„£μ–΄μ•Ό ν•œλ‹€. 
    • μš°λ¦¬λŠ” mainλ©”μ†Œλ“œλ₯Ό μž‘μ„±ν•˜κ³ , μžλ°”λŠ” mainλ©”μ†Œλ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” 관계이닀.
  • λ©”μ„œλ“œμ˜ νŠΉμ§• 1 : μž¬ν™œμš©μ„±
    • κΈ΄ μ½”λ“œ -> ν•˜λŠ” 일에 따라 λ©”μ„œλ“œλ‘œ λ‚˜λˆ„κ³ , 
      κ·Έ μ½”λ“œκ°€ λ‹€μ‹œ ν•„μš”ν•  λ•Œ λ§ˆλ‹€ μ½”λ“œλ₯Ό λ‹€μ‹œ μ“°λŠ” λŒ€μ‹  λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œλ‹€.

 

  • λ©”μ„œλ“œμ˜ νŠΉμ§• 2 : μž…λ ₯κ³Ό 좜λ ₯
    • λ§€κ°œλ³€μˆ˜(νŒŒλΌλ―Έν„°, parameter)
      : 'λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ μž…λ ₯ν•œ 값을 둜직으둜 λ§€κ°œν•œλ‹€' λŠ” μ˜λ―Έμ—μ„œ λ§€κ°œλ³€μˆ˜λΌκ³  ν•œλ‹€.
      • μœ„μ˜ μ½”λ“œμ—μ„œ (int limit) μ•ˆμ— μžˆλŠ” limit κ°€ λ§€κ°œλ³€μˆ˜μ— ν•΄λ‹Ήν•œλ‹€.
        • int : λ§€κ°œλ³€μˆ˜κ°€ μ •μˆ˜λΌλŠ” μ˜λ―Έμ΄λ‹€.
        • limit : λ§€κ°œλ³€μˆ˜μ˜ 이름.
      • λ§€κ°œλ³€μˆ˜λŠ” λ©”μ†Œλ“œ λ‚΄μ—μ„œλ§Œ (μ€‘κ΄„ν˜Έ λ‚΄μ—μ„œλ§Œ) μ‚¬μš©ν•  수 μžˆλ‹€.
      • μž…λ ₯값을 μ—¬λŸ¬ 개 λ°›κ³  μ‹Άλ‹€λ©΄ λ§€κ°œλ³€μˆ˜λ“€μ„ 콀마둜 ꡬ뢄해 μ •μ˜ν•΄ μ€€λ‹€.
        예λ₯Ό λ“€μ–΄ public static void numbering(int init, int limit);
        • 이 λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•  λ•ŒλŠ” λ§€κ°œλ³€μˆ˜μ˜ μˆœμ„œλŒ€λ‘œ μ „λ‹¬μΈμžλ₯Ό λ°°μΉ˜ν•œλ‹€.
    • μ „λ‹¬μΈμž (인자, argument)
      : λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ μ „λ‹¬λœ κ°’.
      • μœ„μ˜ μ½”λ“œμ—μ„œλŠ” 5κ°€ μ „λ‹¬μΈμžμ— ν•΄λ‹Ήν•œλ‹€.
  • return 리턴값
    • λ©”μ„œλ“œ λ‚΄μ—μ„œ return을 μ‚¬μš©ν•˜λ©΄.. 
      • 1. 리턴값을 λ°˜ν™˜ν•œλ‹€ : return λ’€μ˜ 값을 λ©”μ†Œλ“œμ˜ 결과둜 λ°˜ν™˜ν•œλ‹€.
      • 2. λ©”μ†Œλ“œλ₯Ό μ’…λ£Œμ‹œν‚¨λ‹€.
    • λ¦¬ν„΄κ°’μ˜ ν˜•νƒœ
      • return;은 λ©”μ†Œλ“œλ₯Ό μ’…λ£Œν•˜κ³  싢은 뢀뢄에 μ λŠ”λ‹€.
        return 리턴값 ;
      • (JAVA)λ©”μ†Œλ“œμ˜ 이름 μ˜†μ— λ¦¬ν„΄κ°’μ˜ μžλ£Œν˜•μ„ λͺ…μ‹œν•΄μ•Ό ν•œλ‹€.
        μ•„λž˜ 예제 μ½”λ“œμ—μ„œ String에 ν•΄λ‹Ήν•œλ‹€.
        리턴값이 μ—†λ‹€λ©΄ voidλ₯Ό 적어쀀닀. (public static void 처럼)
    • 볡수의 리턴값
      • (JAVA) μžλ°”μ—μ„œλŠ” 볡수의 리턴값을 λ°˜ν™˜ν•  수 μ—†λ‹€.
        였직 ν•˜λ‚˜μ˜ λ¦¬ν„΄κ°’λ§Œ λ°˜ν™˜ν•  수 μžˆλ‹€.
      • κ·Έλ ‡λ‹€λ©΄ μ—¬λŸ¬ 데이터λ₯Ό λ°˜ν™˜ν•˜κ³  싢을 땐?
        : "λ°°μ—΄"을 μ΄μš©ν•œλ‹€
         ν•˜λ‚˜μ˜ 배열에 μ—¬λŸ¬ 값을 λ‹΄κ³ , κ·Έ 배열을 λ³€μˆ˜λ‘œ ν•˜μ—¬ λ¦¬ν„΄κ°’μœΌλ‘œ λ°˜ν™˜ν•˜λ©΄ λœλ‹€.
public static String numbering(int init, int limit) {
	// codes
    return /*리턴값*/ ;
}

λ©”μ†Œλ“œμ˜ λ¦¬ν„΄κ°’μ˜ μžλ£Œν˜•μ΄ λ¬Έμžμ—΄μ΄λ©΄ String을 μ λŠ”λ‹€.
λ©”μ†Œλ“œμ˜ 리턴값이 μ—†λ‹€λ©΄ voidλ₯Ό μ λŠ”λ‹€.

 

  • λ©”μ†Œλ“œ 더 κ³΅λΆ€ν•˜κΈ° : μž…λ ₯κ³Ό 좜λ ₯
    • opentutorials.org/course/1223/5575 
    • String[] args의 의미, Scanner(nextInt(), ν…μŠ€νŠΈ 파일, GUI) 에 λŒ€ν•œ μ‹¬ν™”λ‚΄μš©μ΄ μžˆλ‹€.

 

 


 

객체, 클래슀, μΈμŠ€ν„΄μŠ€

κ°μ²΄λŠ” λ©”μ†Œλ“œμ™€ ν•¨κ»˜ κ±°λŒ€ν•˜κ³ , 결함이 μ—†κ³ , μœ μ§€λ³΄μˆ˜κ°€ μ‰¬μš΄ ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€κΈ° μœ„ν•œ 기법이닀.
객체지ν–₯의 κ°œλ… 이해 opentutorials.org/course/1223/5399 λ‚˜μ€‘μ— 읽어보기.
문법, 섀계, λΆ€ν’ˆν™”, 은닉화, μΈν„°νŽ˜μ΄μŠ€ ..
(객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄λž€? μ’€ 더 λ‚˜μ€ ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€κΈ° μœ„ν•œ ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„.
λ‘œμ§μ„ μƒνƒœμ™€ ν–‰μœ„λ‘œ 이루어진 객체둜 λ§Œλ“€κ³ , 이 객체듀을 μ‘°λ¦½ν•΄μ„œ ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“œλŠ” 것.
즉 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° = 객체λ₯Ό λ§Œλ“œλŠ” 것. 
λ”°λΌμ„œ 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ„ μ‹œμž‘ν•˜κΈ° μœ„ν•΄μ„œλŠ” 객체가 무엇인지 λ¨Όμ € 이해해야 ν•œλ‹€.)
  • 객체(object)λ₯Ό μ™œ μ‚¬μš©ν•˜κ²Œ λ˜μ—ˆλŠ”κ°€?
    • ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨ μ•ˆμ—μ„œ μˆ˜λ§Žμ€ λ©”μ†Œλ“œ, λ³€μˆ˜κ°€ ν•„μš”ν•΄μ Έ
      μ½”λ“œκ°€ λ³΅μž‘ν•΄μ§€κ³  버그도 λ§Žμ•„μ‘ŒκΈ° λ•Œλ¬Έ.
      -> 이런 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ“±μž₯ν•œ 것이 객체지ν–₯이닀.
    • 즉 객체λ₯Ό μ‚¬μš©ν•˜λ©΄ μ½”λ“œμ˜ 가독성을 높일 수 있고, μœ μ§€κ΄€λ¦¬κ°€ μ‰¬μ›Œμ§„λ‹€.
      (객체지ν–₯ νŒ¨λŸ¬λ‹€μž„μ΄ λ“±μž₯ν•œ λ°λŠ” λ§Žμ€ μ΄μœ κ°€ μžˆμ§€λ§Œ μ§€κΈˆμ€ μ΄μ •λ„λ‘œ μ•Œμ•„λ‘μž)
  • 객체지ν–₯의 핡심 - κ·Έλ£Ήν•‘
    • : "μ—°κ΄€"된 μ½”λ“œμ™€ "반볡"λ˜λŠ” μ½”λ“œλ“€μ„ 그룹으둜 λ¬ΆλŠ” 것.
      • μ—°κ΄€λœ&λ°˜λ³΅λ˜λŠ” μ½”λ“œλ₯Ό κ·Έλ£Ήν•‘ν•˜μ—¬ ν•˜λ‚˜μ˜ 그룹으둜 λ§Œλ“€κ³ ,
        ν•„μš”ν•  λ•Œλ§ˆλ‹€ κ·Έ 그룹을 반볡적으둜 μ‚¬μš©ν•œλ‹€.
        -> 이 그룹을 "객체 Object" 라고 λΆ€λ₯΄λ©°,
        JAVAμ—μ„œ 객체에 μƒμ‘ν•˜λŠ” κ°œλ…μ΄ "클래슀 Class"이닀.
        (μ •ν™•νžˆλŠ” μΈμŠ€ν„΄μŠ€ Instance에 μƒμ‘ν•œλ‹€ - λ‚˜μ€‘μ— 더 μžμ„Ένžˆ κ³΅λΆ€ν•˜κΈ°..)
  • 클래슀 class
    • 클래슀 : μ—°κ΄€λ˜μ–΄ μžˆλŠ” λ³€μˆ˜μ™€ λ©”μ†Œλ“œλ“€μ˜ 집합.
      • 클래슀λ₯Ό λ§Œλ“€μ–΄ μ‚¬μš©ν•˜λŠ” 이유 = μž¬ν™œμš©μ„±μ„ 높이기 μœ„ν•΄.
        ν•˜λ‚˜μ˜ 클래슀λ₯Ό λ§Œλ“€κ³ , κ·Έ 클래슀둜 μ—¬λŸ¬ 개의 μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€μ–΄ μ‚¬μš©ν•  수 μžˆλ‹€.
      • (μ°Έκ³ ) 클래슀λ₯Ό λ§Œλ“ λ‹€ = μ‚¬μš©μž μ •μ˜ 데이터 νƒ€μž…μ„ λ§Œλ“œλŠ” 것과 λΉ„μŠ·ν•œ 의미.
    • 클래슀의 ν˜•νƒœ : (μ•„λž˜ μ½”λ“œ μ°Έκ³ )
      • public : λ‚˜μ€‘μ— μ„€λͺ…..
      • class : 클래슀라고 μ •μ˜ν•¨
      • Calculator : 클래슀λͺ… (클래슀의 이름). <- JAVAμ—μ„œ 클래슀λͺ…은 λ°˜λ“œμ‹œ λŒ€λ¬Έμžλ‘œ μ‹œμž‘ν•œλ‹€.
      • { } : 클래슀의 경계. μ‹œμž‘{ κ³Ό 끝} 
public class Calculator {
   //codes
}

 

  • μΈμŠ€ν„΄μŠ€ instance
    • ν΄λž˜μŠ€λŠ” μΌμ’…μ˜ μ„€κ³„λ„λ‘œ, 클래슀λ₯Ό μ •μ˜ν•˜λŠ” 것은 섀계도λ₯Ό λ§Œλ“œλŠ” 것에 뢈과.
    • new : ν΄λž˜μŠ€λΌλŠ” 섀계도λ₯Ό -> ꡬ체적인 μ œν’ˆμΈ μΈμŠ€ν„΄μŠ€μœΌλ‘œ λ§Œλ“œλŠ” λͺ…령어이닀.
      • (μ•„λž˜ 예제) Calculator c1 = new Calculator(); 처럼 μ‚¬μš©ν•œλ‹€.
      • (μ°Έκ³ ) 클래슀λ₯Ό λ§Œλ“ λ‹€ = μ‚¬μš©μž μ •μ˜ λ°μ΄ν„°νƒ€μž…μ„ λ§Œλ“ λ‹€.
      • Calculator c1 : λ³€μˆ˜ c1의 데이터 νƒ€μž…μ΄ Calculator이닀. (int num 처럼)
    • c1 : 클래슀λ₯Ό μΈμŠ€ν„΄μŠ€λ‘œ λ§Œλ“€ λ–„λŠ” λ³€μˆ˜μ— λ‹΄μ•„μ•Ό ν•œλ‹€.
    • this : μΈμŠ€ν„΄μŠ€ μžμ‹ μ„ 가리킴 (μŠ€μ½”ν”„ 편 μ°Έκ³ )
    • 즉..
      • 클래슀 : 섀계도
      • μΈμŠ€ν„΄μŠ€ : μ œν’ˆ 이닀.
class Calculator{
    int left, right;
      
    public void setOprands(int left, int right){
        this.left = left;
        this.right = right;
    }
      
    public void sum(){
        System.out.println(this.left+this.right);
    }
      
    public void avg(){
        System.out.println((this.left+this.right)/2);
    }
}
  
public class CalculatorDemo4 {
    public static void main(String[] args) {
          
        Calculator c1 = new Calculator();
        c1.setOprands(10, 20);
        c1.sum();       
        c1.avg();       
          
        Calculator c2 = new Calculator();
        c2.setOprands(20, 40);
        c2.sum();       
        c2.avg();
    }
}

 

 

 

  • 객체, λ³€μˆ˜, λ©”μ†Œλ“œ κ°œλ…μ •λ¦¬
    • 객체 : μƒνƒœμ™€ 행동을 가짐.
    • 객체의 μƒνƒœ state : μžλ°”μ—μ„œλŠ” λ³€μˆ˜ variable에 해당함.
    • 객체의 행동 behave : μžλ°”μ—μ„œλŠ” λ©”μ†Œλ“œ method에 해당함.
      • 즉 κ°μ²΄λŠ” λ³€μˆ˜μ™€ λ©”μ†Œλ“œλ‘œ κ΅¬μ„±λ˜λ©°, λ³€μˆ˜ = μƒνƒœ, λ©”μ†Œλ“œ = 행동 이닀.
    • (정리) ν•˜λ‚˜μ˜ 클래슀λ₯Ό λ°”νƒ•μœΌλ‘œ μ„œλ‘œ λ‹€λ₯Έ μƒνƒœλ₯Ό 가진 μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€λ©΄ μ„œλ‘œ λ‹€λ₯Έ 행동을 ν•˜κ²Œ λœλ‹€.
  • 멀버
    • 멀버 member : ꡬ성원 μ΄λΌλŠ” 뜻.
    • 객체의 멀버 : λ³€μˆ˜(μƒνƒœ), λ©”μ†Œλ“œ(행동).
      • ν΄λž˜μŠ€μ™€ μΈμŠ€ν„΄μŠ€λ„ 객체와 λΉ„μŠ·ν•œ κ°œλ…μ΄λ―€λ‘œ 각각 멀버λ₯Ό κ°€μ§ˆ 수 μžˆλ‹€.
      • 클래슀 - (멀버) λ³€μˆ˜, λ©”μ†Œλ“œ -> 클래슀 λ³€μˆ˜, 클래슀 λ©”μ†Œλ“œ
      • μΈμŠ€ν„΄μŠ€ - (멀버) λ³€μˆ˜, λ©”μ†Œλ“œ -> μΈμŠ€ν„΄μŠ€ λ³€μˆ˜, μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ
  • 클래슀 멀버 : 클래슀 λ³€μˆ˜, 클래슀 λ©”μ†Œλ“œ
    •  static을 λ©€λ²„λ³€μˆ˜μ•žμ— 뢙이면 클래슀의 λ©€λ²„λ³€μˆ˜(클래슀 λ³€μˆ˜),
       static을 λ©€λ²„λ©”μ†Œλ“œ μ•žμ— 뢙이면 클래슀의 λ©€λ²„λ©”μ†Œλ“œ(클레슀 λ©”μ†Œλ“œ)κ°€ λœλ‹€.
    • (예) static double PI = 3.14; 
      • static : 클래슀의 λ©€λ²„λΌλŠ” 의미. "정적인"μ΄λΌλŠ” λœ»μ΄λ‹€.
      • double : 숫자 μžλ£Œν˜•μ˜ 일쒅 (λ‚˜μ€‘μ— κ³΅λΆ€ν•˜κΈ°)
      • PI : 클래슀 λ©€λ²„μ˜ 이름.
    • 클래슀 λ³€μˆ˜ class variable λ˜λŠ” static field
      • ν΄λž˜μŠ€μ— μ†ν•œ λ³€μˆ˜? 클래슀 μ „μ—­μ—μ„œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ‹€. (μ „μ—­λ³€μˆ˜?)
      • β€» μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λŠ” instance variable λ˜λŠ” non-static field라고 λΆ€λ₯Έλ‹€.
      • 클래슀 λ³€μˆ˜μ˜ μš©λ„
        • μΈμŠ€ν„΄μŠ€μ— 관계없이 λ³€ν•˜μ§€ μ•ŠλŠ” 값이 ν•„μš”ν•œ 경우
          (μ°Έκ³  : λ‚˜μ€‘μ—λŠ” final을 배우고 final을 μ΄μš©ν•΄ μƒμˆ˜λ‘œ μ„ μ–Έν•˜λŠ” 것이 λ°”λžŒμ§ν•˜λ‹€. )
        • μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 ν•„μš”κ°€ μ—†λŠ” 값을 ν΄λž˜μŠ€μ— μ €μž₯ν•˜κ³  싢은 경우
        • κ°’μ˜ 변경사항을 λͺ¨λ“  μΈμŠ€ν„΄μŠ€κ°€ κ³΅μœ ν•΄μ•Ό ν•˜λŠ” 경우
    • 클래슀 λ©”μ†Œλ“œ
      • ν΄λž˜μŠ€μ— μ†ν•œ λ©”μ†Œλ“œ ?
      • 클래슀 λ©”μ†Œλ“œλŠ” μΈμŠ€ν„΄μŠ€ 멀버에 μ ‘κ·Όν•  수 μ—†λ‹€.
        λ°˜λŒ€λ‘œ, μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œλŠ” 클래슀 멀버에 μ ‘κ·Όν•  수 μžˆλ‹€.
        • (μ™œ? 클래슀 λ©”μ†Œλ“œλŠ” μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λ˜κΈ° 전에 λ§Œλ“€μ–΄μ§€κΈ° λ•Œλ¬Έ.
          클래슀 λ©”μ†Œλ“œκ°€ μΈμŠ€ν„΄μŠ€ 멀버에 μ ‘κ·Όν•˜λŠ” 것은,
          아직 λ§Œλ“€μ–΄μ§€μ§€ μ•Šμ€ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ— μ ‘κ·Όν•˜λŠ” 것과 κ°™λ‹€.)
      • λ©”μ†Œλ“œκ°€ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜μ§€ μ•ŠμœΌλ©΄,
        클래슀 λ©”μ†Œλ“œλ‘œ λ§Œλ“€μ–΄ λΆˆν•„μš”ν•œ μΈμŠ€ν„΄μŠ€μ˜ 생성을 막을 수 μžˆλ‹€.
      • μ•„λž˜λŠ” 클래슀 λ©”μ†Œλ“œμ˜ μ˜ˆμ΄λ‹€. (sum, avg)
class Calculator3{
    public static void sum(int left, int right){
        System.out.println(left+right);
    }
     
    public static void avg(int left, int right){
        System.out.println((left+right)/2);
    }
}

public class CalculatorDemo3 {
    public static void main(String[] args) {
        Calculator3.sum(10, 20);
        Calculator3.avg(10, 20);
         
        Calculator3.sum(20, 40);
        Calculator3.avg(20, 40);
    }
}

 

더 ν•™μŠ΅ν•΄μ•Ό ν•  것듀

 

μžλ°” μ ‘κ·Ό μ œμ–΄μž

wikidocs.net/232 λ₯Ό μžμ„Ένžˆ μ½μ–΄λ³΄μž. κ°μ‚¬ν•©λ‹ˆλ‹€.

~ μ§€κΈˆ 이해가λŠ₯ν•œ λ‚΄μš©λ§Œ 정리 ~

  • μ œμ–΄μžλž€?
    • μ œμ–΄μž modifier
      • ν΄λž˜μŠ€μ™€ ν΄λž˜μŠ€λ©€λ²„(ν΄λž˜μŠ€λ³€μˆ˜, ν΄λž˜μŠ€λ©”μ†Œλ“œ)의 μ„ μ–Έ μ‹œ μ‚¬μš©ν•˜μ—¬
        뢀가적인 의미λ₯Ό λΆ€μ—¬ν•˜λŠ” ν‚€μ›Œλ“œμ΄λ‹€.
      • μžλ°”μ—μ„œ μ œμ–΄μžλŠ” μ ‘κ·Όμ œμ–΄μžμ™€ κΈ°νƒ€μ œμ–΄μžλ‘œ ꡬ뢄할 수 μžˆλ‹€.
        • μ ‘κ·Ό μ œμ–΄μžλŠ” ν•˜λ‚˜λ§Œ μ‚¬μš© κ°€λŠ₯ν•˜λ©°, κΈ°νƒ€μ œμ–΄μžλŠ” κ²½μš°μ— 따라 μ—¬λŸ¬ 개λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.
        • μ ‘κ·Ό μ œμ–΄μžμ™€ 기타 μ œμ–΄μžλŠ” 쑰합에 따라 ν•¨κ»˜ μ‚¬μš©ν•  수 μžˆλ‹€.
  • μ ‘κ·Ό μ œμ–΄μž access modifier
    • 객체지ν–₯의 "정보 은닉" κ°œλ… μ°Έκ³ .
    • μ ‘κ·Όμ œμ–΄μžλ₯Ό μ‚¬μš©ν•΄, 클래슀 μ™ΈλΆ€μ—μ„œμ˜ 접근을 ν—ˆμš©ν•  멀버λ₯Ό μ„€μ •ν•  수 μžˆλ‹€.
    • Javaμ—μ„œλŠ” 총 λ„€ κ°€μ§€μ˜ μ ‘κ·Ό μ œμ–΄μžκ°€ μžˆλ‹€.
      • private, public, default, protected
      • μ ‘κ·Ό μ œμ–΄μžμ˜ μ ‘κ·Ό λ²”μœ„ (μ ‘κ·Όλ²”μœ„ λ§Žμ€ μ œμ–΄μž - 적은 μ œμ–΄μž 순)
        public > protected > default > private
    • 1. private
      • private둜 μ„ μ–Έλœ 클래슀 λ©€λ²„λŠ” 외뢀에 κ³΅κ°œλ˜μ§€ μ•ŠμœΌλ©°, μ™ΈλΆ€μ—μ„œ 직접 μ ‘κ·Όν•  수 μ—†λ‹€.
      • μžλ°” ν”„λ‘œκ·Έλž¨μ€ private멀버에 직접 μ ‘κ·Όν•  수 μ—†λ‹€.
      • ν•΄λ‹Ή 객체의 public λ©”μ†Œλ“œλ₯Ό ν†΅ν•΄μ„œλ§Œ μ ‘κ·Όν•  수 μžˆλ‹€.
      • privateλ©€λ²„λŠ” ν•΄λ‹Ή 멀버λ₯Ό μ„ μ–Έν•œ ν΄λž˜μŠ€μ—μ„œλ§Œ μ ‘κ·Όν•  수 μžˆλ‹€.
      • μ‚¬μš©) 클래슀 λ‚΄λΆ€μ˜ 세뢀적 λ™μž‘μ„ κ΅¬ν˜„ν•˜λŠ” 데 μ‚¬μš©λœλ‹€.
    • 2. public
      • public으둜 μ„ μ–Έλœ 클래슀 λ©€λ²„λŠ” 외뢀에 곡개되며,
        ν•΄λ‹Ή 객체λ₯Ό μ‚¬μš©ν•˜λŠ” ν”„λ‘œκ·Έλž¨ μ–΄λ””μ—μ„œλ‚˜ 직접 μ ‘κ·Όν•  수 μžˆλ‹€.
      • μžλ°” ν”„λ‘œκ·Έλž¨μ€ public λ©”μ†Œλ“œλ₯Ό ν†΅ν•΄μ„œλ§Œ ν•΄λ‹Ή 객체의 private멀버에 μ ‘κ·Όν•  수 μžˆλ‹€.
        λ”°λΌμ„œ publicλ©”μ†Œλ“œλŠ”
        private멀버와 ν”„λ‘œκ·Έλž¨ μ‚¬μ΄μ˜ μΈν„°νŽ˜μ΄μŠ€interface역할을 μˆ˜ν–‰ν•œλ‹€κ³  λ³Ό 수 μžˆλ‹€.
      • μžλ°”μ—μ„œ publicλ©€λ²„λŠ” ν”„λ‘œκ·Έλž¨ μ–΄λ””μ—μ„œλ‚˜, λˆ„κ΅¬λ‚˜ μ ‘κ·Όν•  수 μžˆλ‹€.
    • 3. default
      • 클래슀 및 ν΄λž˜μŠ€λ©€λ²„μ˜ μ ‘κ·Όμ œμ–΄μ˜ 기본값이닀.
        즉, μ ‘κ·Ό μ œμ–΄μžκ°€ μ§€μ •λ˜μ§€ μ•ŠμœΌλ©΄ μžλ™μœΌλ‘œ default μ ‘κ·Όμ œμ–΄λ₯Ό κ°€μ§€κ²Œ λœλ‹€.
      • defaultλ©€λ²„λŠ” 같은 νŒ¨ν‚€μ§€μ— μ†ν•˜λŠ” ν΄λž˜μŠ€μ—μ„œλ§Œ μ ‘κ·Όν•  수 μžˆλ‹€.
    • 4. protected 
      • μ§€κΈˆμ€ 봐도 이해가 잘 μ•ˆ 됨.. ν•„μš”ν•  λ•Œ μ°Ύμ•„μ„œ μ •λ¦¬ν•˜κΈ°

private와 public의 μ˜λ―Έμ™€ μš©λ„?