[Java] 인터페이스(Interface)
by Rev_인터페이스란?
자바에는 클래스 외에 인터페이스가 있다. 이는 자바에서 클래스들이 구현 해야하는 동작을 지정하는 용도로 사용되는 추상 자료형이다.
class 대신에 interface라는 키워드를 이용하여 선언할 수 있으며 메소드 시그니처와 상수 선언, default method 정의 가능
* 메소드 시그니처: 메소드명, 타입, 변수명을 명시한 것
클래스에서 인터페이스를 구현하기 위해서는 implements 키워드를 사용하여 구현하며, 하나의 클래스는 여러개의 인터페이스를 상속받아 구현할 수 있다.
public interface MemberRepository {
Member save(Member member); // 회원 저장
Optional<Member> findById(Long id); // ID
Optional<Member> findByName(String name); // 이름
List<Member> findAll(); // 모든 회원 list
}
위처럼 인터페이스를 정의할 수 있다.
public class MemoryMemberRepository implements MemberRepository{
...
}
클래스에서 사용할 때는 implements 활용
장점
1. 메소드 사전 정의 가능
개개인마다 사용하는 메서드와 변수명이 다르다면 개발에 혼란이 올 것이다.
이럴 때 인터페이스를 정의한다면 미리 메소드를 정할 수 있고, 동일한 기능에 동일한 함수명을 사용할 수 있을 것이다.
2. 상속을 통한 이점
자식 클래스가 여러 부모 클래스를 상속받을 수 있다면, 다양한 동작을 수행할 수 있다는 장점을 가지게 될 것이다. 하지만 클래스를 이용하여 다중 상속을 할 경우 여러 문제가 발생할 수 있어 자바에서는 클래스를 통한 다중 상속은 지원하지 않는다.
하지만 다중 상속의 이점을 버릴 수는 없기에 자바에서는 인터페이스를 이용해 다중 상속을 지원하고 있다.
3. 대규모 프로젝트 개발 시 일관되고 정형화된 개발을 위한 표준화 가능
4. 클래스의 작성과 인터페이스의 구현을 동시에 진행할 수 있으므로, 개발 시간을 단축 가능
5. 클래스와 클래스 간의 관계를 인터페이스로 연결하면, 클래스마다 독립적인 프로그래밍이 가능
예시
public interface Animal {
public abstract void cry(); // 추상 메소드 구현
}
public interface Pet {
public abstract void play();
}
Animal과 Pet 두 인터페이스를 정의하였다.
public class Cat implements Animal, Pet {
@Override
public void cry() {
System.out.println("cat!");
}
@Override
public void play() {
System.out.println("catch rat");
}
}
public class Dog implements Animal, Pet {
@Override
public void cry() {
System.out.println("dog!");
}
@Override
public void play() {
System.out.println("walk");
}
}
Cat 클래스와 Dog 클래스는 인터페이스의 cry(), play() 메소드를 오버라이드 하여 사용하였다.
public class Main {
public static void main(String[] args) {
Cat c = new Cat();
Dog d = new Dog();
c.cry();
c.play();
d.cry();
d.play();
}
}
위처럼 메인메소드를 통해 구현해 사용할 수 있다.
'Language > Java' 카테고리의 다른 글
[Java] Stack 클래스 (0) | 2022.10.11 |
---|---|
[Java] HashSet (0) | 2022.08.05 |
[Java] Scanner 클래스 (0) | 2022.07.25 |
블로그의 정보
Hi Rev
Rev_