인터페이스(interface)
- 클래스와 비슷하며 완벽한 abstract클래스가 interface가 될 수 있습니다.
abstract클래스 : 모든 메소드가 abstract 메소드인 경우를 이야기합니다.
- 인터페이스의 모든 메소드는 반드시 abstarct메소드여야 합니다.
- 인터페이스를 문법적으로 이용하면 단일 상속만 가능한 자바에서 다중상속의 효과를 낼 수 있습니다.
인터페이스는 상속(extends)이 아닌 구현(implements)을 통해 작업합니다.
implements는 extends와 다르게 여러 인터페이스를 사용할 수도 있습니다.
- 인터페이스에서 선언하는 모든 메소드는 자동으로 public abstract로 선언됩니다.
그러므로 오버라이딩시 무조건 public으로 선언해야 합니다.
- 인터페이스에서 선언하는 모든 변수는 자동으로 public static final로 선언됩니다.
메소드없이 public static final로 선언되는 값을 위해 인터페이스를 사용하기도 합니다.
.
.
추상화 클래스 대신 인터페이스를 이용한다면 어떻게 해야할까?
인터페이스를 만든다음에 메소드를 선언만 합니다.
그리고 또 다른 동작 클래스를 만들어 실제 실행 메소드를 만듭니다.
.
.
interface PersonaleNumberStorage
{
void addPersonalInfo(String name, String perNum);
String searchName(String perNum);
// 인터페이스
}
class PersonalNumInfo
{
String name, number;
PersonalNumInfo(String name, String number){
this.name = name;
this.number = number;
}
String getName(){ return name; }
String getNumber(){ return number; }
}
class PersonaleNumberStorageImpl implements PersonaleNumberStorage
{
PersonalNumInfo[] perArr;
int numOfPerInfo;
public PersonaleNumberStorageImpl(int sz){
perArr = new PersonalNumInfo[sz];
numOfPerInfo = 0;
}
public void addPersonalInfo(String name, String perNum){
perArr[numOfPerInfo] = new PersonalNumInfo(name, perNum);
numOfPerInfo++;
}
public String searchName(String perNum){
for (int i = 0; i < numOfPerInfo ; i++)
{
if (perNum.equals(perArr[i].getNumber()))
{
return perArr[i].getName();
}
}
return null;
}
}
class AbstractInterface2
{
public static void main(String[] args)
{
PersonaleNumberStorage storage = new PersonaleNumberStorageImpl(100);
storage.addPersonalInfo("홍길동", "950000-1122333");
storage.addPersonalInfo("전우치", "970000-1122333");
System.out.println(storage.searchName("950000-1122333"));
System.out.println(storage.searchName("970000-1122333"));
}
}
.
.
상속이랑 비슷하지만 인터페이스를 상속할 때는 implements를 이용하여 상속받는다.
728x90
반응형
'Java > 본격 Java 인터페이스' 카테고리의 다른 글
[Java] throw 예외처리 (0) | 2020.07.01 |
---|---|
[Java] 자주사용되는 예외 (0) | 2020.07.01 |
[Java] 예외처리 (0) | 2020.07.01 |
[Java] 인터페이스(interface) 다중 상속 (0) | 2020.07.01 |
[Java] Interface(인터페이스) - abstract class(추상화 클래스) (0) | 2020.07.01 |