PlayData/Java

[Day 9 | Java] 클래슀 / νƒ€μž… λ³€ν™˜κ³Ό λ‹€ν˜•μ„± /

κΉ€μœ λ‹ˆμ½˜ 2021. 11. 19. 20:57

λ™λ¬Όλ³‘μ›μ˜ μ£Ό λ°μ΄ν„°λŠ” 동물. 

λ”°λΌμ„œ Ani. μ‹œλ¦¬μ¦ˆλ‘œ κ°„λ‹€.

동물이 였브젝트.

동물이 가지고 μžˆλŠ” 것은 λ¬΄μ—‡μ΄λ‹ˆ? μΉ˜λ£Œν•΄μ€˜μ•Ό ν•˜λŠ” 것은? 

>> μš°λ¦¬λŠ” 개, 고양이, ν–„μŠ€ν„°, μ•…μ–΄, λ‹­.. λ“±λ“± μΉ˜λ£Œν•΄μ€˜μ•Όν•΄. (이름 / λ‹€λ¦¬μ˜ 개수 / λ“±λ“± ν•˜κ³  μžˆμ—ˆλŠ”λ° μ•…μ–΄? 파좩λ₯˜? λ‹­? μ‘°λ₯˜? μ‹€μ§ˆμ μœΌλ‘œ ν’ˆμ’…μ— λ”°λΌμ„œ κ΅¬μ„±ν•΄μ•Όν•˜λŠ” ν•­λͺ©μ΄ 달라짐. 고민을 함. μ•„λ‹ˆ μ΄λ ‡κ²Œ ν• κ±°λ©΄ μ§„μž‘ 말해주지. μœ„μ— 동물 클래슀 λ§Œλ“€μ–΄λ†“κ³  μƒμ†λ°›κ²Œ ν•˜μ§€. κ³΅ν†΅μ μœΌλ‘œ ν•˜λŠ” 이름을 μœ„μ— λ„£μœΌλ©΄ λ˜μž–μ•„. 

 

상속관계 쒋은 점: ν•œ 번 λ„£μœΌλ©΄ 상속 λ°›μ•„μ„œ μ“Έ 수 있게 됨. 

단점 : 처음 λ§Œλ“€ λ•Œ μ‹œκ°„μ΄ 였래 κ±Έλ¦Ό

 

 

p311

ν•˜λ‚˜μ—μ„œ μ—¬λŸ¬κ°œλ‘œ λ‚΄λ €κ°€λŠ” 것(닀쀑상속)은 κ°€λŠ₯ν•˜λ‚˜, μ—¬λŸ¬κ°œκ°€ ν•˜λ‚˜λ‘œ λ‚΄λ €κ°€λŠ” 것은 μ•ˆλœλ‹€. 

λ‹€λ₯Έ 객체 지ν–₯μ–Έμ–΄λŠ” 우회적으둜 이λ₯Ό ν—ˆλ½ν•˜λŠ” 언어도 μžˆκΈ°λŠ” ν•˜λ‹€. 

 

μ™œ μ•ˆλ˜λŠ”μ§€λŠ” λ‚˜μ€‘μ— μ„€λͺ… μ˜ˆμ •. 

 

p312, p313 -- μœ„μ˜ μ„€λͺ… λ‚΄μš© μ½”λ“œ -- 

 

* 객체 지ν–₯ μ–Έμ–΄μ˜ 상속은 μˆ˜μ •μ„ νŽΈν•˜κ²Œ ν•˜κΈ° μœ„ν•΄μ„œμ΄λ‹€. λΉ„μš©κ³Ό μ‹œκ°„κ³Ό λ…Έλ ₯의 적정 λ²”μœ„ μ•ˆμ—μ„œ λͺ‡ λ‹¨κ³„κΉŒμ§€ ν•  것인지 κ³ λ―Όν•΄μ•Ό *

// 동물병원 병원μž₯, 동물병원 ν•„μš”ν•œ ν”„λ‘œκ·Έλž¨ λ§Œλ“€κΈ° 

class Ani16{
	String name = "이 름 ";
	void cry() { System.out.println("으 μ•™");}
	Ani16() {System.out.println(" -- Ani16() μ‹€ν–‰ -- "); }
}



class Dog16 extends Ani16{
	Dog16() {System.out.println(" -- Dog16() μ‹€ν–‰ -- "); 	}
}

class Cat16 extends Ani16{
	Cat16() {System.out.println(" -- Cat16() μ‹€ν–‰ -- "); 		}
}

public class Cla16 {

	public static void main(String[] args) {
		Dog16 d1 = new Dog16(); d1.name = " ν•΄ ν”Ό ";
		Cat16 c1 = new Cat16(); c1.name = " μ•„ 치 ";

	}
}

//p310

 

 

 

 

 


 

 

λΆ€λͺ¨κ°€ λ¨Όμ € μ„ μ–Έλ˜κ³  μžμ‹μ΄ μ„ μ–Έλ˜λ©΄, λ¨Όμ € μ„ μ–Έλ˜λŠ” aκ°€ 사라진닀고 생각할 수 μžˆλŠ”λ°, κ·Έλ ‡μ§€λŠ” μ•Šκ³ 

μ‚΄ν¬μ‹œ κ°€λ €μ§€λŠ” 것 뿐.

 λ‘˜ λ‹€ ν˜ΈμΆœν•΄μ„œ μ‚¬μš©ν•˜λ €λ©΄, λΆ€λͺ¨aλ₯Ό super둜 놓고,μžμ‹aλ₯Ό this둜 λ†“μœΌλ©΄ 됨. 

 

class Ani17{ 
	String a = "Ani-a";
	void cry() { System.out.println("으 μ•™");}
	void shout() { System.out.println("으 λ₯΄ 렁 ");}

}

class Dog17 extends Ani17 {   
 	String a = "Dog - a";
 	
 	void pDog() { System.out.println(this.a);
 				  System.out.println(super.a);
 	}
 	
 	//p317 λ©”μ†Œλ“œ μ˜€λ²„λΌμ΄λ“œ 
 	void cry() { System.out.println("멍 멍");}
// 				 super.cry();
 	
 	@Override // annotation 기법 / / p318
 	void shout() { System.out.println("λ―€ λ₯΄ 렁 ");}

	
}

public class Cla17 {

	public static void main(String[] args) {

		Dog17 d1 = new Dog17();
		System.out.println(d1.a);
		d1.pDog();
		d1.cry();
		d1.shout(); //d1.Shout();
	}

}
//λΆ€λͺ¨κ°€ λ¨Όμ € μ„ μ–Έλ˜κ³  μžμ‹μ΄ μ„ μ–Έλ˜λ©΄, λ¨Όμ € μ„ μ–Έλ˜λŠ” aκ°€ 사라진닀고 생각할 수 μžˆλŠ”λ°, κ·Έλ ‡μ§€λŠ” μ•Šκ³ 
//μ‚΄ν¬μ‹œ κ°€λ €μ§€λŠ” 것 뿐.
// λ‘˜ λ‹€ ν˜ΈμΆœν•΄μ„œ μ‚¬μš©ν•˜λ €λ©΄, λΆ€λͺ¨aλ₯Ό super둜 놓고,μžμ‹aλ₯Ό this둜 λ†“μœΌλ©΄ 됨.

 

 

λΆ€λͺ¨μͺ½μ— μžˆλŠ” 것은 처리λ₯Ό μœ„ν•œ 것이 μ•„λ‹ˆλΌ, 

λ©”μ†Œλ“œ, ν•„λ“œ 이름을 κ·ΈλŒ€λ‘œ κ°€μ Έλ‹€ μ“°λŠ” μ„€κ³„μ˜ λŠλ‚ŒμœΌλ‘œ 봐주어야 ν•œλ‹€. 

λ‚΄κ°€ μ΄λ ‡κ²Œ 이름을 섀계해 λ‘μ—ˆμœΌλ‹ˆ, λ‚˜μ€‘μ— 섀계받아 μ“Έ λ•Œμ— 이름가져닀 써라. 

 

 

μ•„λž˜ 이런 μ‹μœΌλ‘œ 싀행이 됨 

더보기
 
class Ani18 { 
	String name; 
	
	Ani18(){ System.out.println(" -- Ani18() μ‹€ν–‰ -- "); }
	Ani18(String name){ this.name = name ; 
						System.out.println(" -- Ani18(name) μ‹€ν–‰ -- ");	}
} 

class Dog18 extends Ani18 {
	Dog18(){ super ();	System.out.println(" -- Dog18() μ‹€ν–‰ -- ");}
	Dog18(String name){ super(name); System.out.println(" -- Dog18(name) μ‹€ν–‰ -- ");}
} 


public class Cla18 {

	public static void main(String[] args) {

		Dog18 d1 = new Dog18();
		Dog18 d2 = new Dog18(" ν•΄ ν”Ό "); //
		
		System.out.println(d2.name); 
	}

}

 

 

λ¨Έλ¦¬μ†μœΌλ‘œ 계속 그림을 κ·Έλ €κ°€μ•Ό 함

 

 

 

 


 

 

 

// final => λ΄‰μΈλ˜λ‹€. 

 

final λ³€μˆ˜ => μƒμˆ˜

final λ©”μ†Œλ“œ => μ˜€λ²„λΌμ΄λ”© λΆˆκ°€

final 클래슀 => 상속 λΆˆκ°€ 

 

 

 


 

 

p333 

μžλ™ νƒ€μž… λ³€ν™˜ 

μ°Έμ‘°νƒ€μž… ν˜• λ³€ν™˜ μ—„μ²­ μ€‘μš”ν•¨(였늘 λ‚˜μ˜¨ 것 쀑에 제일 μ€‘μš”ν•¨) 

λ©”λͺ¨λ¦¬ ꡬ쑰 이해  

 

μ°Έμ‘°νƒ€μž… ν˜•λ³€ν™˜

* μ΄ν΄λ¦½μŠ€λŠ” 문법적 였λ₯˜λŠ” μž‘μ•„λ‚΄μ§€λ§Œ λ©”λͺ¨λ¦¬μ  였λ₯˜λŠ” 잘 μž‘μ•„λ‚΄μ§€ λͺ»ν•¨. 

그림을 쒅이에 ν•œ 번 μ‹€μ œλ‘œ κ·Έλ €λ³΄μ„Έμš”! 

 

class A20 { int a = 200; } 

class B20 extends A20 { int b = 100; } 

public class Cla20 {

	public static void main(String[] args) {
		
		A20 z1 = new A20();
		B20 z2 = new B20();
		A20 z3 = new B20();
		// B20 z4 = (20) new A20(); //μ™œ μ—λŸ¬κ°€λ‚˜λŠ”κ°€? <-- μ‹€ν–‰ μ‹œ μ—λŸ¬ / 문법 μ—λŸ¬ μ•„λ‹Œ 맀λͺ¨λ¦¬ μ—λŸ¬   
		
		// κ²Œμ‹œ ν•­λͺ©(적은) = μ‹€μ œ ν•­λͺ©(λ§Žμ€)
		// κ²Œμ‹œ ν•­λͺ©(λΆ€λͺ¨) = μ‹€μ œ ν•­λͺ©(μžμ‹)
		// λΆ€λͺ¨ν΄λž˜μŠ€ λ³€μˆ˜ = μžμ‹ν΄λž˜μŠ€κ³΅κ°„ ==> μžλ™ ν˜• λ³€ν™˜ 
		
		
		//큰 size = μž‘μ€ size //////
		
		short a = 10;
		int b = a;
		
		int c = 20; 
		short d = (short)c; // cast μ—°μ‚°μž -> κ°•μ œ μ ˆμ‚­ 

	}

}

이거 이해 μ•ˆλ˜λ©΄ μ•žμœΌλ‘œ κ±·μž‘μ„ 수 없을 것..(μ €λŠ” 이미 κ±·μž‘μ„ 수 μ—†λŠ”λ°μš”...) 😭😭😭

 

 

 

되게 μ΄ν•΄ν•˜κ³ μ‹Άμ€λ° μ΄ν•΄μ•ˆλ˜λŠ” λŠλ‚Œ. 

λ‹€λ“€ μ–΄λ–»κ²Œλ“€ μ΄ν•΄ν•˜μ‹œλŠ”κ±΄μ§€? γ… 

 

 

흠 ν”Œλ ˆμ΄λ°μ΄ν„° μ•žλΆ€λΆ„ μˆ˜μ—… λ‚΄μš©λ“€μ΄

μ•žμœΌλ‘œμ˜ 컀리어에 ν•„μš”ν•œμ§€ 잘 λͺ¨λ₯΄κ² λŠ”데, 

슀트레슀 λ„ˆλ¬΄ 받지 μ•Šκ³  κ³΅λΆ€ν•˜μž. 

 

 

 

κ·Έλƒ₯ λŠλ‚Œλ§Œ μ•Œμž.

 

 

 

 

닀쀑상속 μ•ˆλ˜λŠ” 이야기 

 

 

 

μ°Έμ‘°ν˜• ν˜•λ³€ν™˜μ— λŒ€ν•œ 것은 μ½”λ“œλ₯Ό 쀄일 수 μžˆλŠ” μ€‘μš”ν•œ keyκ°€ λœλ‹€. 

// 가전업체 

class TV23 {	
	void PowerOn() { System.out.println("TV Power on");	}
	void PowerOff() { System.out.println("TV Power off");	}
}


class LGTV23 extends TV23{
	void PowerOn() { System.out.println("LGTV Power on");	}
	void PowerOff() { System.out.println("LGTV Power off");	}
}


class SSTV23  extends TV23{
	void PowerOn() { System.out.println("SSTV Power on");	}
	void PowerOff() { System.out.println("SSTV Power off");	}
}


class HDTV23  extends TV23{
	void PowerOn() { System.out.println("HDTV Power on");	}
	void PowerOff() { System.out.println("HDTV Power off");	}
}


public class Cla23 {

	public static void main(String[] args) {

		
		//μΈμŠ€ν„΄μŠ€ μƒμ„±ν•΄μ„œ 각각 ν…ŒμŠ€νŠΈν•΄λ³΄κ³  
//		LGTV23 tv1 = new LGTV23(); tv1.PowerOn(); tv1.PowerOff();
//		SSTV23 tv2 = new SSTV23(); tv2.PowerOn(); tv2.PowerOff();
//		HDTV23 tv3 = new HDTV23(); tv3.PowerOn(); tv3.PowerOff();

		
		
		
	// μžμ‹  λΆ€λͺ¨ ν˜•λ³€ν™˜μ‹œν‚¨κ±° 
//		TV23 tv1 = new LGTV23(); tv1.PowerOn(); tv1.PowerOff();
//		TV23 tv2 = new SSTV23(); tv2.PowerOn(); tv2.PowerOff();
//		TV23 tv3 = new HDTV23(); tv3.PowerOn(); tv3.PowerOff();

		
		// λ„ˆλ¬΄ λ§ŽμœΌλ‹ˆ ν•œ λ²ˆμ— 돌릴 방법을 μ°Ύμ•„λ³Έλ‹€. 
		// μ–΄λ ˆμ΄λ₯Ό μ‚¬μš©ν•˜μ—¬ ν•œ λ²ˆμ— 처리 
		TV23[] TVs = { new LGTV23(), new SSTV23(), new HDTV23() };
		for(TV23 tv: TVs) { tv.PowerOn(); tv.PowerOff();}
	}

}

// 객체 지ν–₯ μ–Έμ–΄μ—μ„œ νž™μ€ 많이 μ“°κ³  μŠ€νƒμ€ 적게 μ“°λŠ”κ±΄ μ§€μ–‘ν•΄μ•Όν•œλ‹€.

 

// 과제 : main method μ•ˆμ— μžˆλŠ”것을 κ΅¬μ‘°μ μœΌλ‘œ κ·Έλ¦Ό κ·Έλ¦¬λŠ”κ²Œ λ§žμ„κΉŒμš”?