자바 추상클래스 abstract

728x90

추상화 클래스

abstract로 클래스와 메서드를 정의하여 다른 클래스에서 상속받은 후 기능만 구현할 수 있게 만드는 것이다.

 

예시:

UI를 구현하는 회사와 기능을 구현하는 회사가 있다고 하면 UI가 기능을 구현하는 회사한테 외주를 주어 어떤 기능을 하는 메서드를 만들어달라고 요청한다.

이 기능을 받을 때 어떤 이름으로 기능을 구현할건지 미리 약조를 하여 나중에 데이터를 결합할 때 쓸데없는 시간이 소요되지 않도록 한다.

= 분업화

 

총 3개의 클래스로 예시를 만들었다.

 

1. 개인정보파일의 class를 만들어 메서드의 이름과 구현할려는 기능의 목적을 설명한다.

 

package exam11;

//UI를 구현하는 회사와 기능을 구현하는 회사가 있다고 하면 
//UI가 기능을 구현하는 회사한테 외주를 주어 어떤 기능을 하는 메서드를 만들어달라고 요청한다.
//이 기능을 받을 때 어떤 이름으로 기능을 구현할건지 미리 약조를 하여 나중에 데이터를 결합할 때
//쓸데없는 시간이 소요되지 않도록 한다

//abstract 기능을 사용하면 따로 참조자료형을 선언하지 않아도 메서드만 실행해주면 기능이 실행된다.
//abstract, 즉 추상 메서드는 중괄호를 붙이지 말고 abstract를 클래스/메서드 뒤에 붙여줘야 오류가 발생하지 않는다.

abstract public class PersonalStorage {
	public abstract void addPersonalINfo(String name, String perNum);
//	사람의 개인정보를 입력받는 기능 - 이름과 사원번호
	
	public abstract String searchName(String perNum);
//	사원번호를 입력받으면 이름을 return 해주는 기능
	
//	메서드의 이름이 명확하므로 추상클래스(Personal Storage)를 상속 관계로 받아서 자식클래스에서 오버라이딩을 하여 기능을 실행한다.

}

 

2. 다른 회사에게 기능을 구현해달라고 부탁을 하면 추상화 클래스를 상속받은 후에 기능만 구현하여 overriding 한다.

package exam11;

// 추상클래스를 받아 thirdparty, 즉 외주와 같이 작업하는 공간으로
// extends로 추상클래스를 상속받아 기능을 구현한다.
// 추상클래스를 상속받으면 자식 클래스는 구현된 추상메서드를 반드시 구현해야 하는 의무를 가진다.

// 구현이 한 클래스안에서 불가능하면 자식클래스를 다시 재 '추상화' 시켜서 다른 클래스에 재 상속 시킬 수 있다.
//abstract class PersonalStorageThirdParty extends PersonalStorage

//아래의 이름이 같은 메서드의 기능을 구현시켜 넘겨주면 외주 작업 끝!

class PersonalStorageThirdParty extends PersonalStorage{

	@Override
	public void addPersonalINfo(String name, String perNum) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public String searchName(String perNum) {
		// TODO Auto-generated method stub
		return null;
	}
}

 

3. 마지막으로 추상화 클래스를 상속받은 기능 클래스를 상속받아 본래의 UI기능을 도와주는 메서드를 실행한다.

package exam11;

abstract public class AbstractInterface extends PersonalStorageThirdParty{
	public static void main(String[] args) {
//		UI구현 중...

		System.out.println("이름 / 사원번호를 입력하세요");
		
		PersonalStorage p = new PersonalStorageThirdParty(); // 다형성!
//		위의 옵션을 구현해주는 기능을 제공하는 객체를 선언하여 메서드 실행
//		PersonalStorage is a / has personalStorageThirdParty
//		= 통합정보파일?은 3자의 개인정보파일?을 가지고 있다, 안다. O
		
		p.addPersonalINfo("이종호", "999999");
//		구현이 아직 안되있더라도 기능을 만들어 준다는 약속으로 인해
//		위의 메서드를 먼저 실행하고 다음 코드를 작성할 수 있는 장점이 있다.
		
//		다른 코드 작성 중...
		
	}
}

 

장점: 

이처럼 분업화로 인해 아직 구현이 안되어있는 메서드가 있더라도 일단 추상클래스의 메서드로 작성 후에 기능이 구현된다면 나중에 상속을 받아 쓸 수 있다.

따라서 시간의 절약, 분업화의 장점을 활용할 수 있다. 

728x90