[TIL] 2024-12-11_상속

YuriΒ·2024λ…„ 12μ›” 11일

TIL

λͺ©λ‘ 보기
5/59
post-thumbnail

πŸ“• Today I Learned - 였늘 λ‚΄κ°€ κ³΅λΆ€ν•œ 것을 μ •λ¦¬ν•©λ‹ˆλ‹€.

1. 상속

상속과 μ ‘κ·Ό μ œμ–΄

μ ‘κ·Ό μ œμ–΄μž UML ν‘œκΈ°λ²•

  • +: public
  • #: protected
  • ~: default
  • -: private

μ ‘κ·Ό μ œμ–΄μžμ˜ μ’…λ₯˜

  • private: λͺ¨λ“  μ™ΈλΆ€ ν˜ΈμΆœμ„ λ§‰λŠ”λ‹€
  • default(package-private): 같은 νŒ¨ν‚€μ§€μ•ˆμ—μ„œ ν˜ΈμΆœμ€ ν—ˆμš©
  • protected: 같은 νŒ¨ν‚€μ§€ μ•ˆμ—μ„œ ν˜ΈμΆœμ€ ν—ˆμš©. νŒ¨ν‚€μ§€κ°€ 달라도 상속 κ΄€κ³„μ˜ ν˜ΈμΆœμ€ ν—ˆμš©
  • public: λͺ¨λ“  μ™ΈλΆ€ 호좜 ν—ˆμš©

Parent

package extends1.access.parent;

public class Parent {
    public int publicValue;
    protected int protectedValue;
    int defaultValue;
    private int privateValue;

    public void publicMethod() {
        System.out.println("Parent.publicMethod");
    }

    protected void protectedMethod() {
        System.out.println("Parent.protectedMethod");
    }

    void defaultMethod() {
        System.out.println("Parent.defaultMethod");
    }

    private void privateMethod() {
        System.out.println("Parent.privateMethod");
    }

    public void printParent() {
        System.out.println("==Parent λ©”μ„œλ“œ μ•ˆ==");
        System.out.println("publicValue = " + publicValue);
        System.out.println("protectedValue = " + protectedValue);
        System.out.println("defaultValue = " + defaultValue); // λΆ€λͺ¨ λ©”μ„œλ“œ μ•ˆμ—μ„œ μ ‘κ·Ό κ°€λŠ₯
        System.out.println("privateValue = " + privateValue); // λΆ€λͺ¨ λ©”μ„œλ“œ μ•ˆμ—μ„œ μ ‘κ·Ό κ°€λŠ₯

        // λΆ€λͺ¨ λ©”μ„œλ“œ μ•ˆμ—μ„œ λͺ¨λ‘ μ ‘κ·Ό κ°€λŠ₯
        defaultMethod();
        privateMethod();
    }
}

Child

package extends1.access.child;

import extends1.access.parent.Parent;

public class Child extends Parent {
    public void call() {
        publicValue = 1;
        protectedValue = 1; // 상속 관계 or 같은 νŒ¨ν‚€μ§€
//        defaultValue = 1; // λ‹€λ₯Έ νŒ¨ν‚€μ§€ μ ‘κ·Ό λΆˆκ°€, 컴파일 였λ₯˜
//        privateValue = 1; // μ ‘κ·Ό λΆˆκ°€, 컴파일 였λ₯˜

        publicMethod();
        protectedMethod(); // 상속 관계 or 같은 νŒ¨ν‚€μ§€
//        defaultMethod(); // λ‹€λ₯Έ νŒ¨ν‚€μ§€ μ ‘κ·Ό λΆˆκ°€, 컴파일 였λ₯˜
//        privateMethod(); // μ ‘κ·Ό λΆˆκ°€, 컴파일 였λ₯˜

        printParent();
    }
}

μ ‘κ·Ό μ œμ–΄μ™€ λ©”λͺ¨λ¦¬ ꡬ쑰

  • +,# : λ‹€λ₯Έ νŒ¨ν‚€μ§€μ—μ„œ λΆ€λͺ¨ 객체 μ ‘κ·Ό κ°€λŠ₯
  • ~, - : μ ‘κ·Ό λΆˆκ°€

2. super

super - λΆ€λͺ¨μ°Έμ‘°

λΆ€λͺ¨μ™€ μžμ‹μ˜ ν•„λ“œλͺ…이 κ°™κ±°λ‚˜ λ©”μ„œλ“œκ°€ μ˜€λ²„λΌμ΄λ”© λ˜μ–΄ 있으면, μžμ‹μ—μ„œ λΆ€λͺ¨μ˜ ν•„λ“œλ‚˜ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  수 μ—†λ‹€.
μ΄λ•Œ super ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ λΆ€λͺ¨λ₯Ό μ°Έμ‘°ν•  수 μžˆλ‹€.

Parent

package extends1.super1;

public class Parent {
    public String value = "parent";
    public void hello() {
        System.out.println("Parent.hello");
    }
}

Child

package extends1.super1;

public class Child extends Parent {
    public String value = "child";

    @Override
    public void hello() {
        System.out.println("Child.hello");
    }

    public void call() {
        System.out.println("this.value = " + this.value); // this μƒλž΅ κ°€λŠ₯
        System.out.println("super.value = " + super.value);

        this.hello(); // this μƒλž΅ κ°€λŠ₯
        super.hello();
    }
}

SuperMain

package extends1.super1;

public class Super1Main {
    public static void main(String[] args) {
        Child child = new Child();
        child.call();
    }
}

  • this: 자기 μžμ‹ μ˜ μ°Έμ‘°, thisλŠ” μƒλž΅ κ°€λŠ₯
    • this.value: μžμ‹(child) λ³€μˆ˜
    • this.hello(): μžμ‹(child) λ©”μ„œλ“œ
  • super: λΆ€λͺ¨ ν΄λž˜μŠ€μ— λŒ€ν•œ μ°Έμ‘°
    • super.value: λΆ€λͺ¨(parent) λ³€μˆ˜
    • super.hello(): λΆ€λͺ¨(parent) λ©”μ„œλ“œ

super - μƒμ„±μž

  • 상속을 λ°›μœΌλ©΄ μƒμ„±μžμ˜ 첫쀄에 super(...)λ₯Ό μ‚¬μš©ν•΄μ„œ λΆ€λͺ¨ 클래슀의 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€.

    • μ˜ˆμ™Έλ‘œ μƒμ„±μž 첫쀄에 this(...)λ₯Ό μ‚¬μš©ν•  μˆ˜λŠ” μžˆλ‹€. ν•˜μ§€λ§Œ super(...)λŠ” μžμ‹μ˜ μƒμ„±μž μ•ˆμ—μ„œ μ–Έμ  κ°€λŠ” λ°˜λ“œμ‹œ ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€.
  • λΆ€λͺ¨ 클래슀의 μƒμ„±μžκ°€ κΈ°λ³Έ μƒμ„±μžμΈ κ²½μš°μ—λŠ” super()λ₯Ό μƒλž΅ν•  수 μžˆλ‹€.

    • 상속 κ΄€κ³„μ—μ„œ 첫쀄에 super(...)λ₯Ό μƒλž΅ν•˜λ©΄ μžλ°”λŠ” λΆ€λͺ¨μ˜ κΈ°λ³Έ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λŠ” super()λ₯Ό μžλ™μœΌλ‘œ λ§Œλ“€μ–΄μ€€λ‹€.

πŸ’­ μ˜€λŠ˜μ€ νŠœν„°λ‹˜κ»˜ κ·Έλ™μ•ˆ κΆκΈˆν–ˆλ˜ 것듀을 μ§ˆλ¬Έν•˜λŠ” 라이브 Q&A μ‹œκ°„μ„ κ°€μ‘Œλ‹€. ν˜„μž¬ 상황에 λŒ€ν•œ 두렀움과 걱정이 λ§Žμ•˜λŠ”λ° 결둠은 처음 κ²°μ‹¬ν–ˆλ˜ λ§ˆμŒκ°€μ§ κ·ΈλŒ€λ‘œ μ­‰ κ°€λŠ” 것이닀. μ·¨μ—…, 개발 무엇이든 κΎΈμ€€νžˆ μ—΄μ‹¬νžˆ ν•˜μž.

profile
μ•ˆλ…•ν•˜μ„Έμš” :)

0개의 λŒ“κΈ€