티스토리 뷰

반응형

추상 메서드와 추상클래스(Abstract Class)

 

추상 메서드는 선언부는 있지만 구현부가 없는 메서드를 의미합니다. 상위 클래스의 참조 객체 변수를 통해 하위 클래스에 각각 다른 내용을 적용 시키고 싶을 떄 사용합니다.

 

추상 메서드를 가지는 클래스는 추상 클래스로 선언되어야 한다.

 

추상 클래스를 상속받는 하위 클래스는 반드시 추상 메서드를 구현한다.

 

추상 클래스는 인스턴스(객체)를 생성 할 수 없다. new 사용을 못한다.

 

간단하게 예제를 통해서 추상 클래스의 필요성을 살펴 보겠습니다.

 

1
2
3
4
5
6
public abstract class Person {
    
    abstract void Introduce();
 
}
 

 

Person 추상 클래스입니다. Introduce() 메서드는 앞에 abstract 키워드가 부고 구현부분을 포함하고 있지 않습니다. 분류의 개념인 클래스가 '소개'라는 메서드를 구현 한다는것 자체도 이상하고 단순히 구현 부분을 비워 놓을 수도 없습니다. 이떄 사용하는 것이 abstract로 메서드에 대해서 선언만 해놓고 구현에 관해서는 밑에 하위 클래스에게 강제로 오버라이딩을 시키는 것입니다.

 

1
2
3
4
5
6
7
8
public class Honggildong extends Person{
    
    public void Introduce()
    {
        System.out.println("저는 홍길동입니다!!");
    }
 
}

 

 

1
2
3
4
5
6
7
8
9
public class Leekitaek extends Person{
    
    public void Introduce()
    {
        System.out.println("저는 이기택입니다.");
    }
 
}
 

 

Person 추상 클래스를 상속 받는 하위 클래스입니다. 반드시 추상 메서드인 Introduce() 메서드를 하위 클래스에서 구현을 해줘야하며 구현을 하지 않으면 오류가 발생하게 됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Main {
    
    public static void main(String argsp[])
    {    
        Person person1 = new Honggildong();
        Person person2 = new Leekitaek();
        
        person1.Introduce();
        person2.Introduce();
        
    }
 
}
 

 

실제 메인 영역에서 Person 객체 참조 변수를 통해서 각각의 하위 클래스의 객체를 생성합니다.

 

 

 

 

 

생성자

 

클래스의 인스턴스를 생성 할 때마다 new 키워드를 사용합니다. new 클래스명()을 보면 소괄호가 보이는데 일반적으로 이것은 메서드를 의미한다고 알고 있습니다. 실제로 이것은 반환값이 없고 클래스 이름과 동일한 메서드로 객체 생성자 메서드를 의미합니다.

 

new 클래스명()을 통해 생성자 메서드가 호출이 된다.

 

따로 구현하지 않으면 자바가 인자가 없는 생성자를 호출

 

개발자가 따로 생성자를 구현하였다면 그에 맞게끔 new 를 사용 해야한다. 왜냐하면 인자가 있는 생성자를 따로 구현하였다면 자바는 인자 없는 생성자를 생성해 주지 않기 때문에 오류가 발생하게 된다.

  

 

반응형