728x90
개요
자바 클래스들이 필수로 사용되어야 하는 기능들을 추상 메서드로 정의하는 것으로 일종의 클래스들의 가이드라인 역할을 하는 구조라 볼 수 있다. 인터페이스 안에는 추상 메서드와 상수만으로 이루어져 있다. 구현 코드가 없기 때문에 인스턴스를 만들 수 없고 자손 클래스가 상속받아 추상 메서드를 재정의하여 사용하게 된다.
인터페이스의 특징을 정리하면 아래와 같다.
- 다중 상속 가능 : class 형식으로 만드러 진 클래스들은 단일 상속만을 지원하는데 반해 인터페이스로 만들어진 구조는 다중 상속을 지원한다.
- 생성자 불가 : 단독으로 인스턴스를 생성할 수 없기 때문에 생성자 사용은 불가하다.
- 메서드 오버라이딩 : 인터페이시를 상속받은 클래스에서는 반드시 추상 메서드들을 재정의(Overriding) 해야 한다.
- 인터페이스를 상속받아 인터페이스를 만들 수 있다. 이때는 extends 키워드를 사용하여 상속받는다.
- 인터페이스를 상속받아 클래스를 만들 때는 implements 키워드를 사용하여 상속받는다.
인터페이스를 사용하는 이유를 간단히 정리해 보자.
- 네이밍 통일 : 같은 인터페이스를 상속받았다면 동일한 이름의 추상 메서드를 재정의해서 사용해야 하므로 자연스럽게 네이밍이 통일되어 가독성 및 유지보수 기능이 향상될 수 있을 것이다.
- 의존성 약화 : 객체 간의 결함도를 낮추어 보다 유연한 개발 방식을 구현할 수 있다.
- 스프링과 같은 프레임워크에서는 DI(Dependency Injection:의존성주입)과 같은 개념의 프로그램을 보다 쉽게 개발할 수 있게 해 준다.
인터페이스 작성하기
인터페이스 안에는 상수와 추상 메서드만을 기술할 수 있다. name과 irum에 final이 붙어 있지 않지만 모두 상수가 된다.
또한 모든 메서드 앞에는 abstract 가 붙어 있어야 하지만 인터페이스에서는 생략하여 사용한다.
interface MyInter1{
String name = "my interface1";
public void sum(int x, int y);
public void div(int x, int y);
}
interface MyInter2{
String irum = "my interface2";
public void mul(int x, int y);
public void sub(int x, int y);
}
인터페이스 사용하기
인터페이스를 상속받아 인터페이스 만들기
인터페이스를 상속받아 또 다른 인터페이스로 확장시킬 수 있다.
interface ExtendsInterface extends MyInter1, MyInter2{ }
위의 인터페이스를 구현한 클래스는 아래와 같이 MyInter1과 MyInter2에 있는 추상 메서드를 모두 재정의해 주어야 한다.
class ExtendsInterExam implements ExtendsInterface{
@Override
public void sum(int x, int y) {
}
@Override
public void div(int x, int y) {
}
@Override
public void mul(int x, int y) {
}
@Override
public void sub(int x, int y) {
}
}
인터페이스를 상속받아 클래스 만들기
public class InterfaceExam implements MyInter1{
@Override
public void sum(int x, int y) {
System.out.println(x+y);
}
@Override
public void div(int x, int y) {
System.out.println(x/(double)y);
}
public static void main(String[] args) {
InterfaceExam ex = new InterfaceExam();
ex.sum(10,20);
ex.div(10,2);
//ex.name = "park";//상수이므로 값을 수정할 수 없음.
}
}
sum(), div() 메서드는 반드시 재정의해야 하며 name 필드는 상수가 되므로 값을 수정할 수 없다.
'BOOKS > 수월한 Java' 카테고리의 다른 글
추상 클래스 (0) | 2024.04.07 |
---|---|
swing으로 만들어본 멀티 메모장 #2/2 (0) | 2023.03.20 |
swing으로 만들어본 멀티 메모장 #1/2 (0) | 2023.03.01 |
List에 담긴 정보를 배열로 변환하기 (0) | 2022.11.27 |
이클립스에서 Data Management로 MySQL 연결하기 (0) | 2021.10.30 |