Language & Framework/Java

[JAVA] :: μžλ°” 기초 6 :: μΈν„°νŽ˜μ΄μŠ€ (Interface)

kyo 2021. 7. 25. 22:54

πŸ‘€ λ…Έμ…˜μœΌλ‘œ 보기

 

0. μΈν„°νŽ˜μ΄μŠ€λž€?


μΈν„°νŽ˜μ΄μŠ€λŠ” μΌμ’…μ˜ μΆ”μƒν΄λž˜μŠ€λ‘œ μΆ”μƒλ©”μ†Œλ“œ, μƒμˆ˜λ§Œ 포함 κ°€λŠ₯

πŸ’‘ μžλ°” 8 λΆ€ν„° default λ©”μ†Œλ“œ, static λ©”μ†Œλ“œλ₯Ό μΈν„°νŽ˜μ΄μŠ€μ˜ λ©€λ²„λ‘œ μ‚¬μš©κ°€λŠ₯

 

좔상 클래슀처럼 new λ₯Ό μ΄μš©ν•œ 객체생성을 ν•  수 μ—†λ‹€.

  • μΈν„°νŽ˜μ΄μŠ€μ˜ μ„ μ–Έκ³Ό 상속
interface InterfaceName {
} 

class ClassName implements InterfaceName{

}

 

 

1. μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ“°λŠ” 이유


κ·Έλ ‡λ‹€λ©΄ 좔상 클래슀λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ“°λŠ” μ΄μœ κ°€ λ¬΄μ—‡μΌκΉŒ?

 

μΈν„°νŽ˜μ΄μŠ€λŠ” 좔상 클래슀 보닀 더 좔상적인 κ°œλ…μ΄λ‹€.

좔상 ν΄λž˜μŠ€λŠ” κ΅¬ν˜„ λ©”μ„œλ“œλ„ 포함을 ν•  수 μžˆμ–΄ ν™•μž₯의 κ°œλ…μ΄λΌλ©΄

μΈν„°νŽ˜μ΄μŠ€λŠ” κ΅¬ν˜„ μ½”λ“œκ°€ μ—†μ–΄ κΈ°λŠ₯ κ΅¬ν˜„μ„ κ°•μ œν•œλ‹€.

좔상 ν΄λž˜μŠ€λŠ” 닀쀑상속을 μ§€μ›ν•˜μ§€ μ•Šμ§€λ§Œ μΈν„°νŽ˜μ΄μŠ€λŠ” 닀쀑상속이 κ°€λŠ₯ν•˜λ‹€.

 

  • 닀쀑 상속 예
interface Screen{
   public static final int inches = 32;
}

interface Keyboard{
  void input();
}

class Computer implements Screen, Keyboard{
    @Override
    public void input() {
        System.out.println(inches);
    }
}

 

 

2. μΈν„°νŽ˜μ΄μŠ€μ˜ λ‹€ν˜•μ„±


μΈν„°νŽ˜μ΄μŠ€ νƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ‘œ 이λ₯Ό κ΅¬ν˜„ν•œ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°ν•  수 μžˆλ‹€.

  • Attackable μΈν„°νŽ˜μ΄μŠ€ νƒ€μž…μ˜ λ‹€μ–‘ν•œ 클래슀 μΈμŠ€ν„΄μŠ€ 생성
interface Attackable{
	void attack();
}

class Monster implements Attackable{
	String name = "Monster";
    @Override
    public void attack() {
		System.out.println(name);
    }
}

class Player implements Attackable{
	String name = "Player";
    @Override
    public void attack() {
		System.out.println(name);
    }
}

class Zombie implements Attackable{
String name = "Zombie";
    @Override
    public void attack() {
		System.out.println(name);
    }
}

 

μ΄λ ‡κ²Œ μΈν„°νŽ˜μ΄μŠ€ ν˜•μœΌλ‘œ λ‹€λ₯Έ 클래슀 객체λ₯Ό μƒμ„±ν•˜κ²Œ 될 λ•Œ ν•΄λ‹Ή 객체의 λ©”μ„œλ“œλ₯Ό λΆˆλŸ¬μ˜¨λ‹€.

 

class GameStart{
    public static void main(String[] args) {
        Attackable monster = new Monster();
        Attackable player = new Player();
        Attackable zombie = new Zombie();

	monster.attack(); // monster attack 호좜
	player.attack(); // player attack 호좜
	zombie.attack(); // zombie attack 호좜
    }
}

 

 

3. μΈν„°νŽ˜μ΄μŠ€μ˜ μ—¬λŸ¬κ°€μ§€ μš”μ†Œ


μΈν„°νŽ˜μ΄μŠ€μ˜ λͺ¨λ“  λ©€λ²„λ³€μˆ˜λŠ” public static final 이여야 ν•œλ‹€.

μ œμ–΄μžλ₯Ό νŽΈμ˜μƒ μƒλž΅ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆμ–΄ μƒλž΅λœ μ œμ–΄μžλŠ” μ»΄νŒŒμΌλŸ¬μ—μ„œ μžλ™μœΌλ‘œ μΆ”κ°€ν•΄μ€€λ‹€.

μ œμ–΄μžλ₯Ό μƒλž΅ν•œ λ©”μ†Œλ“œλŠ” public abstract둜 μΆ”κ°€λœλ‹€.

  • μΈν„°νŽ˜μ΄μŠ€μ˜ 멀버
interface Person{
   int age = 10; // public static final 
   void eat(); // abstract method
   public default void run(){}; 
   public static void sleep(){}; 
}

 

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


μΈν„°νŽ˜μ΄μŠ€λŠ” 닀쀑 상속이 κ°€λŠ₯ν•˜λ©° μΈν„°νŽ˜μ΄μŠ€ κ°„μ˜ 상속도 κ°€λŠ₯ν•˜λ‹€.

interface InterfaceOne{
    void one();
}

// μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속 λ°›λŠ” μΈν„°νŽ˜μ΄μŠ€
interface InterfaceTwo extends InterfaceOne{ 
    void two();
}

interface InterfaceThree{
    void three();
}

// 닀쀑 상속
class ClassName implements InterfaceTwo, InterfaceThree{ 
    @Override
    public void one() {
    }

    @Override
    public void two() {
    }
		
		@Override
    public void three() {
    }
}

μΈν„°νŽ˜μ΄μŠ€λΌλ¦¬ 상속은 extendsλ₯Ό μ“°λ©° ν΄λž˜μŠ€κ°€ 상속을 λ°›μ„λ•ŒλŠ” implements (κ΅¬ν˜„)을 μ‚¬μš©ν•œλ‹€.

 

 

 

λ””ν΄νŠΈ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  수 있게 λ˜λ©΄μ„œ 이름이 μ€‘λ³΅λ˜μ–΄ μΆ©λŒν•˜λŠ” 경우

 

1. μ—¬λŸ¬ μΈν„°νŽ˜μ΄μŠ€μ˜ λ””ν΄νŠΈ λ©”μ„œλ“œ κ°„μ˜ 좩돌

  • μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ ν΄λž˜μŠ€μ—μ„œ μ‚¬μš©ν•  μΈν„°νŽ˜μ΄μŠ€μ˜ λ””ν΄νŠΈ λ©”μ„œλ“œλ₯Ό  μ˜€λ²„λΌμ΄λ”© ν•΄μ•Ό ν•œλ‹€.

 

2. λ””ν΄νŠΈ λ©”μ„œλ“œμ™€ 쑰상 클래슀의 λ©”μ„œλ“œ κ°„μ˜ 좩돌

  • 쑰상 클래슀의 λ©”μ„œλ“œλ₯Ό μƒμ†ν•˜κ³  λ””ν΄νŠΈ λ©”μ„œλ“œλŠ” λ¬΄μ‹œλœλ‹€.