πŸ’ΎJAVA 클래슀의 상속과 μƒμ„±μž

lyju777Β·2024λ…„ 4μ›” 5일

ν΄λž˜μŠ€μ™€ μƒμ„±μž(Constructor)

클래슀의 μƒμ„±μžλž€?

객체가 생성될 λ•Œ μžλ™μœΌλ‘œ ν˜ΈμΆœλ˜λŠ” λ©”μ„œλ“œλ‘œ λ°˜ν™˜κ°’μ΄ μ—†μœΌλ©° 클래슀의 멀버 λ³€μˆ˜ μ΄ˆκΈ°ν™”λ₯Ό λ‹΄λ‹Ήν•œλ‹€.
μ‰½κ²Œ λ§ν•˜μžλ©΄ ν΄λž˜μŠ€μ™€ 이름이 λ™μΌν•œ λ©”μ„œλ“œλΌκ³  ν•  수 μžˆλ‹€.

μƒμ„±μžκ°€ ν˜ΈμΆœλ λ•Œ μ‹€ν–‰λ˜λŠ” μˆœμ„œλŠ” λ‹€μŒκ³Ό κ°™λ‹€.
1. μƒμ„±μž 호좜
2. μΈμŠ€ν„΄μŠ€ 생성

클래슀λͺ… λ³€μˆ˜λͺ… = new클래슀λͺ…(νŒŒλΌλ―Έν„°);

λ³€μˆ˜λͺ….λ©”μ„œλ“œλͺ…();

상속과 μƒμ„±μž 호좜 μˆœμ„œ

클래슀의 상속(Inheritance)μ΄λž€?

객체의 λ³€μˆ˜μ™€ λ©”μ„œλ“œλ₯Ό λ‹€λ₯Έ 객체가 λ¬Όλ €λ°›λŠ” κ²ƒμœΌλ‘œ μžμ‹ 클래슀λ₯Ό μƒμ„±ν•˜λ©΄ 무쑰건 λΆ€λͺ¨ 클래슀의 μƒμ„±μžλ₯Ό μ‹€ν–‰ν•œ 후에 μžμ‹ 클래슀의 μƒμ„±μžλ₯Ό μ‹€ν–‰ν•΄μ•Ό ν•œλ‹€.

class λΆ€λͺ¨_클래슀λͺ…{
}

class μžμ‹_클래슀λͺ… extends λΆ€λͺ¨_클래슀λͺ…{
}

λΆ€λͺ¨ μžμ‹κ°„ μƒμ„±μž 호좜 μˆœμ„œ

만일 λΆ€λͺ¨ 클래슀의 μƒμ„±μžκ°€ 호좜될 κ²½μš°μ—λŠ” λΆ€λͺ¨ν΄λž˜μŠ€ μƒμ„±μžλ§Œ ν˜ΈμΆœν•˜λ©΄ λœλ‹€.
μžμ‹ μƒμ„±μž ν˜ΈμΆœμ‹œ ---> λΆ€λͺ¨ μƒμ„±μž ν˜ΈμΆœβœ…
λΆ€λͺ¨ μƒμ„±μž ν˜ΈμΆœμ‹œ ---> μžμ‹ μƒμ„±μž 호좜❌

❗ λΆ€λͺ¨ λ˜λŠ” μžμ‹ ν΄λž˜μŠ€μ— μƒμ„±μžκ°€ μ—†λ‹€λ©΄ κ·ΈλŒ€λ‘œ μƒλž΅ν•˜λ©΄ λœλ‹€.(skip)

❗ μƒμ„±μžμ˜ νŒŒλΌλ―Έν„° μœ λ¬΄μ— 따라 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜κ²Œ λœλ‹€.
(νŒŒλΌλ―Έν„°κ°€ μžˆμ„κ²½μš°μ—λŠ” νŒŒλΌλ―Έν„°κ°€ μžˆλŠ” μƒμ„±μžλ₯Ό 호좜 / μ—†λ‹€λ©΄ μ—†λŠ” μƒμ„±μžλ₯Ό 호좜)

super()

μžμ‹ μƒμ„±μž 내에 super()ν‚€μ›Œλ“œκ°€ μžˆμ„ 경우 μ΄λŠ” μ–΄λ–€ λΆ€λͺ¨ 클래슀의 μƒμ„±μž 인지λ₯Ό μ§€μ •ν•΄μ£ΌλŠ” 의미둜 λΆ€λͺ¨ν΄λž˜μŠ€ === super() 둜 같은 의미둜 이해할 수 μžˆλ‹€.

❗ super()ν΄λž˜μŠ€λ„ λ™μΌν•˜κ²Œ μƒμ„±μžμ˜ νŒŒλΌλ―Έν„° μœ λ¬΄μ— 따라 ν˜ΈμΆœν•˜κ²Œ λœλ‹€.

❗ 만일 μžμ‹ν΄λž˜μŠ€μ—μ„œ super()ν΄λž˜μŠ€κ°€ μ—†λ‹€κ³  ν•˜λ”λΌλ„ μ΄λŠ” μ½”λ“œμƒ μƒλž΅λœ 것이며 νŒŒλΌλ―Έν„°κ°€ μ—†λŠ” λΆ€λͺ¨ν΄λž˜μŠ€ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λ©΄ λœλ‹€.
μžμ‹ν΄λž˜μŠ€μ˜ μƒμ„±μžλ₯Ό ν˜ΈμΆœν• λ•Œ λΆ€λͺ¨ν΄λž˜μŠ€λ₯Ό λ¨Όμ € ν˜ΈμΆœν•˜κ²Œ λ˜λŠ” μ΄μœ κ°€ 이 λ•Œλ¬Έμ΄λ‹€.

// λΆ€λͺ¨ 클래슀
class Parent {

    // μƒμ„±μž
    Parent() {
        System.out.println("ν˜ΈμΆœλ κΉŒμš”");
    }

    // μƒμ„±μž
    Parent(int a) {
        System.out.println("Parent 클래슀의 μƒμ„±μžκ°€ ν˜ΈμΆœλ˜μ—ˆμŠ΅λ‹ˆλ‹€.");
    }
}

// μžμ‹ 클래슀
class Child extends Parent {
    int childValue;

    // μƒμ„±μž
    Child() {
        super(parentValue); // λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” λΆ€λͺ¨ 클래슀의 μƒμ„±μž 호좜
        System.out.println("Child 클래슀의 μƒμ„±μžκ°€ ν˜ΈμΆœλ˜μ—ˆμŠ΅λ‹ˆλ‹€.");
    }
}

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

μœ„ μ½”λ“œμ—μ„œμ™€ 같이 super(parentValue) λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜μ˜€κΈ° λ•Œλ¬Έμ—
좜λ ₯값은 λ‹€μŒκ³Ό 같이 좜λ ₯λœλ‹€.

❗ println :κ°œν–‰λ˜μ–΄ 좜λ ₯
❗ print : κ°œν–‰λ˜μ§€ μ•Šκ³  μ΄μ–΄μ„œ 좜λ ₯

Parent 클래슀의 μƒμ„±μžκ°€ ν˜ΈμΆœλ˜μ—ˆμŠ΅λ‹ˆλ‹€.
Child 클래슀의 μƒμ„±μžκ°€ ν˜ΈμΆœλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μ˜€λ²„λΌμ΄λ”©κ³Ό μ˜€λ²„λ‘œλ”©

β­μ˜€λ²„λΌμ΄λ”©(Overriding)

ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ μƒμœ„ 클래슀의 λ§€μ„œλ“œλ₯Ό μž¬μ •μ˜ ν•  수 μžˆλŠ” κΈ°λŠ₯

class λΆ€λͺ¨_클래슀λͺ…{
 public λ°˜ν™˜_μžλ£Œν˜• λ©”μ„œλ“œλͺ…(μžλ£Œν˜• λ³€μˆ˜λͺ…){ 
 }
}

class μžμ‹_클래슀λͺ… extends λΆ€λͺ¨_클래슀λͺ…{
 public λ°˜ν™˜_μžλ£Œν˜• λ©”μ„œλ“œλͺ…(μžλ£Œν˜• λ³€μˆ˜λͺ…){  //λΆ€λͺ¨ 클래슀의 λ©”μ„œλ“œλͺ…κ³Ό λ§€κ°œλ³€μˆ˜κ°€ 동일해야 ν•œλ‹€.
 }	
}

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

λ™μΌν•œ μ΄λ¦„μ˜ λ©”μ„œλ“œλ₯Ό λ§€κ°œλ³€μˆ˜λ§Œ λ‹€λ₯΄κ²Œ ν•˜μ—¬ μ—¬λŸ¬κ°œλ₯Ό μ •μ˜ν•  수 μžˆλŠ” κΈ°λŠ₯
단 λ§€κ°œλ³€μˆ˜μ˜ κ°―μˆ˜μ™€ νƒ€μž…μ€ 달라야 ν•œλ‹€.


κ·Έμ™Έ μš”μ•½

  1. static의 λ°˜ν™˜κ°’μ€ staticμ΄μ—¬λ§Œ ν•œλ‹€.

  2. static은 μ½”λ“œ μ‹€ν–‰μ‹œ λ¨Όμ € λ©”λͺ¨λ¦¬μ— ν• λ‹Ήλ˜κ²Œ 됨

  3. λΆ€λͺ¨_ν΄λž˜μŠ€μ™€ μžμ‹_ν΄λž˜μŠ€μ— λ™μΌν•œ μ΄λ¦„μ˜ λ©”μ„œλ“œκ°€ μžˆλ‹€λ©΄ μžμ‹_클래슀의 λ©”μ„œλ“œλ§Œ 호좜(μ˜€λ²„λΌμ΄λ”© 관계)

  4. λ³€μˆ˜μ„ μ–Έ ν›„ 값을 ν• λ‹Ήν•  μ‹œ 값은 String Pool에 μ €μž₯되고 λ‹€λ₯Έ λ³€μˆ˜μž„μ—λ„ 같은 값을 κ°€μ§€κ³  μžˆμ„ μ‹œ μ΄λŠ” λ™μΌν•œ μ£Όμ†Œκ°’μ„ κ°™κ²Œ λœλ‹€.

  5. newλ₯Ό μ‚¬μš©ν•˜μ—¬ λ³€μˆ˜ μ„ μ–Έμ‹œ μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λ˜κ³  μ΄λŠ” String Poolκ³Ό λ³„λ„μ˜ 곡간에 μ €μž₯λœλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— String Pool에 μ €μž₯된 κ°’κ³Ό newν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄ μƒμ„±λœ μΈμŠ€ν„΄μŠ€μ˜ 값이 같더라도 μ£Όμ†Œκ°’μ΄ λ‹€λ₯΄λ‹€.
    λΉ„κ΅μ—°μ‚°μž == 은 μ£Όμ†Œκ°’μ„ 비ꡐ equals()λŠ” 같은 κ°’μΈμ§€λ§Œ λΉ„κ΅ν•œλ‹€.

profile

0개의 λŒ“κΈ€