Java - 인터페이스(Interface)

컴퓨터/Java

728x90
반응형

클래스보다 더 큰 개념의 인터페이스

Java언어에서 인터페이스는 클래스의 틀을 잡아주는 역할을 하는 개념입니다. 추상 클래스는 클래스 내부에 추상적인 개념을 넣어서 만들 수 있는 클래인 반면 인터페이스의 경우 100% 추상적인 개념만을 넣어 틀의 형태로만 동작을 하는 녀석입니다. 왜 Java언어에서는 인터페이스라는 개념을 적용하고 사용하는지 사용법과 특징에 대해 알아보겠습니다.

 

인터페이스 선연 형식

public interface interfacetest {
	public void interfacefunc1();
	public void interfacefunc2(int number);
	public abstract void interfacefunc3();
}

위처럼 선언이 가능합니다. 이때에 인터페이스를 선언하여 사용할 때 들어갈 수 있는 구성요소는 아래와 같습니다.

  • 추상 메서드
  • 상수 필드
  • 디폴트 메서드
  • 정적 메서드

선언된 인터페이스 사용하기

public class TestClass implements interfacetest{

	@Override
	public void interfacefunc1() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void interfacefunc2(int number) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void interfacefunc3() {
		// TODO Auto-generated method stub
		
	}

}

선언된 인터페이스를 사용하기 위해서는 인터페이스를 상속하기 위한 키워드인 implements를 사용합니다.

 

추상 클래스와 인터페이스의 차이점 1 

추상 클래스는 추상 메서드를 넣어서 만들 수 있는 클래스의 확장의 개념으로 사용하게 됩니다. 

따라서 추상 클래스로 선언을 하고 추상적인 개념이 포함되지 않을 수도 있고 일반 메서드들을 가지고 있을 수도 있습니다.

 

인터페이스는 추상클래스와는 다르게 한정적인 구성요소를 가지고 있습니다. 클래스의 확장의 개념이 아닌 클래스를 위한 틀로서 존재하게 됩니다. 

 

추상 클래스와 인터페이스의 차이점 2 - 안전한 다중 상속

다중 상속이란 하나의 클래스가 여러 개의 상속이 이루어지는 것을 말합니다. 클래스들끼리 상속을 한다면 아래와 같이 충돌이 일어날 수 있게 됩니다.

class Human {
	public void func() {
		System.out.println("Human클래스입니다.");
	}
}
class Man{
	public void func() {
		System.out.println("Man클래스 입니다.");
	}
}

class MyMan extends Human, Man{
	// Man.func
	// Human.func 
	// 두개의 정의 된 메서드의 이름이 동일해 충돌이 일어남.
}

상속받는 과정에서 위와 같이 동일한 이름의 메서드들이 있다면 충돌이 일어납니다. 그래서 Java에서는 클래스들 간의 다중 상속을 막아뒀습니다. (추상 클래스 또한 정의된 메서드가 들어갈수 있으므로 불가능 합니다.)

그리고 이 다중 상속의 개념을 사용할 수 있는 것이 바로 인터페이스입니다. 인터페이스의 경우를 한번 보도록 하죠

public interface interfacetest {
	public void interfacefunc1();
	public void interfacefunc2(int number);
	public abstract void interfacefunc3();
}
public interface interfacetest1 {
	public void interfacefunc1();
	public void interfacefunc2(int number);
	public abstract void interfacefunc3();
}
public class TestClass implements interfacetest, interfacetest1{

	@Override
	public void interfacefunc1() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void interfacefunc2(int number) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void interfacefunc3() {
		// TODO Auto-generated method stub
		
	}

}

두 개의 동일한 이름을 가진 추상 메서드들이 존재하는 인터페이스를 다중 상속을 받아 클래스를 만들었습니다. 

인터페이스를 사용할 경우 인터페이스 안에는 정의된 메서드가 존재할 수 없으므로 위와 같이 사용할 수 있게 됩니다.

이 때문에 Java에서 인터페이스를 가지고 추상적인 개념, 클래스의 틀을 만드는 데 사용을 합니다.

728x90
반응형

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :