Java

인터페이스, 추상클래스

hs_developer 2022. 6. 25. 17:28

인터페이스는 인터페이스에서 작성한 내용을 인터페이스를 상속 받은 클래스에서 반드시 구현해야 하는데

 

인터페이스는 정의만 하고 안의 내용은 상속 받은 클래스에서 채워 넣어야 한다.,

 

그래서 인터페이스를 사용 시 상속 받은 클래스에서 동일한 이름과 기능을 보장 받는다.

 

자바에서 인터페이스는 Class가 아닌 Interface를 만들어 사용한다.

 

 

 

public interface InterExample {

	public void makeThis(); // 인터페이스에 정의 후 implements 하면 구현 강제 함
	public void makeThisWithParam(String name, int age);
}

위 인터페이스 안에서는 특정 메서드를 이름 또는 이름이나 파라미터만 정의하고 안에 내용은 없는데

 

이는 인터페이스의 특성상 메서드 안의 내용은 구현하지 못해서이다.

 

public class ImpleInterface implements InterExample {

	@Override
	public void makeThis() { // 구현하지 않을 시 에러
		System.out.println("makeThis Call");
	}

	@Override
	public void makeThisWithParam(String name, int age) {
		System.out.println("makeThisWithParam Call with " + name + " " + age);
	}

	public static void main(String[] args) {
		
		ImpleInterface inter= new ImpleInterface();
		inter.makeThis(); // makeThis Call
		inter.makeThisWithParam("현서", 20); // makeThisWithParam Call with 현서 20
	}
	
}

 

인터페이스의 사용 이유는 인터페이스를 implements 시 반드시 구현해야 하기 때문에 

 

특정 인터페이스 implements 시 각각 다른 클래스에서도 동일한 이름의 메서드를 구현하게 할 수 있다.

 

implemends 외에 extends도 자주 사용 되는데

 

extends는 다중 상속이 안 되고 implements는 다중 상속이 되는 차이점이 있다.

 

 

 


인터페이스는 정의만 할 수 있는데 추상 클래스는 abstract를 넣어 일반 메서드를 정의와 구현도 할 수 있다.

 

public abstract class AbstractClass {

	public AbstractClass()
	{
		System.out.println("MAKE Abs");
	}
	
	public abstract void absEmptyMethod2();
	
	public void absMethod()
	{
		System.out.println("method abs");
	}
	
	public static void main(String[] args) {
		
//		AbstractClass ac= new AbstractClass(); // abstract 클래스는 객체화 불가
			
	}
}

 

객체화(인스턴스화)가 불가능하다.

 

 

public class GetAbstract extends AbstractClass{

	@Override
	public void absEmptyMethod2() {
		
	}

	public static void main(String[] args) {
		
		GetAbstract ga= new GetAbstract(); // MAKE Abs
		ga.absMethod(); // method abs
	}
	
}

 

추상 클래스를 상속 받을 시 추상 클래스에서 구현한 메서드는 재 구현이 필요 없지만

 

추상 메서드는 반드시 구현하거나 클래스 형태를 추상 클래스로 바꿔야 한다.

 

추상 클래스의 용도는

 

추상 클래스 안에 정의만 한 메서드와 정의와 구현을 같이 한 메서드를 작성해

 

각 클래스가 동일하게 사용해야 하는 메서드는 구현까지 한 메서드를 쓰고

 

각 클래스별로 개별적으로 구현해야 하는 부분은 따로 구현이 가능하다.

 

 

 

'Java' 카테고리의 다른 글

예외처리  (0) 2022.06.25
제네릭스  (0) 2022.06.25
this, super  (0) 2022.06.25
오버라이드, 오버로드  (0) 2022.06.25
extends, implements  (0) 2022.06.24