인터페이스는 외부와 상호작용하기 위한 역할을 합니다.
인터페이스를 이해하기 위해 예시를 들어보겠습니다.
ex)
현대 자동차와 같은 공장에서는 부품 업체에서 생산된 부품들을 조립합니다. 부품 업체들은 각기 부품을 만들 것입니다. 부품 중에서 타이어와 차축을 연결하는 두 개의 부품 업체가 있다고 가정합니다. 타이어를 만드는 업체는 타이어를 만들기 전에 차축과 어떻게 연결할 것인지 차축을 만드는 업체와 미리 이야기해야 합니다. 어떻게 생기고 크기가 어떤 볼트를 사용하여 연결을 할 것인지 미리 정해야 합니다. 그렇지 않으면 조립 시에 타이어와 차축이 조립이 안 되는 상황을 맞이할 것입니다. 여기서 볼트의 규격이 인터페이스라고 할 수 있습니다.
1. 인터페이스의 정의
자바에서의 인터페이스도 이와 유사한 역할로 사용됩니다. 인터페이스는 클래스와 유사한 방법으로 선언합니다.
하지만, 인터페이스는 상수와 메서드의 이름만 정의할 수 있습니다.
메서드의 이름만 있고 메서드의 몸체는 정의하지 않습니다. 메서드의 이름은 차축과 타이어를 연결할 볼트의 규격과 유사합니다. 이 인터페이스를 이용해서 타이어에의 볼트가 들어갈 구멍을 만들고, 차축의 볼트를 만들 것입니다.
인터페이스는 다른 클래스에 의해 구현되어야 사용될 수 있습니다. 또한 인터페이스는 다른 인터페이스들을 상속받을 수 있습니다.
2. 인터페이스 예시 코드
Figure.java(interface)
Figure 인터페이스르 정의하였습니다. 메서드의 이름과 메서드의 매개변수들만 정의하고 몸체는 정의하지 않았습니다.
인터페이스를 정의하는 것은 클래스를 정의하는 것과 유사합니다.
인터페이스는 기본적으로 상속이 가능합니다. 클래스에서는 단 한 개의 클래스만 상속이 가능한 단일 상속 구조인데 반해 인터페이스는 다중 상속이 가능합니다.
이렇게 미리 정의된 interface를 통해서 저 interface를 쓸려면 상속받는 class 도 무조건 저 메서드를 포함시켜라 라는 제약이 걸리게 됩니다. 아래서에서 저 interface(제약)을 상속받는 class를 구현해 보겠습니다.
Triangle.java-----Figure.java인터페이스를 implements 하고 있는 클래스입니다.
Rectangle.java------Figure.java인터페이스를 implements 하고 있는 클래스입니다.
Figure 인터페이스를 이용해서 Triangle클래스와 Rectangle 클래스를 구현하였습니다. 도형(Figure.java) 인터페이스에서는 면적을 반환하는 getArea() 메서드와 도형의 이름을 반환하는 getName() 메서드만 정의하였다. Figure 인터페이스를 구현받은 각 클래스에서 이 메서드의 내용을 상세 구현하였습니다.
이제 이 인터페이스를 메인 class에서 사용해 보겠습니다.
Main.class(UseInterface.java)-----메인 메서드는 UserInterface.java 클래스 안에 구현.
calcArea 메서드의 매개변수로 Figure 인터페이스를 사용하였습니다.
자바의 모든 객체가 테이터 타입으로 사용될 수 있듯이 인터페이스도 데이터 타입으로도 사용될 수 있습니다.
새로운 UseInterface 객체를 선언하고 calcArea 인자에 Rectangel, Triangle객체를 넣었습니다.
calcArea 메서드를 구현하는 입장에서는 매개변수 Figure에서 getArea메서드를 제공한다는 사실만 알면 됩니다.
매개변수에 Rectangle이 전달되던지, Triangle이 전달되는지 신경 슬 필요가 없습니다.
인터페이스는 이러한 장점을 가지고 있습니다.
실행 결과창
'IT > JAVA' 카테고리의 다른 글
JVM이란? / JVM의 구조 - 사좋배 공유 (0) | 2019.07.29 |
---|---|
[JAVA] 자바 상속 - 간단한 예제 - 사좋배 공유 (0) | 2019.05.01 |
[JAVA] 자바 접근 제어자란? 접근제어자의 종류 - 사좋배 공유 (0) | 2019.05.01 |
[JAVA] 자바 클래스란? 클래스의 기본 예제 (예제파트)자바 - 사좋배 공유 (0) | 2019.04.30 |
[JAVA] 자바 클래스란? 클래스의 기본 개념 (개념파트)자바 - 사좋배 공유 (0) | 2019.04.28 |