본문 바로가기

Java/본격 Java 인터페이스

[Java] Interface(인터페이스)

인터페이스(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
반응형