23. Back-end/23. JAVA

상속(Inherit,extends,ν™•μž₯),μ˜€λ²„λΌμ΄λ”©, μΈν„°νŽ˜μ΄μŠ€,μΆ”μƒν΄λž˜μŠ€μ™€ μΆ”μƒλ©”μ„œλ“œ, λ‹€ν˜•μ„±(polymoph)

keemzeehae 2022. 1. 8. 00:48

 

상속(Inherit,extends,ν™•μž₯)

- λΆ€λͺ¨λ‘œλΆ€ν„° μžμ‹μ—κ²Œ 상속

- λΆ€λͺ¨ν΄λž˜μŠ€ (super class)의 멀버듀을 μžμ‹ν΄λž˜μŠ€ (child class)μ—μ„œ

μžκΈ°κ°€ μ„ μ–Έν•œ κ²ƒμ²˜λŸΌ μ‚¬μš©ν•˜λ € ν•˜λŠ” 것 

- μž¬μ‚¬μš©μ„± 

- ν΄λž˜μŠ€κ°„μ˜ κ³΅ν†΅μš”μ†Œ (멀버)κ°€ μžˆλ‹€λ©΄ κ³΅ν†΅μš”μ†Œλ₯Ό

λΆ€λͺ¨ν΄λž˜μŠ€λ‘œ μž‘μ„± ν›„ μžμ‹ν΄λž˜μŠ€κ°€ 상속(ν™•μž₯) ν•΄μ„œ μ‚¬μš© 

- javaλŠ” 단일 μƒμ†λ§Œ ν—ˆμš©

 

상속을 ν•˜λ©΄μ„œ μ–»λŠ” 것

1. κ³΅ν†΅μš”μ†Œλ₯Ό μž¬ν™œμš©(좔상화)

2. classκ°„μ˜ 관계λ₯Ό μ„€μ •

3. μƒμ„±μžλŠ” μ œμ™Έ

 

상속 μ‚¬μš©λ²•

public class μžμ‹ν΄λž˜μŠ€λͺ… extends  λΆ€λͺ¨ν΄λž˜μŠ€λͺ… { }

public class SuperCalss { }

public class ChildClass extends SuperCalss { }

 

μˆ˜μ§μ μœΌλ‘œλŠ” 관계가 μžˆμ§€λ§Œ

μˆ˜ν‰ μžμ‹λΌλ¦¬λŠ” 관계가 μ—†μŒ


 

μ°Έμ‘°λ³€μˆ˜ super,super()

μƒμ†λ³΄λ‹€λŠ” ν™•μž₯의 κ°œλ…μœΌλ‘œ 이해λ₯Ό 해야함

μžμ‹ν΄λž˜μŠ€μ˜ 객체λ₯Ό 생성할 λ•Œ λΆ€λͺ¨κ°μ²΄λ₯Ό μƒμ„±ν•˜κ³  λΆ€λͺ¨κ°μ²΄λ₯Ό ν™•μž₯ν•΄μ„œ μžμ‹ μ˜ 객체λ₯Ό 생성

 

1. super()

 - μžμ‹μ˜ μƒμ„±μž λ‚΄μ—μ„œ μ‚¬μš© 

 - λΆ€λͺ¨μ˜ μƒμ„±μžλ₯Ό 호좜, μƒλž΅ κ°€λŠ₯

 - μƒμ„±μžμ— 첫쀄에 μœ„μΉ˜, this() super() λ₯Ό 같이 μ“Έ 수 μ—†μŒ

(λ‘˜λ‹€ 첫쀄에 μœ„μΉ˜ν•΄μ•Ό ν•˜λŠ”λ° 같이 μ“°λ©΄ ν•˜λ‚˜λŠ” 무쑰건 μ•„λž˜ μžˆμ„ ν…Œλ‹ˆκΉŒ 같이 μ“Έ 수 μ—†μŒ)

 

 

2. μ°Έμ‘°λ³€μˆ˜ super

 - λΆ€λͺ¨κ°μ²΄μ˜ μ£Όμ†Œλ₯Ό λ‹΄κ³  μžˆλŠ” μ°Έμ‘°λ³€μˆ˜ 

 - λΆ€λͺ¨μ˜ λ©€λ²„λ³€μˆ˜, λ©€λ²„λ©”μ„œλ“œ μ‚¬μš© 

 

μΆ”μƒν΄λž˜μŠ€μ™€ μΆ”μƒλ©”μ„œλ“œ

 

1. μΆ”μƒν΄λž˜μŠ€ 

- μ™„μ„±λ˜μ§€ μ•Šμ€ 클래슀

- 객체 생성 X

- 상속(ν™•μž₯)ν•΄μ„œ μ™„μ„±μ‹œμΌœμ„œ μ‚¬μš©ν•΄λΌ 

- λ°μ΄ν„°νƒ€μž…μœΌλ‘œ 선언은 κ°€λŠ₯

- 일반(κ΅¬ν˜„) 클래슀처럼 λ©€λ²„λ³€μˆ˜, λ©€λ²„λ©”μ„œλ“œ , μƒμ„±μž, μΆ”μƒλ©”μ„œλ“œλ₯Ό κ°€μ§ˆ 수 있음

- 클래슀 내에 ν•œκ°œ μ΄μƒμ˜ 좔상 λ©”μ„œλ“œκ°€ 있으면 ν•΄λ‹Ή ν΄λž˜μŠ€λŠ” μΆ”μƒν΄λž˜μŠ€ μ„ μ–Έ

 

μ‚¬μš©λ²•

μ ‘κ·Όμ§€μ •μž abstract 클래슀λͺ… { } 

 

2. μΆ”μƒλ©”μ„œλ“œ

- μ™„μ„±λ˜μ§€ μ•Šμ€ λ©”μ„œλ“œ

- λ©”μ„œλ“œμ˜ μ„ μ–ΈλΆ€ (header)만 μžˆλŠ” λ©”μ„œλ“œλ₯Ό μΆ”μƒλ©”μ„œλ“œλΌκ³  함

 

μ‚¬μš©λ²•

μ ‘κ·Όμ§€μ •μž abstract λ©”μ„œλ“œλͺ…( );

μ ‘κ·Όμ§€μ •μž λ©”μ„œλ“œλͺ…()->λ©”μ„œλ“œμ˜ ν—€λ“œ // { }-> λ©”μ„œλ“œμ˜ λ°”λ””


μ˜€λ²„λΌμ΄λ”©(OverRiding)

μ˜€λ²„λ‘œλ”©κ³Ό ν—·κ°ˆλ¦¬μ§€ 말기!(μ˜€λ²„λΌμ΄λ”©κ³Ό μ˜€λ²„λ‘œλ”©μ˜ 차이점 μ•Œμ•„λ‘κΈ°)

 

- 상속받은 λΆ€λͺ¨μ˜ λ©”μ„œλ“œλ₯Ό 자기 μžμ‹ μ— 맞게 λ‚΄μš©μ„ μž¬μ •μ˜ ν•˜λŠ” 것 

- λ©”μ„œλ“œμ˜ μ„ μ–ΈλΆ€λŠ” λ™μΌν•˜κ²Œ μ„ μ–Έ(μˆ˜μ •x)

- 단, μ ‘κ·Όμ§€μ •μžλŠ” λ²”μœ„κ°€ κ°™κ±°λ‚˜ 더 λ„“κ²Œ μˆ˜μ • κ°€λŠ₯

(더 μ’κ²ŒλŠ” λΆˆκ°€λŠ₯ public->private x)

 

μΈν„°νŽ˜μ΄μŠ€(interface)

- μΆ”μƒν΄λž˜μŠ€μ™€ λΉ„μŠ·

- μΆ”μƒν΄λž˜μŠ€λ³΄λ‹€ 더 좔상화가 μ‹¬ν•œκ²ƒ

- μΌμ’…μ˜ 좔상 클래슀

- μƒμˆ˜(λ³€ν•˜μ§€ μ•ŠλŠ”μˆ˜)와 μΆ”μƒλ©”μ„œλ“œλ₯Ό λ©€λ²„λ‘œ 가짐 

- 객체 생성 X

- κ΅¬ν˜„(implements) ν•΄μ„œ μ˜€λ²„λΌμ΄λ”©(μž¬μ •μ˜) ν•˜λΌλŠ” μ†Œλ¦¬

- λ©”μ„œλ“œ μ΄λ¦„μ˜ ν‘œμ€€ν™”

- 관계가 μ—†λŠ” ν΄λž˜μŠ€κ°„μ— 관계λ₯Ό λ§Ίμ–΄ 쀄 λ•Œ μ‚¬μš©

- μΈν„°νŽ˜μ΄μŠ€λŠ” λ‹€λ₯Έ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속 κ°€λŠ₯(μΈν„°νŽ˜μ΄μŠ€λΌλ¦¬)

- μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„μ€ λ‹€μ€‘κ΅¬ν˜„μ΄ κ°€λŠ₯

 

μ‚¬μš©λ²•

1. μΈν„°νŽ˜μ΄μŠ€ μ„ μ–Έ

public interface μΈν„°νŽ˜μ΄μŠ€λͺ… extends 상속받을 μΈν„°νŽ˜μ΄μŠ€λͺ…{

-μΈν„°νŽ˜μ΄μŠ€λͺ…은 ν΄λž˜μŠ€μ™€ 같이 μ²«κΈ€μžλŠ” λŒ€λ¬Έμžλ‘œ μ μ–΄μ£Όμ„Έμš”.

  //μƒμˆ˜

  //μΆ”μƒλ©”μ„œλ“œ

  //μ ‘κ·Όμ§€μ •μžλŠ” 무쑰건 public abstract

  public abstract λ¦¬ν„΄νƒ€μž… λ©”μ„œλ“œλͺ… ([λ§€κ°œλ³€μˆ˜ μ„ μ–Έ]);

  //publicμ΄λ‚˜ abstract은 μƒλž΅ κ°€λŠ₯

 

public abstract void t1(); -> 정석

int t2 (String name); -> 이거 μΈν„°νŽ˜μ΄μŠ€ μ„ μ–Έ public abstractμƒλž΅ν•œκ²ƒ

public void t3(); //public abstract void t3(); 와 κ°™μŒ

abstract void t4 () ; // public abstract void t4(); 와 κ°™μŒ

 

}

 

 

2. κ΅¬ν˜„ν΄λž˜μŠ€μ—μ„œ μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„

 

public class 클래슀λͺ… implements μΈν„°νŽ˜μ΄μŠ€λͺ…1, μΈν„°νŽ˜μ΄μŠ€λͺ…2, ...{

 

}

 

μΈν„°νŽ˜μ΄μŠ€ μ—¬λŸ¬κ°œ λ™μ‹œ κ΅¬ν˜„ κ°€λŠ₯

 

 


λ‹€λ₯Έ 클래슀의 멀버λ₯Ό λ‚΄κ°€ μ„ μ–Έν•œ λ©€λ²„μ²˜λŸΌ μ‚¬μš©ν•˜κ³  μ‹Άμ„λ•Œ

방법 

1. 상속

     μžμ‹ν΄λž˜μŠ€λͺ… is  a  λΆ€λͺ¨ν΄λž˜μŠ€λͺ…

 2. λ©€λ²„λ³€μˆ˜ μ„ μ–Έ

    μžμ‹ν΄λž˜μŠ€λͺ… has a λΆ€λͺ¨ν΄λž˜μŠ€λͺ…

 

λ‹€ν˜•μ„±(Polymoph)

- ν˜•νƒœκ°€ λ‹€μ–‘ν•˜λ‹€

- λ°μ΄ν„°νƒ€μž…μ΄ λ‹€μ–‘ν•˜λ‹€

- ν˜•λ³€ν™˜κ³Ό λΉ„μŠ·ν•œ κ°œλ…

1. 쑰건

  1) μƒμ†κ΄€κ³„μ—μ„œλ§Œ κ°€λŠ₯

  2) λΆ€λͺ¨μ™€ μžμ‹ κ°„μ˜ ν˜•λ³€ν™˜

    Magition is a Character 

(μžμ‹ν΄λž˜μŠ€ Magition /λΆ€λͺ¨ν΄λž˜μŠ€ Character)

    λ§ˆλ²•μ‚¬λŠ” 캐릭터이닀.

    λ§ˆλ²•μ‚¬ 데이터 νƒ€μž…μ€ 캐릭터 데이터 νƒ€μž…μ΄λ‹€

->  λ§ˆλ²•μ‚¬νƒ€μž…μ€ μΊλ¦­ν„°νƒ€μž…μ΄λ‹€.

 

public class Super( ){ }

public class Child extends Super( ){ }

public class Child2 extends Super( ){ }

Super super = new Child();

Super super = new Child2();

 

Child child = super;(X)

Child child = (Child)super;

 

2. Interface 도 λ‹€ν˜•μ„±μ— 포함 (λΆ€λͺ¨)

   public class Child implements Super{ }

   Super super = new Child( );

 


 

***마치 이런 λŠλ‚Œ

double avg = 3.12;

int num (int)avg; ν˜•λ³€ν™˜ (Cascading)

1. μžλ™ν˜•λ³€ν™˜ μž‘ -> 큰

2. κ°•μ œν˜•λ³€ν™” 큰 -> μž‘

primitive νƒ€μž…λΌλ¦¬λ§Œ ν˜•λ³€ν™˜ (booleanνƒ€μž…μ„ μ œμ™Έν™”κ³ )

 

Reference νƒ€μž…λΌλ¦¬ ν˜•λ³€ν™˜

 

 

 

 

/*

기둝용 λΈ”λ‘œκ·Έ μž…λ‹ˆλ‹€.

ν‹€λ¦° 뢀뢄이 있으면 λŒ“κΈ€λ‘œ λ‚¨κ²¨μ£Όμ„Έμš”.

κ°μ‚¬ν•©λ‹ˆλ‹€ : )

*/