728x90

πŸ‘‰μƒμ†μ΄λž€?

  • μƒˆλ‘œμš΄ 클래슀λ₯Ό μ •μ˜ ν•  λ•Œ 이미 κ΅¬ν˜„λœ 클래슀λ₯Ό 상속(inheritance) λ°›μ•„μ„œ μ†μ„±μ΄λ‚˜ κΈ°λŠ₯을 ν™•μž₯ν•˜μ—¬ 클래슀λ₯Ό κ΅¬ν˜„ν•¨
  • 이미 κ΅¬ν˜„λœ ν΄λž˜μŠ€λ³΄λ‹€ 더 ꡬ체적인 κΈ°λŠ₯을 κ°€μ§„ 클래슀λ₯Ό κ΅¬ν˜„ν•΄μ•Ό ν• λ•Œ κΈ°μ‘΄ 클래슀λ₯Ό 상속함

μƒμ†ν•˜λŠ” 클래슀 : μƒμœ„ 클래슀, parent class, base class, super class
μƒμ†λ°›λŠ” 클래슀 : ν•˜μœ„ 클래슀, child class, derived class, subclass

πŸ‘‰μƒμ† 문법

class b extends a{
//aκ°€ bλ₯Ό μƒμ†ν•œλ‹€
}

πŸ‘‰μƒμ†μ„ κ΅¬ν˜„ν•˜λŠ” 경우

  • μƒμœ„ ν΄λž˜μŠ€λŠ” ν•˜μœ„ 클래슀 보닀 더 일반적인 κ°œλ…κ³Ό κΈ°λŠ₯을 κ°€μ§„λ‹€.
  • ν•˜μœ„ ν΄λž˜μŠ€λŠ” μƒμœ„ 클래슀 보닀 더 ꡬ체적인 κ°œλ…κ³Ό κΈ°λŠ₯을 κ°€μ§„λ‹€.
  • ν•˜μœ„ ν΄λž˜μŠ€κ°€ μƒμœ„ 클래슀의 속성과 κΈ°λŠ₯을 ν™•μž₯ (extends)ν•œλ‹€λŠ” μ˜λ―Έμ΄λ‹€.

πŸ‘‰μ˜ˆμ œλ‘œ 동물을 μƒμœ„ν΄λž˜μŠ€λ‘œ 두고 상속 λ°›λŠ” λ‹€λ₯Έν΄λž˜μŠ€λ₯Ό λ§Œλ“€μ–΄λ³΄μž

μƒμœ„ν΄λž˜μŠ€μΈ 동물 클래슀λ₯Ό λ§Œλ“ λ‹€.

1
2
3
4
5
6
7
public class Animal {
    String name;
 
    public void setName(String name) {
        this.name = name;
    }
}
cs

 

DogλΌλŠ” animalν•˜μœ„ν΄λž˜μŠ€λ₯Ό ν•˜λ‚˜ λ§Œλ“ λ‹€.

 

1
2
3
4
5
6
7
8
9
public class Dog extends Animal {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.setName("poppy");
        System.out.println(dog.name);
    }
}
 
 
cs

 

싀행해보면 "poppy"λΌλŠ”  λ¬Έμžμ—΄μ΄ 좜λ ₯λœλ‹€.

1
2
3
4
5
6
7
8
9
10
11
12
public class Dog extends Animal {
    public void sleep() {
        System.out.println(this.name+" zzz");
    }
 
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.setName("poppy");
        System.out.println(dog.name);
        dog.sleep();
    }
}
cs

Dogν΄λž˜μŠ€μ— sleepμ΄λΌλŠ” λ©”μ†Œλ“œλ₯Ό μΆ”κ°€ν•˜μ˜€λ‹€.

이제 Dog ν΄λž˜μŠ€λŠ” Animal ν΄λž˜μŠ€λ³΄λ‹€ μ’€ 더 λ§Žμ€ κΈ°λŠ₯(sleepλ©”μ†Œλ“œκ°€ μΆ”κ°€λ˜μ—ˆλ‹€.)을 κ°€μ§€κ²Œ λ˜μ—ˆλ‹€. 이렇듯 보톡 λΆ€λͺ¨ 클래슀λ₯Ό 상속받은 μžμ‹ ν΄λž˜μŠ€λŠ” λΆ€λͺ¨ 클래슀의 κΈ°λŠ₯에 λ”ν•˜μ—¬ μ’€ 더 λ§Žμ€ κΈ°λŠ₯을 갖도둝 μ„€κ³„ν•œλ‹€.

 

πŸ‘‰IS-A 관계

Dogν΄λž˜μŠ€λŠ” Animal클래슀λ₯Ό μƒμ†λ°›μ•˜λ‹€. 즉, DogλŠ” Animal의 ν•˜μœ„ κ°œλ…μ΄λΌκ³  ν•  수 μžˆκ² λ‹€. 이런 경우 DogλŠ” Animal에 ν¬ν•¨λ˜κΈ° λ•Œλ¬Έμ— "κ°œλŠ” 동물이닀"라고 ν‘œν˜„ν•  수 μžˆλ‹€. 

μžλ°”λŠ” μ΄λŸ¬ν•œ 관계λ₯Ό IS-A 관계라고 ν‘œν˜„ν•œλ‹€. 즉 "Dog is a Animal" κ³Ό 같이 말할 수 μžˆλŠ” 관계λ₯Ό IS-A 관계라고 ν•œλ‹€.

κ·ΈλŸ¬λ‚˜ λΆ€λͺ¨ 클래슀둜 λ§Œλ“€μ–΄μ§„ 객체λ₯Ό μžμ‹ 클래슀의 μžλ£Œν˜•μœΌλ‘œλŠ” μ‚¬μš©ν•  수 μ—†λ‹€.

Dog dog = new Animal();  

μ΄λ ‡κ²Œ μ‚¬μš©ν•˜λ©΄ 컴파일 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

 

πŸ‘‰λ©”μ†Œλ“œ μ˜€λ²„λΌμ΄λ”© (Method overriding) ->μƒμœ„ ν΄λž˜μŠ€κ°€ κ°€μ§€κ³  μžˆλŠ” λ©”μ„œλ“œλ₯Ό ν•˜μœ„ ν΄λž˜μŠ€κ°€ μž¬μ •μ˜ν•΄μ„œ μ‚¬μš©

λ©”μ†Œλ“œ μ˜€λ²„λΌμ΄λ”©μ΄λž€?

 

  • μ˜€λ²„λΌμ΄λ”©(overriding)μ΄λž€ 상속 관계에 μžˆλŠ” λΆ€λͺ¨ ν΄λž˜μŠ€μ—μ„œ 이미 μ •μ˜λœ λ©”μ†Œλ“œλ₯Ό μžμ‹ ν΄λž˜μŠ€μ—μ„œ 같은 μ‹œκ·Έλ‹ˆμ³λ₯Ό κ°–λŠ” λ©”μ†Œλ“œλ‘œ λ‹€μ‹œ μ •μ˜ν•˜λŠ” 것이라고 ν•  수 μžˆλ‹€.
  • μžλ°”μ—μ„œ μžμ‹ ν΄λž˜μŠ€λŠ” λΆ€λͺ¨ 클래슀의 private 멀버λ₯Ό μ œμ™Έν•œ λͺ¨λ“  λ©”μ†Œλ“œλ₯Ό μƒμ†λ°›λŠ”λ‹€.
  • μ΄λ ‡κ²Œ 상속받은 λ©”μ†Œλ“œλŠ” κ·ΈλŒ€λ‘œ μ‚¬μš©ν•΄λ„ 되고, ν•„μš”ν•œ λ™μž‘μ„ μœ„ν•΄ μž¬μ •μ˜ν•˜μ—¬ μ‚¬μš©ν•  μˆ˜λ„ μžˆλ‹€.
  • 즉, λ©”μ†Œλ“œ μ˜€λ²„λΌμ΄λ”©μ΄λž€ 상속받은 λΆ€λͺ¨ 클래슀의 λ©”μ†Œλ“œλ₯Ό μž¬μ •μ˜ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.

μ˜€λ²„λΌμ΄λ”©μ˜ 쑰건

  • μ˜€λ²„λΌμ΄λ”©μ΄λž€ λ©”μ†Œλ“œμ˜ λ™μž‘λ§Œμ„ μž¬μ •μ˜ν•˜λŠ” κ²ƒμ΄λ―€λ‘œ, λ©”μ†Œλ“œμ˜ μ„ μ–ΈλΆ€λŠ” κΈ°μ‘΄ λ©”μ†Œλ“œμ™€ μ™„μ „νžˆ κ°™μ•„μ•Ό ν•©λ‹ˆλ‹€.
  • ν•˜μ§€λ§Œ λ©”μ†Œλ“œμ˜ λ°˜ν™˜ νƒ€μž…μ€ λΆ€λͺ¨ 클래슀의 λ°˜ν™˜ νƒ€μž…μœΌλ‘œ νƒ€μž… λ³€ν™˜ν•  수 μžˆλŠ” νƒ€μž…μ΄λΌλ©΄ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • λΆ€λͺ¨ 클래슀의 λ©”μ†Œλ“œλ³΄λ‹€ μ ‘κ·Ό μ œμ–΄μžλ₯Ό 더 쒁은 λ²”μœ„λ‘œ λ³€κ²½ν•  수 μ—†μŠ΅λ‹ˆλ‹€
  • λΆ€λͺ¨ 클래슀의 λ©”μ†Œλ“œλ³΄λ‹€ 더 큰 λ²”μœ„μ˜ μ˜ˆμ™Έλ₯Ό μ„ μ–Έν•  수 μ—†μŠ΅λ‹ˆλ‹€.

πŸ‘‰λ©”μ†Œλ“œ μ˜€λ²„λ‘œλ”© (Method overloading) ->같은 μ΄λ¦„μ˜ λ©”μ„œλ“œ μ—¬λŸ¬κ°œλ₯Ό κ°€μ§€λ©΄μ„œ λ§€κ°œλ³€μˆ˜μ˜ μœ ν˜•κ³Ό κ°œμˆ˜κ°€ λ‹€λ₯΄λ„둝 ν•˜λŠ” 기술

   λ©”μ†Œλ“œ μ˜€λ²„λ‘œλ”©μ΄λž€ ?

  • λ©”μ†Œλ“œ μ˜€λ²„λ‘œλ”©(overloading)μ΄λž€ κ°™μ€ μ΄λ¦„μ˜ λ©”μ†Œλ“œλ₯Ό μ€‘λ³΅ν•˜μ—¬ μ •μ˜ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.
  • μžλ°”μ—μ„œλŠ” μ›λž˜ ν•œ 클래슀 내에 같은 μ΄λ¦„μ˜ λ©”μ†Œλ“œλ₯Ό λ‘˜ 이상 κ°€μ§ˆ 수 μ—†λ‹€.
  • ν•˜μ§€λ§Œ λ§€κ°œλ³€μˆ˜μ˜ κ°œμˆ˜λ‚˜ νƒ€μž…μ„ λ‹€λ₯΄κ²Œ ν•˜λ©΄, ν•˜λ‚˜μ˜ μ΄λ¦„μœΌλ‘œ λ©”μ†Œλ“œλ₯Ό μž‘μ„±ν•  수 μžˆλ‹€.
  • 즉, λ©”μ†Œλ“œ μ˜€λ²„λ‘œλ”©μ€ μ„œλ‘œ λ‹€λ₯Έ μ‹œκ·Έλ‹ˆμ²˜λ₯Ό κ°–λŠ” μ—¬λŸ¬ λ©”μ†Œλ“œλ₯Ό κ°™μ€ μ΄λ¦„μœΌλ‘œ μ •μ˜ν•˜λŠ” 것이라고 ν•  수 μžˆλ‹€.
  • μ΄λŸ¬ν•œ λ©”μ†Œλ“œ μ˜€λ²„λ‘œλ”©μ„ μ‚¬μš©ν•¨μœΌλ‘œμ¨ λ©”μ†Œλ“œμ— μ‚¬μš©λ˜λŠ” μ΄λ¦„을 μ ˆμ•½ν•  수 μžˆλ‹€.
  • λ˜ν•œ, λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ 전달해야 ν•  λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž…μ΄λ‚˜ κ°œμˆ˜μ— λŒ€ν•΄ 크게 신경을 μ“°μ§€ μ•Šκ³  ν˜ΈμΆœν•  수 있게 λœλ‹€.
  • λ©”μ†Œλ“œ μ˜€λ²„λ‘œλ”©μ€ 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ νŠΉμ§• 쀑 ν•˜λ‚˜μΈ λ‹€ν˜•μ„±(polymorphism)을 κ΅¬ν˜„ν•˜λŠ” 방법 쀑 ν•˜λ‚˜μ΄λ‹€.

 λ©”μ†Œλ“œ μ˜€λ²„λ‘œλ”©μ˜ 쑰건

  • λ©”μ†Œλ“œμ˜ 이름이 κ°™μ•„μ•Ό ν•œλ‹€.
  • λ©”μ†Œλ“œμ˜ μ‹œκ·Έλ‹ˆμ²˜, 즉 λ§€κ°œλ³€μˆ˜μ˜ 개수 λ˜λŠ” νƒ€μž…μ΄ 달라야 ν•œλ‹€.

 

 

Reference

 

 

728x90