πŸ‘©β€πŸŽ“κ³΅λΆ€-μžλ°” 상속

유령개·2021λ…„ 11μ›” 22일
0

μžλ°”

λͺ©λ‘ 보기
2/4
post-custom-banner


2μ£Όμ°¨μ—μ„œλŠ” μžλ°” 상속에 λŒ€ν•΄ κ³΅λΆ€ν•˜μ˜€λ‹€.
μžλ°”λŠ” λ‹€λ₯Έ 언어와 λ‹€λ₯΄κ²Œ λͺ‡κ°€μ§€ νŠΉμ§•μœΌλ‘œ ν”νžˆ λΆ„λ₯˜ν•΄ λ§ν•˜λŠ”λ°,

좔상화, μΊ‘μŠν™”, 상속, λ‹€ν˜•μ„±

이 κ·Έ νŠΉμ§•μ΄λ‹€. λ‚΄ λ‚˜λ¦„λŒ€λ‘œ 이 4가지 νŠΉμ§•μ— λŒ€ν•œ μ •μ˜λ₯Ό λ‚΄λ €λ³΄μ•˜λ‹€.


1.좔상화

μΆ”μƒν™”λž€ λΆˆν•„μš”ν•œ μ •λ³΄λŠ” 숨기고 ν•„μš”ν•œ μ •λ³΄λ§Œμ„ λ“€μ–΄λ‚΄λŠ” 것을 λœ»ν•œλ‹€.
κ³΅ν†΅μ˜ μ†μ„±μ΄λ‚˜ 이름을 λΆ™μ—¬ 정보λ₯Ό ν‘œμ‹œν•˜κΈ°λ„ ν•˜λŠ”λ°, 훗날에 λ‚˜μ˜¬ μΈν„°νŽ˜μ΄μŠ€μ— 좔상 λ©”μ†Œλ“œλΌλŠ” μΉœκ΅¬κ°€ μžˆλ‹€. 이 좔상 λ©”μ†Œλ“œλŠ” μ–΄λ–€ λŠλ‚Œμ΄λƒλ©΄

public abstract void method();

μ§„μ§œ 이 ν•œμ€„λ°–μ— μ—†λ‹€.
κ·Έλ‹ˆκΉŒ μΈν„°νŽ˜μ΄μŠ€μ—λŠ” 이 λ©”μ†Œλ“œλ₯Ό μ‹€ν–‰ μ‹œμΌœλ†“μ„κΊΌλž€κ±Έ μ•”μ‹œλ§Œ ν•˜κ³  μ§„μ§œ μ½”λ“œλŠ” 딴데 μ μ–΄λ‘λŠ”κ±΄λ°, μΆ”μƒν™”λž€ 이런 λŠλ‚Œμ΄λΌλŠ” 것을 μ•Œλ©΄ 될 것 κ°™λ‹€.

2.μΊ‘μŠν™”

κΈ°λŠ₯κ³Ό νŠΉμ„±μ˜ λͺ¨μŒμ„ ν΄λž˜μŠ€λΌλŠ” μΊ‘μŠμ— λ¬Άμ–΄λ‘λŠ”κ²ƒμ„ λœ»ν•œλ‹€.
개인적인 κ²½ν—˜μ΄μ§€λ§Œ 이 μΊ‘μŠν™”λΌλŠ” μž₯점은 μžλ°”λ‘œ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό κΎΈλ¦΄λ•Œ 많이 μ“°μ΄λŠ” 것 κ°™λ‹€. 예λ₯Ό λ“€μ–΄ AutoRegisterλΌλŠ” 둜그인 κ΄€λ ¨ ν΄λž˜μŠ€κ°€ μžˆλ‹€λ©΄ λ‹€λ₯Έ ν΄λž˜μŠ€μ—μ„œ 둜그인 κ΄€λ ¨ μ½”λ“œλ₯Ό λ‹€μ‹œ μ–ΈκΈ‰ν•  ν•„μš” 없이 이 클래슀만 κ°–λ‹€ μ“°λ©΄ λ˜κ² μ§€? μš”λŸ° λŠλ‚Œμ΄λ‹€.

3.상속

상속은 λΆ€λͺ¨κ°€ μžμ‹ν•œν…Œ 뭘 λ¬Όλ €μ£ΌλŠ”κ±°λ‹€.
말 κ·ΈλŒ€λ‘œ λΆ€λͺ¨ ν΄λž˜μŠ€μ— μžˆλŠ” κ±Έ μžμ‹ ν΄λž˜μŠ€μ—μ„œλ„ κ·ΈλŒ€λ‘œ μ‚¬μš©ν•  수 μžˆλŠ” κ±Έ λ§ν•œλ‹€.
μ•„λž˜μ— 문제둜 μ˜ˆμ‹œλ₯Ό μ μ–΄λ†¨μœΌλ‹ˆ μ°Έκ³ ν•˜λ©΄ 될 것 κ°™λ‹€.
μƒμ†ν•˜λŠ” 방법은 μžμ‹ 클래슀둜 μ‚¬μš©ν•  ν΄λž˜μŠ€μ— extends λΆ€λͺ¨ν΄λž˜μŠ€ λ₯Ό ν•˜λ©΄ λœλ‹€.
참고둜 μƒμ‚°μž 상속은 Super(); λ©”μ†Œλ“œ 상속은 Super.λ©”μ†Œλ“œμ΄λ¦„(); ν˜•μ‹μœΌλ‘œ μž‘μ„±ν•œλ‹€.

4.λ‹€ν˜•μ„±

λ‹€ν˜•μ„±μ΄λž€ 말 κ·ΈλŒ€λ‘œ μ—¬λŸ¬ 가지 ν˜•νƒœλ₯Ό κ°€μ§€λŠ” 것을 λ§ν•œλ‹€.
예λ₯Ό λ“€μ–΄ λΆ€λͺ¨ ν΄λž˜μŠ€μ— methodλž€ λ©”μ†Œλ“œκ°€ 있고 μžμ‹ ν΄λž˜μŠ€μ—λ„ methodλž€ λ©”μ†Œλ“œκ°€ μžˆμ„ λ•Œ λ§Œμ•½ μžμ‹ ν΄λž˜μŠ€μ—μ„œ methodλ₯Ό ν˜ΈμΆœν•˜κ²Œ λœλ‹€λ©΄ μ–΄λ–€ 일이 λ²Œμ–΄μ§€λŠ”κ°€?
이런 λŠλ‚Œμ˜ λ¬Έμ œκ°€ λ‹€ν˜•μ„±μ˜ 문제라고 μƒκ°ν•˜λ©΄ λœλ‹€.
λŒ€ν‘œμ μΈ λ‹€ν˜•μ„±μœΌλ‘œλŠ” μ˜€λ²„λ‘œλ”©κ³Ό μ˜€λ²„λΌμ΄λ”©μ΄ 있으며 λ‚˜μ€‘μ— μ‚¬μš©ν•˜κ²Œ 될 것 κ°™λ‹€.


문제

class Student {
  protected int number;
  public String name;
}

class GraduateStudent extends Student {
  private String tel;
  public String lab;
}

public class Test {
  public static void main(String[] args) {
    GraduateStudent s = new GraduateStudent();
  }
}

μœ„ μ†ŒμŠ€μ˜ s 객체λ₯Ό μƒμ„±ν–ˆμ„ λ•Œ, λ‹€μŒ 쀑 ν•„λ“œλ₯Ό 잘λͺ» μ ‘κ·Όν•œ 것?

s.lab = "Java Lab";
βœ” s.tel = β€œ010-1234-5678”;
s.name = "ν™κΈΈλ™β€œ;
s.number = 10;

abstract λ©”μ†Œλ“œμ˜ μ„€λͺ…μœΌλ‘œ λ°”λ₯Έ 것을 λͺ¨λ‘ κ³ λ₯΄μ„Έμš”.

βœ” λ©”μ†Œλ“œμ˜ μ„ μ–ΈλΆ€λ§Œ μžˆλŠ” λ©”μ†Œλ“œμ΄λ‹€.
μƒμ†κ΄€κ³„μ—μ„œ λΆ€λͺ¨ 클래슀의 λ©”μ†Œλ“œλ₯Ό μžμ‹ ν΄λž˜μŠ€μ—μ„œ λ‹€μ‹œ μ •μ˜ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.
μ‹€ν–‰ λ‚΄μš©μ€ μžμ‹ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ ν•΄μ•Ό ν•œλ‹€.
βœ” abstract ν΄λž˜μŠ€μ—μ„œλ§Œ μ„ μ–Έν•  수 μžˆλ‹€.

class A {
}

class B extends A {
}

public class Test {
  public static void main(String[] args) {
    A [] a = new A[5];
  }
}

μœ„ μ†ŒμŠ€μ˜ main() λ©”μ†Œλ“œμ— λ“€μ–΄κ°ˆ 수 μžˆλŠ” μ½”λ“œλŠ”?

a = new A();
βœ” a[0] = new A();
βœ” a[0] = new B();
a = new B();


μ œμ‘°μ‚¬ 메이컀(private string)와 가격(private int) 정보가 μ €μž₯λ˜λŠ” Phone ν΄λž˜μŠ€μ™€ μ½˜μ†”μ€ μ•„λž˜μ— μ œμ‹œλ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 이 클래슀λ₯Ό μ°Έκ³ ν•˜μ—¬ λ‹€μŒ ν΄λž˜μŠ€λ“€μ„ μž‘μ„±ν•΄λ΄…μ‹œλ‹€.

  1. Phone을 상속받아 SmartPhone 클래슀λ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€. SmartPhone ν΄λž˜μŠ€μ—λŠ” λΈ”λ£¨νˆ¬μŠ€κ°€λŠ₯μ—¬λΆ€ hasBluetooth(private boolean)의 정보가 μ €μž₯λ©λ‹ˆλ‹€. μƒμ„±μž, μ ‘κ·Όμž(getter), μ„€μ •μž(setter), κ°μ²΄λ‚΄μš©μΆœλ ₯자(toString)λ₯Ό ν¬ν•¨ν•˜μ„Έμš”.
  1. PhoneTest ν΄λž˜μŠ€μ—μ„œ 객체 배열을 λ§Œλ“€μ–΄ Phoneκ³Ό SmartPhone 클래슀 νƒ€μž…μ˜ 객체듀을 μ €μž₯ν•œ ν›„ 각 객체의 정보λ₯Ό 좜λ ₯ν•˜μ„Έμš”.
>PhoneTest 파일

public class PhoneTest {
	
	public static void main(String args[])
	{	
		//객체선언
		Phone p = new Phone();
		SmartPhone s = new SmartPhone();
		
		//배열객체선언
		Phone[] p1 = new Phone[4];
	    SmartPhone[] s1 = new SmartPhone[4];
	    
	    //정보저μž₯
	    p1[0] = new Phone("None",0);
	    p1[1] = new Phone("SAM",100);
	    p1[2] = new Phone("None",0);
	    p1[3] = new Phone("LG",50);
	    s1[0] = new SmartPhone(false);
	    s1[1] = new SmartPhone(true);
	    //좜λ ₯
	    System.out.println(p1[0]);
	    System.out.println(p1[1]);
	    System.out.print(p1[2]);
	    System.out.println(s1[0]);
	    System.out.print(p1[3]);
	    System.out.println(s1[1]);
		}
	}


>SmartPhone파일

package phone;

public class SmartPhone extends Phone {
	private boolean hasBluetooth;
	
	public SmartPhone()
	{
		this.hasBluetooth = false;
	}
	public SmartPhone(boolean a)
	{
		hasBluetooth = a;
	}
	public boolean getBluetooth()
	{
		return this.hasBluetooth;
	}
	public void setBluetooth(boolean hasBluetooth)
	{
		this.hasBluetooth = hasBluetooth;
	}
	  
	public String toString() {
		
		return "SmartPhone[hasBluetooth="+hasBluetooth+"]";	    
	}
	
	
}

μ΄λ ‡κ²Œ μƒμ†κΉŒμ§€ 정리λ₯Ό λλ§ˆμ³€λ‹€.
μΆ”κ°€λ‘œ λ‹€ν˜•μ„±μ—μ„œ μ˜€λ²„λΌμ΄λ”©/μ˜€λ²„λ‘œλ”©κ°™μ€ κ²½μš°λŠ” @Override 같은 μ–΄λ…Έν…Œμ΄μ…˜(annotation)을 뢙이면 가독성을 높이고 μ»΄νŒŒμΌλŸ¬κ°€ μ‰½κ²Œ 인식할 수 μžˆλ‹€κ³  ν•˜λ‹ˆ μ°Έκ³ ν•˜λ©΄ 될 것 κ°™λ‹€.

profile
ν•œλ¦ΌλŒ€ν•™κ΅ μ •λ³΄κ³Όν•™λŒ€ 2ν•™λ…„ μž¬ν•™μ€‘ / 윑ꡰ μ •λ³΄λ³΄ν˜Έλ³‘ 22-2κΈ°
post-custom-banner

0개의 λŒ“κΈ€