πŸ“Œ Java 상속(Inheritance) 및 λ©”μ„œλ“œ μ˜€λ²„λΌμ΄λ”©(Method Overriding) 정리

My Pale Blue DotΒ·2025λ…„ 3μ›” 6일
0

JAVA

λͺ©λ‘ 보기
15/35
post-thumbnail

πŸ“… λ‚ μ§œ

2025-03-06

πŸ“ ν•™μŠ΅ λ‚΄μš©


1️⃣ 상속(Inheritance)μ΄λž€?

상속(Inheritance) 은 λΆ€λͺ¨ 클래슀의 속성과 κΈ°λŠ₯을 μžμ‹ ν΄λž˜μŠ€κ°€ λ¬Όλ €λ°›μ•„ μ‚¬μš©ν•˜λŠ” κ°œλ…μ΄λ‹€.

βœ… μƒμ†μ˜ νŠΉμ§•

  1. λΆ€λͺ¨(μƒμœ„, Super) 클래슀의 속성과 κΈ°λŠ₯을 μžμ‹(ν•˜μœ„, Sub) ν΄λž˜μŠ€μ—μ„œ λ¬Όλ €λ°›μ•„ μ‚¬μš©ν•  수 μžˆλ‹€.
  2. ν•˜μœ„ ν΄λž˜μŠ€λŠ” μƒμœ„ 클래슀의 속성과 κΈ°λŠ₯을 ν™•μž₯ν•˜κ±°λ‚˜ μˆ˜μ •ν•  수 μžˆλ‹€.
  3. extends ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 상속을 κ΅¬ν˜„ν•œλ‹€.
  4. 상속을 ν™œμš©ν•˜λ©΄ μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ„ 높이고 μœ μ§€λ³΄μˆ˜λ₯Ό μ‰½κ²Œ ν•  수 μžˆλ‹€.

βœ… μƒμ†μ˜ μž₯점

  • ν™•μž₯μ„±: κΈ°μ‘΄ ν΄λž˜μŠ€μ— μƒˆλ‘œμš΄ κΈ°λŠ₯을 μ‰½κ²Œ μΆ”κ°€ν•  수 있음.
  • μœ μ§€λ³΄μˆ˜μ„±: 쀑볡 μ½”λ“œκ°€ 쀄어듀어 관리가 μš©μ΄ν•¨.
  • 가독성: μ½”λ“œμ˜ ꡬ쑰가 λͺ…ν™•ν•΄μ§€κ³  μ΄ν•΄ν•˜κΈ° μ‰¬μ›Œμ§.
  • μ½”λ“œ 쀑볡 μ΅œμ†Œν™”: κ³΅ν†΅λœ κΈ°λŠ₯을 λΆ€λͺ¨ ν΄λž˜μŠ€μ—μ„œ μ •μ˜ν•˜μ—¬ 쀑볡 μ½”λ“œλ₯Ό 쀄일 수 있음.

2️⃣ 상속 예제: Point2D와 Point3D 클래슀

βœ… μ½”λ“œ 예제

class Point2D {  
    int x;  
    int y;  

    Point2D() {  
        System.out.println("Point2D λ””ν΄νŠΈ μƒμ„±μž 호좜!");  
    }  

    Point2D(int x) {  
        this.x = x;  
        System.out.println("Point2D(int x) μƒμ„±μž 호좜!");  
    }  

    Point2D(int x, int y) {  
        this.x = x;  
        this.y = y;  
        System.out.println("Point2D(int x, int y) μƒμ„±μž 호좜!");  
    }  
}  

class Point3D extends Point2D {  
    int z;  

    Point3D() {  
        super();  
        System.out.println("Point3D λ””ν΄νŠΈ μƒμ„±μž 호좜!");  
    }  

    Point3D(int x) {  
        super(x);  
        System.out.println("Point3D(int x) μƒμ„±μž 호좜!");  
    }  

    Point3D(int x, int y) {  
        super(x, y);  
        System.out.println("Point3D(int x, int y) μƒμ„±μž 호좜!");  
    }  

    Point3D(int x, int y, int z) {  
        super(x, y);  
        this.z = z;  
        System.out.println("Point3D(int x, int y, int z) μƒμ„±μž 호좜!");  
    }  

    @Override  
    public String toString() {  
        return "Point3D [z=" + z + ", x=" + x + ", y=" + y + "]";  
    }  
}  

public class InheritanceMain {  
    public static void main(String[] args) {  
        Point3D ob1 = new Point3D(10, 20, 30);  
        System.out.println(ob1);  
    }  
}  

πŸ”Ή 좜λ ₯ κ²°κ³Ό

Point2D(int x, int y) μƒμ„±μž 호좜!  
Point3D(int x, int y, int z) μƒμ„±μž 호좜!  
Point3D [z=30, x=10, y=20]  

3️⃣ λ©”μ„œλ“œ μ˜€λ²„λΌμ΄λ”©(Method Overriding) κ°œλ…

λ©”μ„œλ“œ μ˜€λ²„λΌμ΄λ”©(Method Overriding) 은 λΆ€λͺ¨ ν΄λž˜μŠ€μ—μ„œ μ •μ˜ν•œ λ©”μ„œλ“œλ₯Ό μžμ‹ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” κ°œλ…μ΄λ‹€.

βœ… μ˜€λ²„λ‘œλ”© vs μ˜€λ²„λΌμ΄λ”©

κ΅¬λΆ„μ˜€λ²„λ‘œλ”©(Overloading)μ˜€λ²„λΌμ΄λ”©(Overriding)
상속 ν•„μš” μ—¬λΆ€ν•„μš” μ—†μŒν•„μš”ν•¨
λ©”μ„œλ“œ 헀더변경 κ°€λŠ₯ (νŒŒλΌλ―Έν„° 개수, νƒ€μž… λ³€κ²½ κ°€λŠ₯)동일해야 함 (λ©”μ„œλ“œλͺ…, λ§€κ°œλ³€μˆ˜, λ°˜ν™˜ νƒ€μž… 동일)
λͺ©μ κ°™μ€ μ΄λ¦„μ˜ λ©”μ„œλ“œλ₯Ό λ‹€μ–‘ν•œ λ°©μ‹μœΌλ‘œ μ‚¬μš©λΆ€λͺ¨ 클래슀의 κΈ°λŠ₯을 λ³€κ²½ν•˜μ—¬ λ‹€ν˜•μ„± κ΅¬ν˜„

4️⃣ μ˜€λ²„λΌμ΄λ”© 예제: Animal, Dog, Cat 클래슀

βœ… μ½”λ“œ 예제

class Animal {  
    void sound() {  
        System.out.println("μ†Œλ¦¬λ‚Έλ‹€.");  
    }  
}  

class Dog extends Animal {  
    @Override  
    void sound() {  
        System.out.println("멍멍");  
    }  
}  

class Cat extends Animal {  
    @Override  
    void sound() {  
        System.out.println("μ•Όμ˜Ή");  
    }  
}  

public class MethodOverridingMain {  
    public static void main(String[] args) {  
        Animal ani = new Animal();  
        ani.sound();  

        Dog dog1 = new Dog();  
        dog1.sound();  

        Cat cat1 = new Cat();  
        cat1.sound();  

        System.out.println("----------------");  

        ani = dog1; // μƒμœ„ 클래슀 μ°Έμ‘° λ³€μˆ˜κ°€ ν•˜μœ„ 객체 Dog μ—°κ²°  
        ani.sound();  

        ani = cat1; // μƒμœ„ 클래슀 μ°Έμ‘° λ³€μˆ˜κ°€ ν•˜μœ„ 객체 Cat μ—°κ²°  
        ani.sound();  
    }  
}  

πŸ”Ή 좜λ ₯ κ²°κ³Ό

μ†Œλ¦¬λ‚Έλ‹€.  
멍멍  
μ•Όμ˜Ή  
----------------  
멍멍  
μ•Όμ˜Ή  

πŸ”₯ 정리

βœ… 상속(Inheritance) 을 μ‚¬μš©ν•˜λ©΄ μ½”λ“œ 쀑볡을 쀄이고 μœ μ§€λ³΄μˆ˜λ₯Ό μ‰½κ²Œ ν•  수 μžˆλ‹€.
βœ… μƒμ„±μž μ˜€λ²„λ‘œλ”© 을 ν™œμš©ν•˜λ©΄ μ—¬λŸ¬ 개의 μƒμ„±μžλ₯Ό μ •μ˜ν•˜μ—¬ 객체 μ΄ˆκΈ°ν™”λ₯Ό μœ μ—°ν•˜κ²Œ ν•  수 μžˆλ‹€.
βœ… λ©”μ„œλ“œ μ˜€λ²„λΌμ΄λ”©(Method Overriding) 은 λΆ€λͺ¨ 클래슀의 λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•˜μ—¬ λ‹€ν˜•μ„±μ„ κ΅¬ν˜„ν•˜λŠ” 핡심 κ°œλ…μ΄λ‹€.
βœ… μ˜€λ²„λ‘œλ”©κ³Ό μ˜€λ²„λΌμ΄λ”©μ„ κ΅¬λΆ„ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€.


πŸ”— μ°Έκ³  자료


profile
Here, My Pale Blue.🌏

0개의 λŒ“κΈ€