πŸ“š μ°Έκ³ ν•œ μ±…

 

: 좜처 예슀24 ν™ˆνŽ˜μ΄μ§€

 

 

 

- 기본적인 κ°œλ…μ„ μ •λ¦¬ν•˜κ³  μΆ”κ°€μ μœΌλ‘œ κΆκΈˆν•œ 것듀을 μ •λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€ -

 

 

πŸ₯ πŸ₯ πŸ₯

 


 

βœ”οΈ   μΆ”μƒν΄λž˜μŠ€_ 395p

 

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

: λ©”μ„œλ“œ 본채가 μ™„μ„±λ˜μ§€ μ•Šμ€ λ―Έμ™„μ„± λ©”μ„œλ“œλ‘œ, λ©”μ„œλ“œμ˜ κΈ°λŠ₯을 μ •μ˜ν•˜λŠ” μ€‘κ΄„ν˜Έ μžμ²΄κ°€ μ—†μœΌλ©° λͺ…λ Ήμ–΄μ˜ 끝을 μ•Œλ¦¬λŠ” μ„Έλ―Έν΄λ‘ μœΌλ‘œ λλ‚œλ‹€.

abstract class A {
    abstract void abc();    
    void bcd() {
    }
}
좔상 λ©”μ„œλ“œλ₯Ό 1개 이상 ν¬ν•¨ν•˜κ³  μžˆλŠ” ν΄λž˜μŠ€λŠ” λ°˜λ“œμ‹œ 좔상 클래슀둜 μ •μ˜ν•΄μ•Όν•œλ‹€. 일반적으둜 좔상 ν΄λž˜μŠ€λŠ” λ©”μ„œλ“œμ˜ κΈ°λŠ₯이 μ •μ˜λ˜μ–΄ μžˆμ§€ μ•ŠλŠ” λ―Έμ™„μ„± λ©”μ„œλ“œμΈ μ€‘κ΄„ν˜Έκ°€ μ—†λŠ” ν˜•νƒœμ˜ λ©”μ„œλ“œκ°€ 1개 이상 μ‘΄μž¬ν•œλ‹€λŠ” μ˜λ―Έμ΄λ‹€. 좔상 클래슀의 ν˜•μ‹μ€ class ν‚€μ›Œλ“œ μ•žμ— abstractλ₯Ό λΆ™μ—¬ ν‘œν˜„ν•œλ‹€.

좔상 클래슀의 μ£Όμ˜ν•΄μ•Όν•  점은, μ€‘κ΄„ν˜Έμ˜ 여뢀이닀. 만일 μ€‘κ΄„ν˜Έκ°€ μžˆλŠ” μƒνƒœλ‘œ μ½”λ“œλ₯Ό μ™„μ„±ν•˜λ©΄ κ·Έ λ©”μ„œλ“œλŠ” 'μ•„λ¬΄λŸ° κΈ°λŠ₯을 ν•˜μ§€ μ•ŠλŠ” μ™„μ„±λœ λ©”μ„œλ“œ'라고 κΈ°λŠ₯을 λͺ…ν™•νžˆ μ •μ˜ν•˜κ²Œ λœλ‹€.

좔상 ν΄λž˜μŠ€λŠ” λ‚΄λΆ€μ˜ λ―Έμ™„μ„± λ©”μ„œλ“œλ₯Ό μ§€λ‹ˆκ³  있기 λ•Œλ¬Έμ— 객체λ₯Ό 직접 생성할 수 μ—†λ‹€. κ·Έ μ΄μœ λŠ” νž™ λ©”λͺ¨λ¦¬μ˜ νŠΉμ„± λ•Œλ¬Έμ΄λ‹€. νž™ λ©”λͺ¨λ¦¬λŠ” 값이 λΉ„μ–΄μžˆλŠ” ν•„λ“œλ₯Ό μ €μž₯ν•  수 μ—†λŠ” νŠΉμ„±μ„ μ§€λ…”λŠ”λ°, 이둜 인해 λ―Έμ™„μ„±λœ λ©”μ„œλ“œλ₯Ό κ°€μ§„ 좔상 ν΄λž˜μŠ€λŠ” A a = new A( )와 같이 μƒμ„±μž 호좜 자체λ₯Ό ν•  수 μ—†λ‹€.

 

 

 

좔상 클래슀 객체 μƒμ„±ν•˜λŠ” 방법 : 1. 좔상 클래슀λ₯Ό μƒμ†ν•œ 일반 클래슀

abstract class A {
	abstract void abc();
}

class B extends A {
	void aaa() {
    	System.out.println("μžμ‹ 클래슀둜 좔상 클래슀 μ΄μš©ν•˜κΈ°");
    }
}

public class AbstractClass_1 {
	public static void main(String[] args) {
    	A b1 = new B();
        A b2 = new B();
        
        b1.aaa();
        b2.aaa();
    }
}
BλŠ” 좔상 클래슀λ₯Ό μƒμ†ν–ˆλ‹€. Bκ°€ 일반 클래슀둜 역할을 ν•˜κ³  μ‹Άλ‹€λ©΄, 좔상 클래슀λ₯Ό μƒμ†ν–ˆκΈ°μ— 좔상 λ©”μ„œλ“œμ˜ ꡬ체적으둜 μ–΄λ–€ 역할을 ν•  것인지 μ •μ˜ν•΄μ•Όν•œλ‹€. λ§Œμ•½ 객체λ₯Ό μ—¬λŸ¬κ°œ λ§Œλ“€μ–΄μ•Όν•˜λŠ” 상황이라면 μœ„μ˜ μ½”λ“œμ™€ 같이 μžμ‹ 클래슀λ₯Ό 직접 μ •μ˜ν•˜λŠ” 것이 더 μ μ ˆν•œλ‹€.

 

 

 

 μΆ”상 클래슀 객체 μƒμ„±ν•˜λŠ” 방법 : 2. μ΄λ„ˆν΄λž˜μŠ€ 

abstract class A {
    abstract void abc();
}

public class AbstractClass {
    public static main(String[] args) {
    
        A a1 = new A();
            void abc() {
                System.out.println("μ΄λ„ˆν΄λž˜μŠ€λ‘œ μ΄μš©ν•˜κΈ°");
            }
        };
                  
        a1.aaa();
}
μ΄λ„ˆν΄λž˜μŠ€λ₯Ό μ΄μš©ν•˜λŠ” 것은, A( )λŠ” μ»΄νŒŒμΌλŸ¬κ°€ 클래슀 Aλ₯Ό 상속받아 aaa( ) λ©”μ„œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ”©ν•œ 읡λͺ… 클래슀의 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λŠ” 것이닀. 이 경우 클래슀 A의 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λŠ” 것이 μ•„λ‹ˆλ‹€. 읡λͺ… μ΄λ„ˆ 클래슀λ₯Ό ν™œμš©ν•œ μž₯μ μœΌλ‘œλŠ” μ½”λ“œκ°€ κ°„κ²°ν•΄ λ³΄μΈλ‹€λŠ” 점이 μžˆμ§€λ§Œ, μƒμ†ν•œ κ²½μš°μ™€ 달리 객체λ₯Ό μ—¬λŸ¬κ°œ λ§Œλ“€κΈ°μ—” μ ν•©ν•˜μ§€ μ•Šλ‹€. 

 

 

 

 


 

 

 

βœ”οΈ   μΈν„°νŽ˜μ΄μŠ€_ 402p

 

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

: μ„œλ‘œ λ‹€λ₯Έ μ‹œμŠ€ν…œμ΄λ‚˜ μž₯치, λ˜λŠ” μ‚¬μš©μž κ°„μ˜ 정보 κ΅ν™˜μ„ μœ„ν•œ μ ‘μ μ΄λ‚˜ 경계면

interface abc {
    public static final int a = 1;
    public abstract void abc();
}
μΈν„°νŽ˜μ΄μŠ€ λ‚΄λΆ€μ˜ λͺ¨λ“  ν•„λ“œλŠ” public static final둜 μ •μ˜λ˜μ–΄μžˆκ³ , staticκ³Ό default λ©”μ„œλ“œ μ΄μ™Έμ˜ λͺ¨λ“  λ©”μ„œλ“œλŠ” public abstract둜 μ •μ˜λ˜μ–΄μžˆλ‹€. ν΄λž˜μŠ€λŠ” class라고 이름 μ•žμ— λΆ™μ—¬μ£Όμ—ˆλ‹€λ©΄, μΈν„°νŽ˜μ΄μŠ€λŠ” interfaceμž„μ„ 이름 μ•žμ— λͺ…μ‹œν•œλ‹€. μ œμ–΄μžλ₯Ό λͺ…μ‹œμ μœΌλ‘œ 적지 μ•Šμ•˜μ–΄λ„ public static finalκ³Ό public abstractλŠ” μžλ™μœΌλ‘œ μΆ”κ°€λœλ‹€.

 

Q. μΈν„°νŽ˜μ΄μŠ€ λ‚΄ ν•„λ“œμ— staticκ³Ό final을 λΆ™μ΄λŠ” μ΄μœ λŠ”?

A. μΈν„°νŽ˜μ΄μŠ€λŠ” κΈ°λŠ₯의 약속을 μ •μ˜ν•˜λŠ” 곳으둜 "μ–΄λ–€ κΈ°λŠ₯을 μ œκ³΅ν•˜κ² λ‹€."λΌλŠ” λ©”μ„œλ“œ 이름과 κ·œμ•½λ§Œ κ°€μ§€κ³  μžˆλ‹€. μΈν„°νŽ˜μ΄μŠ€λŠ” ν–‰μœ„μ— λŒ€ν•œ μ•½μ†λ§Œ ν•˜μ§€, λ³€μˆ˜μ— λŒ€ν•΄μ„œλŠ” 기본적으둜 μ •μ˜ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μΈν„°νŽ˜μ΄μŠ€ λ‚΄μ˜ λ³€μˆ˜λŠ” 기본적으둜 λ³€ν•˜μ§€ μ•ŠλŠ” μƒμˆ˜μ—¬μ•Όλ§Œ ν•œλ‹€. μ—¬κΈ°μ„œ static은 클래슀(μΈν„°νŽ˜μ΄μŠ€) μžμ²΄μ— λΆ™μ–΄μžˆλŠ” κ²ƒμœΌλ‘œ 객체 생성 없이 μ ‘κ·Ό κ°€λŠ₯ν•˜λ©°, final은 ν•œ 번 μ •μ˜ν•œ 값은 λ³€κ²½λ˜μ§€ μ•ŠλŠ” νŠΉμ„±μ„ λΆ€μ—¬ν•΄μ€€λ‹€.
μΈν„°νŽ˜μ΄μŠ€λŠ” μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€ 수 μ—†κΈ° λ•Œλ¬Έμ— λ³€μˆ˜μ— static을 λΆ™μ—¬ μΈν„°νŽ˜μ΄μŠ€ 내에 μ €μž₯λ˜λ„λ‘ ν•˜μ—¬ μ ‘κ·Όκ°€λŠ₯ν•˜κ²Œ λ§Œλ“€κ³ , μΈν„°νŽ˜μ΄μŠ€λŠ” λ©”μ„œλ“œλ₯Ό κ΄€λ¦¬ν•˜λŠ” 곳이기 λ•Œλ¬Έμ— λ³€κ²½λ˜λŠ” λ³€μˆ˜μ— μ˜ν•΄ λ©”μ„œλ“œμ˜ 변동이 μƒκΈ°λŠ” 것을 λ°©μ§€ν•΄μ•Όν•¨μœΌλ‘œ final을 뢙인닀.

 

 

Q. μΈν„°νŽ˜μ΄μŠ€μ™€ 좔상 클래슀의 차이점은 무엇이며 μ–΄λ–€ 상황에 맞좰 μ¨μ•Όν•˜λŠ”κ°€?

A. μΈν„°νŽ˜μ΄μŠ€λŠ” λ©”μ„œλ“œμ˜ μ΄λ¦„λ§Œ μ •μ˜ν•΄λ‘λŠ” 곳이닀. μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속받은 ν΄λž˜μŠ€μ—μ„œ ꡬ체화가 이루어져 μ •ν™•νžˆ 이 λ©”μ„œλ“œκ°€ μ–΄λ–€ κΈ°λŠ₯을 κ°€μ§€λŠ”μ§€ μ •μ˜ν•œλ‹€. 좔상 ν΄λž˜μŠ€λŠ” 좔상화가 λ“€μ–΄μžˆλŠ” 클래슀라고 μƒκ°ν•˜λ©΄ λœλ‹€. 일반 λ³€μˆ˜, μƒμˆ˜ λͺ¨λ‘ μ •μ˜ν•  수 있으며 곡톡 κΈ°λŠ₯κ³Ό μ•½μ†λœ κΈ°λŠ₯도 ν•¨κ»˜ μžˆλ‹€. μ ‘κ·Όμ œμ–΄μžλ„ 자유둭게 μ§€μ •κ°€λŠ₯ν•˜λ‹€.
μΈν„°νŽ˜μ΄μŠ€λŠ” λ‹€μ–‘ν•œ ν΄λž˜μŠ€λ“€μ΄ 곡톡 없이 제각각 λ™μž‘ν•˜λŠ” 경우 μ‚¬μš©ν•œλ‹€. ν˜Ήμ€ 닀쀑 κ΅¬ν˜„μ΄ ν•„μš”ν•˜κ±°λ‚˜ νŠΉμ • μ—­ν• λ‘œ λ‚˜λˆŒ λ•Œ μ‚¬μš©ν•œλ‹€. 좔상 클래슀의 경우 κΈ°λ³Έ ν˜•νƒœλŠ” μœ μ§€ν•˜λ©΄μ„œ 세뢀적인 λ™μž‘μ„ λ‹€λ₯΄κ²Œ ν•˜κ³  싢을 λ•Œ μ‚¬μš©ν•œλ‹€. 같은 νƒ€μž…λΌλ¦¬ λ¬Άκ³  곡톡 μ½”λ“œλ₯Ό μž¬μ‚¬μš©ν•œλ‹€κ³  μƒκ°ν•˜λ©΄ λœλ‹€.

 

 

 

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

class ABC extends myClass implements myInterface1, MyInterface2 {

}
μΈν„°νŽ˜μ΄μŠ€λŠ” λ―Έμ™„μ„± λ©”μ„œλ“œλ₯Ό μ™„μ„±ν•˜κΈ° λ•Œλ¬Έμ— μƒμ†ν•˜λŠ” 의미인 extendsκ°€ μ•„λ‹Œ κ΅¬ν˜„ν•˜λŠ” 의미인 implementsλ₯Ό μ‚¬μš©ν•œλ‹€. κ·Έλž˜μ„œ μΈν„°νŽ˜μ΄μŠ€μ— μ •μ˜λœ λ©”μ„œλ“œλŠ” μžμ‹ ν΄λž˜μŠ€μ—μ„œ λͺ¨λ‘ κ΅¬ν˜„λ˜μ–΄μ•Ό μ œλŒ€λ‘œ μž‘λ™λœλ‹€.

1. ν•œ ν΄λž˜μŠ€λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό 닀쀑 상속 κ°€λŠ₯ν•˜λ‹€.

ν΄λž˜μŠ€λŠ” 두 λΆ€λͺ¨ ν΄λž˜μŠ€μ— λ™μΌν•œ μ΄λ¦„μ˜ ν•„λ“œ ν˜Ήμ€ λ©”μ„œλ“œκ°€ μ‘΄μž¬ν•˜λ©΄ μ–΄λŠ λΆ€λͺ¨ 클래슀의 ν•„λ“œ(λ©”μ„œλ“œ)λ₯Ό κ°€μ Έμ˜¬μ§€ ν˜Όλ™ν•˜μ—¬ 였λ₯˜κ°€ λ°œμƒν•˜κ²Œ 되고 그것을 λ§‰κ³ μž ν΄λž˜μŠ€λŠ” λ‹€λ₯Έ 클래슀λ₯Ό 닀쀑 μƒμ†ν•˜λŠ” 것을 막고 μžˆλ‹€. ν•˜μ§€λ§Œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 닀쀑 μƒμ†ν•˜λŠ” 것은 κ°€λŠ₯ν•˜λ‹€. μ™œλƒν•˜λ©΄ λͺ¨λ“  ν•„λ“œκ°€ public static final둜 μ •μ˜λ˜μ–΄ 각 μΈν„°νŽ˜μ΄μŠ€ 내에 μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ— μ €μž₯ 곡간이 κ²ΉμΉ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ΄λ‹€. λ©”μ„œλ“œμ˜ 경우 μ–΄μ°¨ν”Ό μžμ‹ ν΄λž˜μŠ€μ—μ„œ μ™„μ„±λ˜κΈ° λ•Œλ¬Έμ— λ¬Έμ œλ˜λŠ” 뢀뢄이 μ—†λ‹€.

2. ν•œ ν΄λž˜μŠ€λŠ” ν•˜λ‚˜μ˜ ν΄λž˜μŠ€μ™€ μ—¬λŸ¬ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ™μ‹œμ— 상속할 수 μžˆλ‹€.
클래슀만 닀쀑 μƒμ†ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ 문제될 건 μ—†λ‹€. λ‹€λ§Œ 상속할 경우 μˆœμ„œμ— μœ μ˜ν•΄μ•Όν•œλ‹€. λ°˜λ“œμ‹œ μ²˜μŒμ— 클래슀 λ¨Όμ € 상속해주고 κ·Έ λ‹€μŒ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μƒμ†ν•΄μ•Όν•œλ‹€.

3. μΈν„°νŽ˜μ΄μŠ€λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속할 수 μžˆλ‹€.
μΈν„°νŽ˜μ΄μŠ€λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속할 수 μžˆμ§€λ§Œ μ΄λ•Œ implementsκ°€ μ•„λ‹Œ extends둜 μƒμ†ν•΄μ•Όν•œλ‹€. μ˜ˆμ‹œλ₯Ό λ“€μ–΄λ³΄μžλ©΄ interface myInterface1 extends myInterface2의 ν˜•μ‹μ΄ 될 것이닀.

4. μΈν„°νŽ˜μ΄μŠ€λŠ” 클래슀λ₯Ό μƒμ†ν•˜μ§€ μ•ŠλŠ”λ‹€.
μΈν„°νŽ˜μ΄μŠ€λŠ” μ™„μ„±λ˜μ§€ μ•Šμ€ ν…Œλ‘λ¦¬λ§Œ μžˆλŠ” λ©”μ„œλ“œλ₯Ό κ°€μ§„λ‹€. 그런데 μ™„μ„±λœ λ©”μ„œλ“œλ₯Ό μ§€λ‹Œ 클래슀λ₯Ό μƒμ†ν•˜κ²Œ λœλ‹€λ©΄ μΈν„°νŽ˜μ΄μŠ€μ˜ μ˜λ―Έκ°€ μ‚¬λΌμ§€κ²Œ λ˜λ‹ˆ ν΄λž˜μŠ€λŠ” μΈν„°νŽ˜μ΄μŠ€μ— μƒμ†λ˜μ§€ λͺ»ν•œλ‹€.

5. λͺ¨λ“  μžμ‹ 클래슀의 κ΅¬ν˜„ λ©”μ„œλ“œλŠ” public만 κ°€λŠ₯ν•˜λ‹€.
ν•˜μœ„ ν΄λž˜μŠ€μ— μ˜€λ²„λΌμ΄λ”©μ΄ μˆ˜ν–‰λ  λ•Œ μ ‘κ·Ό μ§€μ •μžλŠ” λΆ€λͺ¨ λ©”μ„œλ“œμ˜ μ ‘κ·Ό μ§€μ •μžμ™€ μ ‘κ·Ό λ²”μœ„κ°€ κ°™κ±°λ‚˜ 컀야 ν•œλ‹€. μΈν„°νŽ˜μ΄μŠ€μ˜ λͺ¨λ“  ν•„λ“œμ™€ λ©”μ„œλ“œλŠ” public으둜 κ°•μ œλ˜μ–΄μžˆμ–΄μ„œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μƒμ†λ°›λŠ” λͺ¨λ“  μžμ‹ ν΄λž˜μŠ€λŠ” public μ ‘κ·Ό μ§€μ •μžλ§Œ κ°€μ Έμ•Όν•œλ‹€.

μΈν„°νŽ˜μ΄μŠ€μ˜ 객체 생성 방법은 좔상 ν΄λž˜μŠ€μ™€ λ™μΌν•˜λ‹€.

 

 

 

μΈν„°νŽ˜μ΄μŠ€μ˜ λ””ν΄νŠΈ λ©”μ„œλ“œ

interface myInterface {
    public default void myMethod {
    
    }
}
myInterfaceκ°€ μ—¬λŸ¬ ν΄λž˜μŠ€μ— μƒμ†λ˜μ–΄ μ‚¬μš©λ˜κ³  μžˆλ‹€κ³  κ°€μ •ν•˜μž. 무수히 λ§Žμ€ ν΄λž˜μŠ€μ— μ‚¬μš©λ˜κ³  μžˆλŠ” 와쀑에 μΈν„°νŽ˜μ΄μŠ€ 내에 μƒˆλ‘œμš΄ λ©”μ„œλ“œκ°€ μΆ”κ°€λœλ‹€λ©΄? myInterfaceλ₯Ό μƒμ†ν•˜κ³  μžˆλŠ” λͺ¨λ“  ν΄λž˜μŠ€μ— 였λ₯˜κ°€ λ°œμƒν•  것이닀. κ·Έ μ΄μœ λŠ” μΈν„°νŽ˜μ΄μŠ€μ— μ •μ˜λœ λ©”μ„œλ“œλŠ” μƒμ†ν•œ ν΄λž˜μŠ€μ—μ„œ λͺ¨λ‘ κ΅¬ν˜„λ˜μ–΄μ•Όν•˜λŠ”λ°, μƒˆλ‘œ μΆ”κ°€λœ λ©”μ„œλ“œλŠ” λͺ¨λ“  ν΄λž˜μŠ€μ— κ΅¬ν˜„λ˜μ§€ μ•Šμ•„μ„œ 였λ₯˜κ°€ λ°œμƒν–ˆλ‹€. 이런 λ¬Έμ œμ μ„ ν•΄κ²°ν•˜κ³ μž μΆ”κ°€λœ 것이 default λ©”μ„œλ“œμ΄λ‹€. λ””ν΄νŠΈ λ©”μ„œλ“œλŠ” μΈν„°νŽ˜μ΄μŠ€ 내뢀에 μ™„μ„±λœ λ©”μ„œλ“œλ₯Ό μ‚½μž…ν•˜μ—¬ μžμ‹ ν΄λž˜μŠ€μ—μ„œ 이 λ©”μ„œλ“œλ₯Ό λ°˜λ“œμ‹œ μ˜€λ²„λΌμ΄λ”© ν•˜μ§€ μ•Šμ•„λ„ λ˜λŠ” 것이닀. 

 

 

 

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

interface myInterface {
    default void myMethod(){
        System.out.println("MyInterface의 λ©”μ„œλ“œ 좜λ ₯");
     }
}

class myClass implements myInterface {
    @Override
    public void myMethod(){
        myInterface.super.myMethod();
        System.out.println("myClass의 λ©”μ„œλ“œ 좜λ ₯");
    }
}
myClass.myMethod( );λ₯Ό ν˜ΈμΆœν•œλ‹€λ©΄, super둜 인해 μΈν„°νŽ˜μ΄μŠ€μ˜ λ©”μ„œλ“œκ°€ 호좜된 ν›„ κ·Έ λ‹€μŒμ— 클래슀의 λ©”μ„œλ“œκ°€ 호좜될 것이닀. superλ₯Ό ν΄λž˜μŠ€μ— μ‚¬μš©ν•  땐, κ·Έλƒ₯ λ©”μ„œλ“œλͺ… μ•žμ— super.을 뢙이면 λλŠ”λ° μΈν„°νŽ˜μ΄μŠ€μ˜ 경우 μΈν„°νŽ˜μ΄μŠ€λͺ….super.λ©”μ„œλ“œλͺ…을 λΆ™μ˜€λ‹€λŠ” 차이가 μžˆλ‹€. μ•„λ§ˆ κ·Έ μ΄μœ λŠ” μΈν„°νŽ˜μ΄μŠ€λŠ” 닀쀑 상속이 κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ—, μ–΄λ–€ μΈν„°νŽ˜μ΄μŠ€μ˜ λ©”μ„œλ“œλ₯Ό λ°©λ¬Έν•  것인지 μ •ν™•ν•˜κ²Œ μ μ–΄μ•Όν•˜λŠ” λ“― ν•˜λ‹€.

 

 

 

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

interface MyInterface {
    static void greet() {
        System.out.println("Hello from Interface!");
    }
}

public class Main {
    public static void main(String[] args) {
        MyInterface.greet(); 
    }
}
μΈν„°νŽ˜μ΄μŠ€μ— static λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλŠ”λ°, 이런 경우 Main ν΄λž˜μŠ€μ— λ³΄μ΄λŠ” 것과 같이 객체λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³  λ°”λ‘œ μΈν„°νŽ˜μ΄μŠ€μ˜ greet λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  수 있게 됐닀. μ΄λ ‡κ²Œ 되면 μ˜€λ²„λΌμ΄λ”© μ‹ κ²½μ“Έ 것 없이 λ…λ¦½μ μœΌλ‘œ 쑴재 κ°€λŠ₯ν•˜λ©°, static λ©”μ„œλ“œλ₯Ό μ™ΈλΆ€λ‘œ λΉΌμ§€ μ•Šμ•„λ„ λ˜μ–΄ 개발자 μž…μž₯에선 μ’€ 더 νŽΈλ¦¬ν•΄μ§„λ‹€.

+ Recent posts