IT’s Portfolio

[Java] Lecture - Day 6 λ³Έλ¬Έ

Development Study/Java

[Java] Lecture - Day 6

f1r3_r41n 2023. 12. 12. 01:03
728x90
λ°˜μ‘ν˜•

πŸ–₯ Basic Java - Day 6

μƒμ„±μž κ°œλ…κ³Ό λͺ©μ 

public class Circle {
    int r;
    String name;

    public Circle() { // 맀개 λ³€μˆ˜ μ—†λŠ” μƒμ„±μž
        r = 1; name = "";
    }

    public Circle(int r, String n) { // 맀개 λ³€μˆ˜λ₯Ό 가진 μƒμ„±μž
        this.r = r; name = n;
    }

    public double getArea() {
        return 3.14*r*r;
    }

    public static void main(String args[]) {
        Circle pizza = new Circle(10, "Pizza");
        double p_area = pizza.getArea();
        System.out.println(pizza.name + "의 면적 : " + p_area);

        Circle donut = new Circle();
        double d_area = donut.getArea();
        System.out.println(donut.name + "의 면적 : " + d_area);
    }
}
  • μƒμ„±μž
    • 객체가 생성될 λ•Œ μ΄ˆκΈ°ν™” λͺ©μ μœΌλ‘œ μ‹€ν–‰λ˜λŠ” λ©”μ†Œλ“œ
    • 객체가 μƒμ„±λ˜λŠ” μˆœκ°„μ— μžλ™ 호좜

μƒμ„±μžμ˜ νŠΉμ§•

  • μƒμ„±μž 이름은 클래슀 이름과 동일
  • μƒμ„±μžλŠ” μ—¬λŸ¬ 개 μž‘μ„± κ°€λŠ₯(μƒμ„±μž 쀑볡)
    • 맀개 λ³€μˆ˜μ˜ κ°œμˆ˜μ™€ νƒ€μž…μ΄ 달라야 κ°€λŠ₯
  • μƒμ„±μžλŠ” 객체 생성 μ‹œ ν•œ 번만 호좜
  • μƒμ„±μžμ˜ λͺ©μ μ€ 객체 생성 μ‹œ μ΄ˆκΈ°ν™”
  • μƒμ„±μžλŠ” 리턴 νƒ€μž… 지정 λΆˆκ°€

κΈ°λ³Έ μƒμ„±μž(default constructor)

  • λ””ν΄νŠΈ μƒμ„±μž
  • 맀개 λ³€μˆ˜ μ—†κ³ , μ‹€ν–‰ μ½”λ“œκ°€ μ—†μ–΄ 아무 일도 ν•˜μ§€ μ•Šκ³  λ‹¨μˆœ λ¦¬ν„΄ν•˜λŠ” μƒμ„±μž
  • κΈ°λ³Έ μƒμ„±μžκ°€ μžλ™ μƒμ„±λ˜λŠ” 경우
    • ν΄λž˜μŠ€μ— μƒμ„±μžκ°€ ν•˜λ‚˜λ„ μ„ μ–Έλ˜μ–΄ μžˆμ§€ μ•Šμ„ λ•Œ μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ κΈ°λ³Έ μƒμ„±μžκ°€ μžλ™ 생성됨
  • κΈ°λ³Έ μƒμ„±μžκ°€ μžλ™ μƒμ„±λ˜μ§€ μ•ŠλŠ” 경우
    • ν΄λž˜μŠ€μ— μƒμ„±μžκ°€ μ„ μ–Έλ˜μ–΄ μžˆλŠ” 경우 μ»΄νŒŒμΌλŸ¬λŠ” κΈ°λ³Έ μƒμ„±μžλ₯Ό μžλ™ μƒμ„±ν•˜μ§€ μ•ŠμŒ

this 레퍼런슀

  • 객체 μžμ‹ μ— λŒ€ν•œ 레퍼런슀
    • μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ μžλ™ 관리됨
    • this.멀버 ν˜•νƒœλ‘œ 멀버λ₯Ό μ ‘κ·Όν•  λ•Œ μ‚¬μš©
  • static λ©”μ†Œλ“œμ—μ„œ μ‚¬μš© λΆˆκ°€

this()둜 λ‹€λ₯Έ μƒμ„±μž 호좜

public class Circle {
    int r;
    String name;

    public Circle() {
        r = 1; name = "";
    }

    public Circle(int r) {
        this(r, "동그라미");
    }

    public Circle(int r, String n) {
        this.r = r; name = n;
    }

    public double getArea() {
        return 3.14*r*r;
    }

    public static void main(String args[]) {
        Circle pizza = new Circle(10, "Pizza");
        double p_area = pizza.getArea();
        System.out.println(pizza.name + "의 면적 : " + p_area);

        Circle donut = new Circle();
        double d_area = donut.getArea();
        System.out.println(donut.name + "의 면적 : " + d_area);

        Circle circle = new Circle(4);
        System.out.println(circle.name + "의 면적 : " + circle.getArea());
    }
}
  • 같은 클래슀의 λ‹€λ₯Έ μƒμ„±μž 호좜
  • μƒμ„±μž λ‚΄μ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯
  • μƒμ„±μž μ½”λ“œμ˜ 제일 μ²˜μŒμ— μžˆμ–΄μ•Ό 함

객체 λ°°μ—΄

public class Circle {
    int r;

    public Circle(int r) {
        this.r = r;
    }

    public double getArea() {
        return 3.14*r*r;
    }

    public static void main(String args[]) {
        Circle[] c = new Circle[5];
        for(int i=0; i<c.length; i++) {
            c[i] = new Circle(i);
        }

        for(Circle t : c) {
            System.out.println("면적 : " + (int)t.getArea());
        }
    }
}
  • 객체에 λŒ€ν•œ 레퍼런슀λ₯Ό μ›μ†Œλ‘œ κ°–λŠ” λ°°μ—΄
  • λ°°μ—΄ λ§Œλ“€κΈ°
    • 배열에 λŒ€ν•œ 레퍼런슀 λ³€μˆ˜ μ„ μ–Έ
    • 래퍼런슀 λ°°μ—΄ 생성
    • λ°°μ—΄μ˜ 각 μ›μ†Œ 객체 생성

λ©”μ†Œλ“œ

  • λ©”μ†Œλ“œλŠ” C/Cpp의 ν•¨μˆ˜μ™€ 동일
  • μžλ°”μ˜ λͺ¨λ“  λ©”μ†Œλ“œλŠ” λ°˜λ“œμ‹œ 클래슀 μ•ˆμ— μžˆμ–΄μ•Ό 함(μΊ‘μŠν™” 원칙)
  • λ©”μ†Œλ“œ ν˜•μ‹
    • μ ‘κ·Ό μ§€μ •μž
      • λ‹€λ₯Έ ν΄λž˜μŠ€μ—μ„œ λ©”μ†Œλ“œλ₯Ό μ ‘κ·Όν•  수 μžˆλŠ”μ§€ μ—¬λΆ€ μ„ μ–Έ
      • public, private, protected, default(μ ‘κ·Ό μ§€μ •μž μƒλž΅)
    • 리턴 νƒ€μž…
      • λ©”μ†Œλ“œκ°€ λ¦¬ν„΄ν•˜λŠ” κ°’μ˜ 데이터 νƒ€μž…

인자 전달

  • κΈ°λ³Έ νƒ€μž…μ˜ 값이 μ „λ‹¬λ˜λŠ” 경우
    • 맀개 λ³€μˆ˜κ°€ κΈ°λ³Έ νƒ€μž…μœΌλ‘œ μ„ μ–Έλ˜μ—ˆμ„ λ•Œ : call-by-value
      • ν˜ΈμΆœμžκ°€ κ±΄λ„€λŠ” 값이 맀개 λ³€μˆ˜μ— λ³΅μ‚¬λ˜μ–΄ μ „λ‹¬λ˜λ©° μ‹€μΈμž 값은 λ³€κ²½λ˜μ§€ μ•ŠμŒ
  • 객체가 μ „λ‹¬λ˜λŠ” 경우
    • 객체의 레퍼런슀만 전달
      • 맀개 λ³€μˆ˜κ°€ μ‹€μΈμž 객체 곡유
  • 배열이 μ „λ‹¬λ˜λŠ” 경우
    • λ°°μ—΄ 레퍼런슀만 맀개 λ³€μˆ˜μ— 전달
      • λ°°μ—΄ ν†΅μ§Έλ‘œ μ „λ‹¬λ˜μ§€ μ•ŠμŒ
    • 객체가 μ „λ‹¬λ˜λŠ” κ²½μš°μ™€ 동일
      • 맀개 λ³€μˆ˜κ°€ μ‹€μΈμžμ˜ λ°°μ—΄ 곡유

λ©”μ†Œλ“œ μ˜€λ²„λ‘œλ”©(Overloading)

  • ν•œ 클래슀 λ‚΄μ—μ„œ 두 개 μ΄μƒμ˜ 이름이 같은 λ©”μ†Œλ“œ μž‘μ„±
    • λ©”μ†Œλ“œ 이름이 λ™μΌν•˜μ—¬μ•Ό 함
    • 맀개 λ³€μˆ˜μ˜ κ°œμˆ˜κ°€ μ„œλ‘œ λ‹€λ₯΄κ±°λ‚˜, νƒ€μž…μ΄ μ„œλ‘œ 달라야 함
    • 리턴 νƒ€μž…μ€ μ˜€λ²„λ‘œλ”©κ³Ό 관련이 μ—†μŒ
728x90
λ°˜μ‘ν˜•

'Development Study > Java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Java] Lecture - Day 8  (0) 2023.12.12
[Java] Lecture - Day 7  (0) 2023.12.12
[Java] Lecture - Day 5  (0) 2023.12.12
[Java] Lecture - Day 4  (0) 2023.12.12
[Java] Lecture - Day 3  (0) 2023.12.12
Comments