티스토리 뷰

[java 22강] 추상 클레스 (Abstract Class)




이번 강좌에서는 추상 클레스에대해서 알아보겠습니다.

추상 클레스도 우선 클래스의 종류입니다.

추상 클레스도 상속을 위해 많이 사용합니다.


그렇기 상속과 오버라이드 에대해 미리 알아두고 강의를 보실 필요가 있습니다.


19강 상속강좌 --> http://bvc12.tistory.com/176

21강 오버라이드(오버로딩) 강좌 --> http://bvc12.tistory.com/178


그럼 추상클레스는 왜만들며 왜 상속해서 사용할수 있도록 있는것일까요?

추상클레스는 말그대로 구체적이지 않을떄 쓰는것 입니다.

추상적으로! 클레스를 만드는것입니다.

음.. 현직에서 업무를 하다보면 다음과 같은 문제가 생깁니다...

여러명이서 코딩작업을 한다면... 변수나... 메소드를 규칙적으로 이름을 생성해야할일이 생깁니다..

만약 똑같은 메소드를 다른이름으로 만들어 놓거나... 변수의 이름을 다르게 만들어 놓으면.... 찾기가 어렵죠?

그러면 또 이러한 생각이 들수있습니다... 그럼 클레스를 하나 만들어 놓고 그것만 쓰면되는거아님?

만약 메소드의 기능들이 조금씩만 다르면... 하나 만들어 놓은 것을 생성하고 조금씩 수정해서 쓸것입니다.

그렇게 조금씩 수정하다보면 정말로 이름이 조금씩 다르게 되고.. 정말 찾기가 어려워집니다..

그래서 메소드 명칭.... 변수 명칭 등등을 정해놓고 편리하게 사용할수 있는방법이 추상 클레스 입니다.


추상클레스의 문법은... 

abstract class 클레스명 입니다.


추상클레스를 만들고 추상메소드를 만들수 있습니다.


추상메소드문법은...

abstract 리턴타입 메소드명(); 입니다.

메소드 안에 내용은 작성하실수 없습니다.

왜냐구요? 추상이 잖아요... 명칭까지만 만들어 놓는것입니다.

메소드의 내용들은 상속을하거나... 생성을할께... 무조껀!!! 오버라이드 하여 재정의를 하셔야합니다..

(쉽게 말해서 상속할때 이름만 같게 메소드를 무조껀 만들어야함..)

그럼 바로 예제를 살펴보도록 하겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package test123123;
 
public class java22 {
    public static void main(String[] args) {
        BB bb = new BB();
        bb.test();
        System.out.println("추상 클래스 AA 의 변수 a의 값:" + bb.a);
        
    }
}
 
abstract class AA {
    int a = 0;
    
    public AA() {
        System.out.println("추상클래스는 생성자도 만들수 있음.");
    }
    
    
    public abstract void test();
    
}
 
class BB extends AA{
 
    @Override
    public void test() {
        System.out.println("추상클레스 메소드 재정의 실행!");
        
    }
    
}
cs


결과



그럼 설명하겠습니다.


abstract class AA {
    int a = 0;
    
    public AA() {
        System.out.println("추상클래스는 생성자도 만들수 있음.");
    }
    
    
    public abstract void test();
    
}

AA 라는 추상클래스를 생성하여..

int 타입 변수 a 와 생성자 AA를 만들어 주었고....

 test 라는 추상메소드를 만들어 주었습니다. 추상메소드에는 {} <--- 내용을 담는곳은 빼고 작성합니다.. 추상메소드이기 때문입니다..


class BB extends AA{
 
    @Override
    public void test() {
        System.out.println("추상클레스 메소드 재정의 실행!");
        
    }
    
}

BB 라는 클레스를 만들고 AA 라는 추상클레스를 상속하였습니다.

추상클레스는 꼭! 추상메소드를 오버라이드 하여 재작성하여야 합니다. (오버라이드 안하시면 컴파일도 안되실겁니다.. 바로 에러..)

test 메소드를 오버라이드 하여       System.out.println("추상클레스 메소드 재정의 실행!"); 이라는 내용을 넣었습니다.

.

public class java22 {
    public static void main(String[] args) {
        BB bb = new BB();
        bb.test();
        System.out.println("추상 클래스 AA 의 변수 a의 값:" + bb.a);
        
    }
}
그다음 BB 클래스를 bb 라고 생성하고 BB 클래스의 오버라이드 된 메소드를 실행하고...
추상클래스 AA의 변수를 상속받은 BB 클래스의 변수를 출력해보았습니다. (    System.out.println("추상 클래스 AA 의 변수 a의 값:" + bb.a);    )

그래서 결과는 3개의 출력을 확인할수 있습니다.
첫번째 출력물은 추상클래스에 있는 생성자가 출력되고...
두번째 출력물은 오버라이드한 메소드가 실행되고...
세번째 출력물은 bb.a 의 값이 출력되는것을 확인할수 있습니다...!


이렇게 이번강의를 통해 추상 클레스 (Abstract Class) 를 알아보았습니다.
모두 수고하셨습니다!^^


댓글