티스토리 뷰
#. 추상 클래스
> 추상 메서드
- abstract 예약어
ㄴ 메서드와 클래스를 선언할 때 사용하는 Modifier
ㄴ 메서드를 선언에 사용 시 추상 메서드로 정의하겠다는 의미
- 추상 메서드
1 2 | public int sum(int n1, int n2 ..) { ... } // 일반 메서드 public abstract int sum(int n1, int n2 ..); // 상 메서드 | cs |
ㄴ 메서드의 시그니처(리턴 타입, 메서드명, 매개변수)만 정의
ㄴ 구체적인 행위, 즉 블록({ }) 부분은 정의되지 않은 특수한 메서드
ㄴ 메서드의 시그니처가 선언되어 있기 때문에 메서드의 기본적인 기능 유추 가능
ㄴ 추상 메서드는 의미가 없지만 자식 클래스에서 Overriding 했을 때, 상속을 통해 의미를 가짐
ㄴ 추상 메서드는 상속과 관련이 깊은 예약어
> 추상 클래스
1 2 3 4 | abstract class test { public void methodA() { ... } public void methodB() { ... } } | cs |
- 추상 클래스는 일반적으로 하나 이상의 추상 메서드를 포함, 추상 메서드가 없는 클래스도 추상 클래스로 선언 가능
1 2 3 4 | abstract class test { public void methodA() { ... } public abstract void methodB() { ... } } | cs |
단, 추상 메서드를 포함하고 있는 클래스는 추상 클래스로 선언되어야 함
- 추상 클래스는 객체를 생성할 수 없음 -> 아무런 기능도 제공하지 않는 추상 메서드가 호출된다는 것은 논리적으로 맞지 않음
> 추상 클래스와 상속
- 객체를 생성할 수 없는 추상 클래스는 상속과 결합하여 사용해야 함
- 추상 클래스를 상속받을 시 자식 클래스는 추상 메서드를 Overriding 해야 함
만일, 부모인 추상 클래스의 추상 메서드를 Overriding 하지 않는다면 자식 클래스도 객체를 생성할 수 없게 됨
- 추상 클래스를 부모 클래스로 지정한 자식 클래스는 부모의 모든 추상 메서드를 Overriding 해야 객체를 생성할 수 있음
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class SuperClass { public void methodA() { System.out.println("methodA"); // 일반 메서드 } public abstract void methodB(); // 추상 메서드 } class SubClass extends SuperClass { public void methodB() { System.out.println(methodB); } } | cs |
> 추상 클래스의 활용
- 추상 클래스로 객체를 생성하려면 자식 클래스를 작성해야 하고 추상 메서드들을 Overriding 해야 함
- 추상 클래스를 사용하는 이유는 유지보수의 편의성을 높이기 위함
- 최소한의 수정으로 원하는 객체를 사용할 수 있게 되어 유지보수성이 좋아짐
참고 : SW Expert Academy
'Web > JAVA' 카테고리의 다른 글
[JAVA] 객체의 형변환(Casting) (0) | 2019.08.12 |
---|---|
[JAVA] 내부 클래스(Inner Class) (0) | 2019.08.12 |
[JAVA] 상속과 멤버(변수, 메서드) (2) | 2019.08.08 |
[JAVA] 자바의 상속 (0) | 2019.08.08 |
[JAVA] 생성자 개요 및 자동 생성 방법 (0) | 2019.08.05 |