본문 바로가기

Java/본격 Java 인터페이스

[Java] Interface(인터페이스) - abstract class(추상화 클래스)

추상화 클래스(abstract class)
 - 불완전한 클래스로 완성되지 못한 메소드(abstract method)를 하나 이상 갖고 있는 클래스를 abstract class라고 합니다.
 - abstract method : 메소드의 선언부만 있고, 정의되지 못한 메소드를 의미합니다.
 ex) public abstract 리턴타입 메소드명(); -> 몸통(중괄호 부분)이 없습니다.
 - 사용하는 이유 : 상속의 관계를 형성시키기 위한 상위클래스로 사용됩니다.
 - 클래스이나 인스턴스를 생성할 수는 없습니다.
  abstract class를 사용하려면 반드시 상속을 받아야 합니다.
 - abstract class를 상속받은 클래스는 무조건 abstract class의 abstract method를 오버라이딩해서 구현해야 합니다.
  구현하지 못하면 상속받은 하위클래스도 abstract class로 선언해야합니다.
 - 문법
 abstract class 클래스명 {하나 이상의 abstract 메소드, ...}

.

.

추상화 클래스에서 가장 중요한 것은 상속받은 클래스에는 무조건 abstract method를 사용하지 않더라도 오버라이딩해서 구현해야한다는 것이다.

하나라도 오버라이딩 하지 않는다면 abstract로 선언해야한다.

.

.

예제

abstract class PersonaleNumberStorage
{
	public abstract void addPersonalInfo(String name, String perNum);
	public abstract 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 extends PersonaleNumberStorage
{ 
	// PersonaleNumberStorage클래스를 상속받음
	// 단, PersonaleNumberStorage클래스가 abstract클래스이므로 반드시 PersonaleNumberStorage클래스 내의 abstract메소드들을 모두 오버라이딩 해야함
	// 하나라도 오버라이딩을 안하면 PersonaleNumberStorageImpl클래스도 abstract로 선언해야 함.
	PersonalNumInfo[] perArr;
	int numOfPerInfo;
	public PersonaleNumberStorageImpl(int sz){
		perArr = new PersonalNumInfo[sz];
		numOfPerInfo = 0;
	}
	public void addPersonalInfo(String name, String perNum){
		// abstract클래스인 personaleNumberStorage의 의 abstract메소드였던 addPersonalInfo를 오버라이딩 함.
		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 AbstractInterface
{
	public static void main(String[] args) 
	{
		PersonaleNumberStorage storage = new PersonaleNumberStorageImpl(100);
		// PersonaleNumberStorage는 abstract클래스이므로 인스턴스의 생성은 personalNumberStorageImpl 클래스로 함
		storage.addPersonalInfo("홍길동", "950000-1122333");
		storage.addPersonalInfo("전우치", "970000-1122333");

		System.out.println(storage.searchName("950000-1122333"));
		System.out.println(storage.searchName("970000-1122333"));
	}
}
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(인터페이스)  (0) 2020.07.01