πŸ¦λ©‹μŸμ΄ μ‚¬μžμ²˜λŸΌ 11κΈ°/λ°±μ—”λ“œ μ •κΈ°μ„Έμ…˜ μΆ”κ°€ν•™μŠ΅

[TIL] μžλ°”μ˜ 좔상 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€μ— λŒ€ν•˜μ—¬

1son 2023. 3. 26. 17:26
2. 좔상 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€ 
좔상 클래슀 

좔상 λ©”μ„œλ“œ 

    - 좔상 λ©”μ„œλ“œ μ„ μ–Έ 

abstract λ°˜ν™˜νƒ€μž… λ©”μ„œλ“œμ΄λ¦„();

    - λ©”μ„œλ“œ 본체λ₯Ό μ™„μ„±ν•˜μ§€ λͺ»ν•œ λ©”μ„œλ“œ 

    - 무엇을 ν• μ§€λŠ” μ„ μ–Έν•  수 μžˆμ§€λ§Œ, μ–΄λ–»κ²Œ ν•  μ§€λŠ” μ •μ˜ν•  수 μ—†μŒ -> μ„ μ–ΈλΆ€λ§Œμ΄ 쑴재, κ΅¬ν˜„λΆ€λŠ” μž‘μ„±λ˜μ–΄ μžˆμ§€ μ•ŠμŒ

    - μ‚¬μš© λͺ©μ  : 좔상 λ©”μ„œλ“œκ°€ ν¬ν•¨λœ 클래슀λ₯Ό μƒμ†λ°›λŠ” μžμ‹ ν΄λž˜μŠ€κ°€ λ°˜λ“œμ‹œ 좔상 λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•˜λ„λ‘ ν•˜κΈ° μœ„ν•¨

 

 

좔상 클래슀 

    - 좔상 클래슀 μ„ μ–Έ 

abstract class ν΄λž˜μŠ€μ΄λ¦„ {
	//ν•„λ“œ 
    //μƒμ„±μž
    //λ©”μ„œλ“œ 
}

- 보톡 ν•˜λ‚˜ μ΄μƒμ˜ 좔상 λ©”μ„œλ“œλ₯Ό ν¬ν•¨ν•˜μ§€λ§Œ 없을 μˆ˜λ„ 있음

- 주둜 상속 κ³„μΈ΅μ—μ„œ μžμ‹ λ©€λ²„μ˜ 이름을 ν†΅μΌν•˜κΈ° μœ„ν•˜μ—¬ μ‚¬μš©ν•¨ 

- 좔상 ν΄λž˜μŠ€λŠ” λ™μž‘μ΄ μ •μ˜λ˜μ–΄ μžˆμ§€ μ•Šμ€ 좔상 λ©”μ„œλ“œλ₯Ό ν¬ν•¨ν•˜κ³  μžˆμœΌλ―€λ‘œ, μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 수 μ—†μŒ 

 

-> 좔상 ν΄λž˜μŠ€λŠ” 상속을 톡해 μžμ‹ 클래슀λ₯Ό λ§Œλ“€κ³ , λ§Œλ“  μžμ‹ ν΄λž˜μŠ€μ—μ„œ

    좔상 클래슀의 λͺ¨λ“  좔상 λ©”μ†Œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ”©ν•˜κ³  λ‚˜μ„œμ•Ό λΉ„λ‘œμ†Œ μžμ‹ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό 생성 κ°€λŠ₯

 

예제 

- 좔상 λ©”μ„œλ“œλ₯Ό ν¬ν•¨ν•œ 좔상 클래슀 

abstract class shape{
	double pi = 3.14;
    abstract void draw(); 
    public double findArea() {
    	return 0.0;
    }
}

 

- 좔상 클래슀의 μžμ‹ 클래슀 

class Circle extends shape{
	int radius;
    
    public Circle(int radius){
    	this.radius = radius;
    }
    
    //λΆ€λͺ¨ ν΄λž˜μŠ€μ—μ„œ 좔상 λ©”μ„œλ“œλ‘œ μ„ μ–Έν–ˆμœΌλ―€λ‘œ μžμ‹ ν΄λž˜μŠ€μ—μ„œ λ°˜λ“œμ‹œ κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€. 
    public void draw(){
        System.out.println("원을 그리닀.");
    }
    
    public double findArea(){ //λΆ€λͺ¨ 클래슀의 λ©”μ„œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ”© ν•œλ‹€. 
    	return pi*radius*radius;
    }
}

 

정리 

- 좔상 ν΄λž˜μŠ€λŠ” 일반적으둜 좔상 λ©”μ„œλ“œλ₯Ό ν¬ν•¨ν•˜κ³  μžˆλŠ” 클래슀

- 좔상 λ©”μ„œλ“œλ₯Ό μ„ μ–Έν•˜μ—¬ 상속을 ν†΅ν•΄μ„œ ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ κ΅¬ν˜„μ„ ν•˜λ„λ‘ κ°•μ œν•¨ 

- 객체(μΈμŠ€ν„΄μŠ€)λ₯Ό 생성할 수 μ—†μŒ

- μ΄μ™Έμ—λŠ” 일반 ν΄λž˜μŠ€μ™€ λ‹€λ₯΄μ§€ μ•ŠμŒ 

-> 좔상 클래슀 : λ―Έμ™„μ„± 섀계도 

 

좔상 ν΄λž˜μŠ€λŠ” ,, 곡톡점은 μžˆμ§€λ§Œ 이λ₯Ό μœ„ν•΄μ„œ μ •ν™•νžˆ κ΅¬ν˜„ν•˜κΈ° νž˜λ“€λ•Œ,

즉, 동물은 μš΄λ‹€. λΌλŠ” 곡톡점이 μžˆμ§€λ§Œ 각각의 동물듀이 μ•Όμ˜Ήμ΄λΌκ³  μšΈμ§€ 멍멍이라고 μšΈμ§€ κ΅¬ν˜„ν•˜κΈ°λŠ” νž˜λ“€λ•Œ 

ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ 이λ₯Ό κ΅¬ν˜„ν•˜λ„λ‘ κ°•μ œν•˜λŠ” λ―Έμ™„μ„± 섀계도 μž…λ‹ˆλ‹€. 

 


 

μΈν„°νŽ˜μ΄μŠ€ 

- 객체λ₯Ό μ–΄λ–»κ²Œ ꡬ성해야 ν•˜λŠ”μ§€ μ •λ¦¬ν•œ κΈ°λ³Έ 섀계도 

- 객체가 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λ©΄, μΈν„°νŽ˜μ΄μŠ€ λ©”μ„œλ“œ(좔상 λ©”μ„œλ“œ) κ΅¬ν˜„μ„ ν•˜λ„λ‘ κ°•μ œν•¨ 

- μƒμˆ˜μ™€ 좔상 λ©”μ„œλ“œμ˜ μ§‘ν•©μ΄μ—ˆμ§€λ§Œ, 

   νŽΈμ˜μ„±μ„ μœ„ν•˜ java8λΆ€ν„° Default, Static, Private λ©”μ„œλ“œ 등을 지원함 

 

μΈν„°νŽ˜μ΄μŠ€ ꡬ쑰 

- interface의 μ ‘κ·Ό μ§€μ •μžλŠ” public만 κ°€λŠ₯ -> interfaceλŠ” class의 섀계도이기 λ•Œλ¬Έμ— μ• μ΄ˆμ— 쑴재 λͺ©μ μ΄ 곡개이기 λ•Œλ¬Έ

- interfaceλŠ” μ ‘κ·Ό μ§€μ •μžλ‘œ public을 μ‚¬μš©ν•˜λ©΄ λ‹€λ₯Έ νŒ¨ν‚€μ§€μ—μ„œλ„ μ‚¬μš© κ°€λŠ₯, public을 μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ interfaceκ°€ μœ„μΉ˜ν•œ ν•΄λ‹Ή νŒ¨ν‚€κΈ° λ‚΄μ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯ 

- interfaceλŠ” 객체둜 생성할 수 μ—†κΈ° λ•Œλ¬Έμ— μƒμ„±μžλ₯Ό κ°€μ§ˆ 수 μ—†μŒ 

- 컴파일 μ‹œ μƒμˆ˜λŠ” public static final을, 좔상 λ©”μ„œλ“œλŠ” public abstract을 μžλ™μœΌλ‘œ 생성해주기 λ•Œλ¬Έμ— μƒλž΅ κ°€λŠ₯

 

μΈν„°νŽ˜μ΄μŠ€μ˜ μž₯점 

- μΈν„°νŽ˜μ΄μŠ€λ§Œ μ€€μˆ˜ν•˜λ©΄ 톡합에 μ‹ κ²½ μ“°μ§€ μ•Šκ³  λ‹€μ–‘ν•œ ν˜•νƒœλ‘œ μƒˆλ‘œμš΄ 클래슀λ₯Ό 개발 κ°€λŠ₯

- μžλ°” μ–Έμ–΄λŠ” 클래슀의 닀쀑 상속을 μ§€μ›ν•˜μ§€ μ•Šμ§€λ§Œ, μΈν„°νŽ˜μ΄μŠ€λ‘œ 닀쀑 상속 효과λ₯Ό κ°„μ ‘μ μœΌλ‘œ 얻을 수 있음 

 

 

μΈν„°νŽ˜μ΄μŠ€μ™€ 좔상 클래슀의 차이

곡톡점 

- μ„ μ–ΈλΆ€λ§Œ μ‘΄μž¬ν•˜κ³  κ΅¬ν˜„λΆ€λŠ” μ—†λŠ” 좔상 λ©”μ„œλ“œλ₯Ό 가짐 

- μžμ‹ ν΄λž˜μŠ€μ—μ„œ 무엇인가λ₯Ό λ°˜λ“œμ‹œ κ΅¬ν˜„ν•˜λ„λ‘ μœ„μž„ν•΄μ•Ό ν•  λ•Œ μ‚¬μš© 

 

차이점

- 좔상 클래슀의 λͺ©μ μ€ 상속을 λ°›μ•„ κΈ°λŠ₯을 ν™•μž₯μ‹œν‚€λŠ” 것 

- μΈν„°νŽ˜μ΄μŠ€μ˜ λͺ©μ μ€ κ΅¬ν˜„ν•˜λŠ” λͺ¨λ“  ν΄λž˜μŠ€μ— λŒ€ν•΄ νŠΉμ • λ©”μ„œλ“œκ°€ λ°˜λ“œμ‹œ μ‘΄μž¬ν•˜λ„λ‘ κ°•μ œν•˜λŠ” 것

 

 

μΈν„°νŽ˜μ΄μŠ€ 상속
//μΈν„°νŽ˜μ΄μŠ€λ₯Ό μƒμ†ν•˜λ €λ©΄ 
interface μžμ‹μΈν„°νŽ˜μ΄μŠ€ extends λΆ€λͺ¨μΈν„°νŽ˜μ΄μŠ€{
}

//μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λ €λ©΄
class μžμ‹ν΄λž˜μŠ€ implements λΆ€λͺ¨μΈν„°νŽ˜μ΄μŠ€{
}

//상속할 μΈν„°νŽ˜μ΄μŠ€κ°€ μ—¬λŸ¬ 개라면 μ‰Όν‘œ(,)둜 μ—°κ²°

 

//μΈν„°νŽ˜μ΄μŠ€λŠ” 닀쀑 상속할 수 μžˆλ‹€. 

 

//ν΄λž˜μŠ€λŠ” 닀쀑 상속할 수 μ—†λ‹€ .

 

 

μΈν„°νŽ˜μ΄μŠ€ νƒ€μž… 

- μΈν„°νŽ˜μ΄μŠ€λ„ 클래슀처럼 ν•˜λ‚˜μ˜ νƒ€μž…μ΄λ―€λ‘œ λ³€μˆ˜λ₯Ό μΈν„°νŽ˜μ΄μŠ€ νƒ€μž…μœΌλ‘œ μ„ μ–Έ κ°€λŠ₯

- μΈν„°νŽ˜μ΄μŠ€μ˜ κ΅¬ν˜„ ν΄λž˜μŠ€λŠ” κ·Έ μΈν„°νŽ˜μ΄μŠ€μ˜ μžμ‹ νƒ€μž…

- μΈν„°νŽ˜μ΄μŠ€ νƒ€μž… λ³€μˆ˜κ°€ κ΅¬ν˜„ 객체λ₯Ό μ°Έμ‘°ν•œλ‹€λ©΄ κ°•μ œ νƒ€μž… λ³€ν™˜ κ°€λŠ₯