JVM/Java

[Java] 추상클래스와 인터페이스 차이

헹창 2020. 8. 19.
반응형

[Java] 추상클래스와 인터페이스 차이

 

추상클래스 (abstract class)

 

- 정의 : 한 개 이상의 추상메서드를 가지는 클래스

 

- 목적 : 추상메서드는 선언만되며 구현이 되지 않은 불완전한 메서드이므로 객체로 생성되지 않는다.

 

구분 일반 클래스와 추상 클래스의 차이 예시
일반 클래스 세부적이고, 구체적 고양이, 사자, 강아지
추상 클래스 추상적 고양이과, 개과

 

추상메서드

 

- 정의 : 내용이 없는 메서드, 구현(정의)는 하지 않고 선언만 한 메서드

 

- 목적 : 메서드의 내용이 너무 일반적인 내용이므로 부모 클래스에서 구체화하여 정의할 필요가 없을 경우, 추상메서드로 선언만하고 상속받은 자식 클래스에서 재정의하도록 할 때 사용

 

 

추상 클래스는 반드시 하나 이상의 추상메서드를 가지며, 객체를 생성할 수 없다.

하지만 슈퍼클래스로 사용할 수 있으며 추상메서드를 사용하기 위해 반드시 해당 메서드를 재정의 해야만한다.

 

 

위 말을 코드로 보면 이해가 쉽다.

 

 

< 추상클래스 형식 >

// 추상클래스
public abstract class AbstractTest {

	// 추상메서드
	public abstract void dogName(String name);

	// 일반메서드
	public void dog(){
		System.out.println("개 이름 알아보기");
	}
}

 

 

① 하나 이상의 추상메서드를 가진다 → 추상메서드 : dogName

 

② 객체를 생성할 수 없다 → 다음과 같이 new 추상클래스(); 로 생성할 수 없다.

 

public class MainTest {

	public static void main(String[] args){
		// 객체로 생성할 수 없다 (X)
		AbstractTest abt = new AbstractTest();
	}
}

 

 

③ 슈퍼클래스로 사용할 수 있고, 추상메서드는 반드시 재정의해야한다 

 

// 추상클래스
public class Test1 extends AbstractTest {

	// 추상메서드 재정의
	@Override
	public void dogName(String name){
		System.out.println("개 이름은 " + name +"입니다.");
	}
}

 

 

하여 사용방법은 상속받은 자식클래스 객체를 생성한다

 

public class MainTest {

	public static void main(String[] args){
		// 상속받은 자식클래스로 객체를 생성한다 (O)
		AbstractTest abt = new Test1("깐돌이");
	}
}

 

 

 

인터페이스

 

추상메서드와 상수로만 이루어져 있다. 즉, 로직을 작성할 수 없다.

 

 

< 인터페이스 형식 >

 

// 인터페이스 형식
public interface DogTest {
	void LargeDog();
	void SmallDog();
}

 

 

- 다중 상속 가능

 

// 인터페이스 다중상속 가능
public interface 인터페이스명 extends 상속받을 인터페이스명1, 상속받을 인터페이스명2, ...{
	 void 추상메서드1();
     ...
}

 

 

< 클래스가 인터페이스 참조 형식 >

 

public class DogTestImpl implements DogTest {
	@Override
	void LargeDog(){
		System.out.pringln("리트리버, 보더콜리");
	}

	@Override
	void SmallDog(){
		System.out.println("시츄, 말티즈");
	}
}

 

 

 

추상클래스와 인터페이스의 공통점 및 차이점

 

  추상클래스(Abstract Class) 인터페이스(Interface)
공통점 선언만 있고, 구현 내용이 없다.
자기 자신이 new를 통해 객체를 생성할 수 없으며 상속받은 자식만이 객체를 생성할 수 있다.
상속받은 자식이 구현을 반드시 하도록 한다.
차이점 추상클래스를 상속받아 기능을 이용하고, 확장시키기 위해 사용한다. 구현 객체의 같은 동작을 보장하기 위해 사용한다.
다중 상속 불가능하다. 다중 상속 가능하다.
일반메서드와 추성메서드 가능하다. 추상메서드만 가능하다
일반변수 + 일반메서드 + 추상메서드 형태 상수 + 추상메서드 형태
생성자와 일반변수 모두 가질 수 있다. 생성자와 일반변수를 가질 수 없다.
extends implements
메서드의 부분적인 구현 가능하다. 메서드 선언만 가능하다.
728x90
반응형

댓글

추천 글