티스토리 뷰

  1. 인터페이스(interface)

    1. 인터페이는 일종의 추상 클래스이다.
    2. 추상화 정도가 높아서 일반 메서드나, 맴버변수를 구성원으로 가질 수 없다. (abstract는 가질 수 있다.)
    3. 오직 추상 메서드와 상수만을 맴버로 가질 수 있다.
    4. 다른 클래스 작성을 목적으로 작성된다.
      interface Temp{
       public static final TEMP_MEMBER_VARIABLE = ??;
       public abstract tempMethod(TempType temp);
      }
    • 제약 사항

      1. 모든 맴버 변수는 public static final 로 고정된다. 단, 이를 생략 할 수 있다. (어차피 맴버변수에 모두 접근해야하고 인스턴스를 만들 수는 없으므로 이렇게 쓰는 게 맞다.)
      2. 모든 메서드는 public abstract 이어야 하며, 이를 생략할 수 있다. 단, static메서드와 default 메서드는 예외이다.
        • public이어야 하위 자손이 구현체로 들어가고, 이를 인터페이스에서 호출할 수 있기 때문이다.
        • 원래 인터페이스의 모든 메서드는 추상메서드여야 했는데, JDK 1.8이후부터 static 메서드와 디폴트 메서드가 추가되었다.
    • 인터페이스의 상속 : 인터페이스는 인터페이스만 상속받을 수 있으며, 다중 상속이 가능하다.

        interface Movable{
            void move(int x, int y);
        }
        interface Attackable{
            void attack(Unit u);
        }
        interface Fightable extends Movable, Attackable {}

      인터페이스의 상속도 extends가 가능하며 다중 상속이 가능하다는 것을 유의하자,
      또한 조상으로부터 상속받은 추상 메서드를 맴버로 갖는다는 것도 알아두자,

  2. 인터페이스의 구현

    • 인터페이스는 implements로 자손 클래스에서 구현이 가능하다. 단, 이 때에는 모든 인터페이스를 구현해야한다.
    • 인터페이스의 이름은 주로 ~able로 끝나는데 이는 ~을 할 수 있는 기능을 가지고 있다고 보면 된다.
    • 만일 구현하는 인터페이스 메서드 중에 일부만 구현한다면 abstract 추상 클래스에서 implements하면 된다.
    • 인터페이스의 메서드들은 public이므로 implements한 클래스의 해당 메서들 모두 public일 수 밖에 없다.
  1. 인터페이스를 이용한 다중 상속

    • 실제 인터페이스를 이용하여 다중 상속을 자주 사용하진 않는다.
    • 만약, 다중 상속이 필요한 경우가 있다면 내부의 해당 클래스의 인스턴스를 내부에서 갖도록 하자 (즉, Composition 하라는 것, 맴버변수로 가지라는 말이다.)
    public interface IVCR{
        public void play();
    }
    
    public class TVCR extends Tv implements IVCR{
        VCR vcr = new VCR();
        public void play(){
            vcr.play();
        }
    }
    • 인터페이스를 리턴값으로 쓴다는 것은 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 것이다.
    • 왜냐하면 인터페이스는 인스턴스로 만들 수 없기 때문이다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함