티스토리 뷰

Dev.BackEnd/JAVA

[JAVA] 8. 인터페이스

_Jbee 2016. 6. 28. 09:52




Chapter 8. 인터페이스 (Interface)

인터페이스의 사전적 정의는 

사물과 사물 사이 또는 사물과 인간 사이의 경계에서, 상호 간의 소통을 위해 만들어진 물리적 매개체나 프로토콜이다.

IT용어로는 컴포넌트에 접속하기 위한 규격이라고 나와있는데, JAVA에서의 인터페이스는 무엇인가


인터페이스
인터페이스란
규제의 일환으로 일종의 추상클래스이다.
추상클래스보다 추상화 정도가 높아서, 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없는 것이 차이점이다.
추상클래스를 미완성 설계도라고 비유했다면, 인터페이스는 밑그림만 그려져있는 설계도를 위한 스케치, 기본 설계도라고 볼 수 있다.

문법
어떤 객체가 있고, (클래스가 있고) 그 클래스가 특정한 인터페이스를 사용한다면
그 클래스는 반드시 인터페이스에 구현되어 있는 메소드를 구현해야 한다,
class 라는 키워드 대신 Interface 라는 키워드를 사용한다.

인터페이스의 멤버들은 다음과 같은 제약사항이 존재한다.
모든 멤버변수는 public static finanl 이어야 하며, 이를 생략할 수 있다.
모든 메서드는 public abstract 이어야 하며, 이를 생략할 수 있다.
생략된 제어자는 컴파일 시에 컴파일러가 자동적으로 추가해주기 때문이다.

인터페이스도 추상클래스처럼 그 자체로는 인스턴스를 생성할 수 없으며,
자신을 상속하는, 인터페이스에서는 구현하는 이라는 단어를 사용하며, implements 라는 키워드로 상속을 한다.

interface I {
    public static final int a = 10;
    public void z();
}

class A implements I // class A는  interface I 를 구현한다.
{
     public abstract void z(){ // interface에 정의되어 있는 메소드를 반드시 구현해야 한다.
    
     }
}

인터페이스를 왜 사용하는가?
많은 사람들이 참여하는 프로젝트가 있다고 하자.
내가 개발할 것을 다른 사람이 이용하여 로직을 구현해야 한다고 한다면,
뭔가 빠른 대처가 필요하다.
그래서 가짜 로직을 만든다.(가짜 클래스)
그러면 내가 구현해 놓은 가짜 클래스를 다른 사람이 이용하여 또 다른 로직을 구현할 수 있다.
가짜 클래스를 대체할 진짜 클래스를 만들었는데 로직에 문제가 발생한다면?
이런 문제를 해결하기 위해(커뮤니케이션의 미스로 인해 발생한 문제)
인터페이스를 도입한다.

인터페이스란 사용될 클래스가 어떠한 메소드들을 갖고 있는가, 어떠한 멤버를 갖고 있는가에 대한
명세서와 같은 역할을 하고 있는 것이다.
implements 를 걸어두면 작성한 인터페이스와 다르면 컴파일 자체가 되지 않기 때문에
협업을 하기 전에 작성한 인터페이스로부터 올바른 결과를 도출해낼 수 있다.
인터페이스는 클래스 조작방법이라고도 볼 수 있다.


규칙
인터페이스에 구현되어 있는 메소드들은 public으로 정의가 되어 있다.
public으로 정의되어야만 한다.(할 수도 없다)
당연하다. 외부에서 조작을 해야 하기 때문이다.

하나의 클래스가 여러 개의 인터페이스를 구현할 수 있다.
구현걸린 인터페이스에 정의되어 있는 모든 메소드를 구현해야 한다.
하나만 상속할 수 있다는 점과 다른 점.

인터페이스도 상속이 가능하다.
그러므로 여러 개의 인터페이스를 걸어둬야할 때,
인터페이스들끼리의 상속을 통해서 하나의 인터페이스만 걸어두면 된다.


abstract vs interface?
정의때려놓고 나중에 구현하는 것 비슷한데?
abstract는 일반적인 클래스와 다를 바가 없다.
하위 클래스가 상속받아서 사용하게 하는 것.
오버라이딩하도록 기대하는 것.
추상 메소드 때문에 추상 클래스가 되는 것.
추상 클래스는 일반 메소드도 포함하는 것이다.

하지만 interface는 구체적인 로직을 갖고 있는 것을 포함하면 안된다.
즉, 본체가 없는 것들만 포함해야 한고 일반 메소드를 포함할 수 없다.
 



Chapter 8. The End

공유하기 링크
TAG
«   2022/08   »
  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      
Total
1,592,200
Today
17
Yesterday
221