Java
[Java]인터페이스
codi-3
2024. 8. 12. 19:44
Java 인터페이스는 객체지향 프로그래밍에서 중요한 개념으로, 클래스들이 특정 메서드를 구현하도록 강제하는 방법을 제공한다. 인터페이스는 일종의 계약이라고 볼 수 있다. 이 계약을 따르는 모든 클래스는 인터페이스에 정의된 메서드를 구현해야 한다.
🔍 인터페이스의 특징
- 추상 메서드만 포함: 인터페이스 내에 선언된 메서드는 기본적으로 추상 메서드라고 한다. 즉, 메서드의 구현부가 없으며, 이를 구현하는 클래스에서 실제 메서드를 정의해야 합니다.
- 다중 상속 가능: 자바는 클래스의 다중 상속을 허용하지 않지만, 인터페이스는 여러 개를 구현할 수 있다. 이는 클래스가 여러 인터페이스에서 정의된 메서드를 모두 구현하도록 강제할 수 있음을 의미한다.
- 구현 강제: 인터페이스를 구현하는 클래스는 인터페이스에 선언된 모든 메서드를 구현해야 한다. 그렇지 않으면 클래스는 추상 클래스로 선언되어야 한다.
- 상수 선언: 인터페이스에서는 상수(static final)도 선언할 수 있다. 이 상수들은 인터페이스를 구현하는 모든 클래스에서 접근할 수 있다.
🚀 인터페이스의 사용 목적
- 코드의 일관성 유지: 인터페이스를 통해 특정 기능을 강제함으로써, 다양한 클래스들이 공통된 방식으로 동작하도록 할 수 있다.
- 다형성 구현: 인터페이스 타입으로 객체를 다룰 수 있기 때문에, 하나의 인터페이스로 여러 클래스의 객체를 동일한 방식으로 처리할 수 있다.
- 유연한 설계: 인터페이스를 사용하면 클래스 간의 결합도를 낮출 수 있어, 더 유연하고 확장 가능한 프로그램을 설계할 수 있다.
🔡 예시
// 인터페이스 정의
interface Animal {
void sound(); // 추상 메서드
void move();
}
// 인터페이스 구현
class Dog implements Animal {
@Override
public void sound() {
System.out.println("Bark");
}
@Override
public void move() {
System.out.println("Runs");
}
}
class Cat implements Animal {
@Override
public void sound() {
System.out.println("Meow");
}
@Override
public void move() {
System.out.println("Jumps");
}
}
public class Main {
public static void main(String[] args) {
Animal dog = new Dog();
Animal cat = new Cat();
dog.sound(); // 출력: Bark
dog.move(); // 출력: Runs
cat.sound(); // 출력: Meow
cat.move(); // 출력: Jumps
}
}
저번 팀과제에서 자바의 객체화를 위해 메서드마다 static을 사용해 메모리에 할당하는 대신 인터페이스나 추상화 클래스 사용하여 Java의 객체지향성을 더 끌어올려보라는 피드백이 있서다. 유지보수 측면이나 메모리 할당 측면에서 훨씬 더 유리하지만 아직 완전히 익숙하지 않아 앞으로 더 사용을 해봐야 할 거 같다.