인터페이스
인터페이스란?
인터페이스는 일종의 추상 클래스지만, 추상 클래스보다 추상화 정도가 높다.
일반 메서드나 멤버 변수는 가질 수 없고, 오직 추상 메서드와 상수만을 멤버로 가질 수 있다.
- 모든 메서드는 public abstract
- 모든 변수는 public static final
→ 생략해도 컴파일러가 자동으로 추가해준다.
public interface Animal {
void sound(); // public abstract
int MAX_AGE = 20; // public static final
}
- 인터페이스는 인스턴스를 생성할 수 없다.
- implements 키워드를 사용해 인터페이스를 구현한다.
- 모든 메서드를 구현하지 않으면, 해당 클래스는 추상 클래스로 선언해야 한다.
interface Animal {
void sound();
}
class Dog implements Animal {
public void sound() {
System.out.println("멍멍!");
}
}
인터페이스 상속
- 인터페이스는 다른 인터페이스로부터만 상속받을 수 있다.
- 다중 상속이 가능하다.
interface Flyable {
void fly();
}
interface Swimmable {
void swim();
}
interface SuperAnimal extends Flyable, Swimmable {
void speak();
}
다형성과 인터페이스
인터페이스 타입의 참조변수로 이를 구현한 클래스의 인스턴스를 참조할 수 있다.
Animal dog = new Dog();
dog.sound(); // 멍멍!
인터페이스는 매개변수 타입이나 리턴 타입으로도 사용할 수 있고, 인터페이스 타입으로 형변환도 가능하다.
void makeSound(Animal animal) {
animal.sound();
}
Animal createAnimal() {
return new Dog();
}
따라서 인터페이스는 다음과 같이 메서드의 매개변수의 타입으로 사용될 수 있다.
리턴타입이 인터페이스라는 것은 메서드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 것을 의미한다.
인터페이스의 장점
- 개발 시간 단축
선언부만 알고 있으면 구현 클래스 없이도 개발이 가능하다. - 표준화 가능
공통의 인터페이스를 기준으로 일관된 개발이 가능하다. - 관계 없는 클래스에 공통점 부여
서로 관련 없는 클래스들이 하나의 인터페이스를 구현함으로써 관계를 맺을 수 있다. - 독립적인 프로그래밍 가능
인터페이스를 사용하면 클래스 간 결합도를 낮춰 유지보수가 쉬운 코드가 된다.
예시 코드
interface Soundable {
void sound();
}
class Dog implements Soundable {
public void sound() {
System.out.println("멍멍!");
}
}
class Robot implements Soundable {
public void sound() {
System.out.println("삐비빅!");
}
}
public class Main {
public static void main(String[] args) {
Soundable s1 = new Dog();
Soundable s2 = new Robot();
s1.sound(); // 멍멍!
s2.sound(); // 삐비빅!
}
}
'개발 새발 > JAVA' 카테고리의 다른 글
[Java] 자바 - 지네릭스 (0) | 2025.04.17 |
---|---|
[Java] 자바 객체지향 - 추상클래스 VS 인터페이스 (0) | 2025.04.10 |
[Java] 자바 객체지향 - 추상클래스 (0) | 2025.04.09 |
[Java] 자바 객체지향 - 클래스 멤버/인스턴스 멤버 (0) | 2025.04.07 |
[Java] 자바 배열(array) (0) | 2025.04.04 |