본문 바로가기

BE/JAVA

[JAVA] 자바 인터페이스(Interface) 기본 및 활용

목차
1) 인터페이스란? 
2) 인터페이스 특징 
3) 인터페이스 구현 

 

📌1 ) 인터페이스란?  

인터페이스는 추상 메서드만을 가질 수 있고 구현메서드는 가질 수 없는 일종의 추상 클래스입니다.  

위의 추상 클래스와 다른 점은 자식 클래스들의 기능 유사도인데요. 추상클래스는 서로 비슷한 기능을 하는 클래스들을 묶을 때 사용하며, 인터페이스는 서로 다른 기능을 하는 클래스들을 묶을 때 인터페이스를 사용합니다.

 

인터페이스는 100% 다형성 보장

부모 클래스가 인터페이스이면 자식 클래스가 무조건 구현되어야 합니다. 

즉 부모 인터페이스의 모든 메서드들을 자식 클래스에서 반드시 재정의되어야 하기 때문에 다형성이 보장됩니다. 

 

인터페이스 멤버 변수 

인터페이스 멤버 변수는  public static final 로만 지정가능하며 생략 가능합니다 .

또한 멤버 함수는 public abstract final 로만 선언 가능합니다.

실제 변수를 int value = 0; 으로 선언하는 경우  public static final가 생략되어 있는 형태입니다. 

public static final int value = 100;
public String str = "s"; //static final 생략 가능 
public abstract final void print(){ }
public void draw(){ }

 

인터페이스 다중 상속 

인터페이스는 다중 상속이 가능합니다. (예 : 자식 D 클래스가 A,B,C 여러 부모 클래스 상속) 

부모가 추상 클래스인 경우와 달리 부모가 인터페이스인 경우 자식 클래스는 인터페이스를 여러개 상속 받을 수 있습니다. 

public class 클래스명  implements 인터페이스1, 인터페이스2, ..

 

 

📌 2) 인터페이스 특징 

1) 다중 상속 가능 

- 자식 클래스가 여러 부모 인터페이스들을 상속받을 수 있습니다. 

2) 추상 메서드만 보유 

- 인터페이스는 추상 메서드만 가지고 있습니다. 

3) 생성자 생성 불가 

- 디폴트 생성자, 인자 있는 생성자 모두 생성이 불가합니다. 

4) 메소드 오버라이딩 필수 

- 자식클래스는 부모 인터페이스의 함수를 모두 오버라이딩해야 합니다. 

 


📌 3) 인터페이스 구현 

인터페이스 구현에는 여러 가지 방법이 있으나, 아래와 같이 단일 인터페이스를 구현할 예정입니다. 

부모 클래스는 Company 인터페이스이며,

자식은 Company 인터페이스를 상속받는 Desingn Company, IT Company 클래스입니다. 

 

부모) Company  Interface 

회사(Company)라는 이름의 인터페이스를 선언합니다. 인터페이스는 아래와 같이 추상 변수/메서드만 선언가능합니다. 

public interface Company {
	public String parentComName = "부모 회사";
	public void makeProduct();
}

 

자식 a) Design Company  Class 

자식 클래스의 경우 회사(Company) 클래스를 상속받는 디자인 회사(Design Company)로 선언했습니다. 

생성자를 통해 comName 을 세팅하도록 인자있는 생성자를 선언해주었습니다.  또한

자식 클래스의 경우 부모 추상 클래스를 반드시 오버라이딩해주어야 합니다.


public class DesignCompany implements Company {
	private String comName;
	DesignCompany(String comName){
		this.comName = comName;
	}
	@Override
	public void makeProduct() {
		System.out.println("design product");
	}
}

 

자식 b) IT Company Class 

회사(Company) 클래스를 상속받는 IT 회사(IT Company) 자식 클래스를 선언했습니다. 

자식 클래스의 경우, 부모 추상 클래스를 반드시 오버라이딩해주어야 하며, 추가로 자식만의 메서드를 선언할 수 있습니다. 

public class ITCompany implements Company {
	String compName;
	ITCompany(String comName) {
		this.compName = comName;
	}
	public void makeProgram() {
		System.out.println("make it program");
	}
	@Override
	public void makeProduct() {
		System.out.println("it product");
	}
}