반응형
[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
반응형
'JVM > Java' 카테고리의 다른 글
[Java] POI 암호걸린 EXCEL 풀고 데이터 읽어오기 (0) | 2021.01.11 |
---|---|
[Java] POI Excel CellStyle 버전 업 후 Deprecated 된 속성 알아보기 (0) | 2021.01.11 |
[Java] Spring Controller 파라미터 값 가져오기(HttpServletRequest, @RequestParam, @RequestBody, @ModelAttribute) (0) | 2020.01.28 |
[Java] SimpleCaptcha를 이용한 이미지 보안문자 생성하기 (7) | 2020.01.23 |
[Java] POI 라이브러리 사용 : 엑셀 다운로드 로직 구현하기 (27) | 2020.01.17 |
댓글