티스토리 뷰

반응형


#. 추상 클래스


> 추상 메서드

  - 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
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday