본문 바로가기
Java/문법

Java의 꽃 상속 - Abstract (추상클래스)

by ssury94 2024. 12. 16.
 
 
 

 

 

상속 시리즈

1) Extend, Overriding

2) Abstract <<

3) Interface

 

 

    // 부모 클래스에서 print라는 함수를 만들건데,
    // 이 클래스를 상속받을 사람들은
    // 자기네들이 알아서 메소드를 작성할거니까 (==오버라이드)
    // 내가 코드 구현은 하지 않고, 함수이름만 통일해주자!

 

메소드의 시그니처만 정의하고, 구체적인 구현은 없는 메소드 = 추상메소드(Abstract)

 

 

public abstract void print();


    // 이름만 작성하고 메소드 내용은 작성 X, {}도 안써도 된다.
    // 함수이름은 정해두고(통일), 내용은 각 클래스에서 작성
    // abstract 뜻은 추상적이다~

    // 클래스 이름 앞에 abstract도 작성
    // 상속받은 클래스는 이 함수 꼭 구현해야해~

abstract 메소드 작성시 클래스 이름 앞에 abstract도 작성

 

 

 

package entity;

public abstract class Parent {

    // 이름과 나이를 저장하는 클래스를 만들기

    String name;
    int age;

    public Parent() {
    }

    public Parent(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void hello(){
        System.out.println(name+" 님, 안녕하세요?");
    }

    // 이 클래스에서 print라는 함수를 만들건데,
    // 어차피 print 함수 만들면
    // 이 클래스를 이용하는 사람들은
    // 자기네들이 알아서 내용을 작성할거니까 (==오버라이드)
    // 내가 코드 구현은 하지 않고, 함수이름만 정해주자!

    public abstract void print();
    // 아무것도 작성 안함 {}도 안써도된다.
    // 함수이름은 정해두고(통일), 내용은 각 클래스에서 작성
    // abstract 추상적이다~
    // 상속받은 클래스는 이 함수 구현해야해~

}

 

 

 

Chlid 클래스를 만들면

꼭 구현해야하는 메소드가 있다는 경고가 뜬다.

abstract에 추상메서드가 있기 때문!

 

 

abstract 키워드의 특징

  • 추상 클래스: abstract 키워드가 클래스 앞에 붙으면 해당 클래스는 추상 클래스가 된다.
  • 추상 메소드: 메소드 선언 앞에 abstract 키워드가 붙으면 해당 메소드는 추상 메소드가 된다.
  • 구현 강제: 추상 클래스나 추상 메소드를 사용하기 위해서는 반드시 상속하여 구현해야한다.
  • 인스턴스화 불가: 추상 클래스는 직접 인스턴스화할 수 없다.

  • 구체적 구현 필요: 추상 메소드를 포함한 클래스를 상속받은 하위 클래스는 반드시 해당 추상 메소드를 오버라이딩하여 구체적인 구현을 제공해야 합니다

 

abstract 키워드를 쓰는 이유

  • 코드 재사용성 증대: 공통된 특성을 추상 클래스에 정의하여 중복 코드를 줄이고 재사용성을 높이기 위함
  • 구조적 설계 강화: 클래스에 추상화를 접목시켜 더 구조적인 객체 설계가 가능
  • 유지보수성 향상: 공통 사항을 한 곳에서 관리하여 개발 및 유지보수가 용이해짐
  • 프로그램의 표준화: 자식 클래스에서 추상 메소드를 반드시 구현하도록 강제하여 프로그램의 표준화 수준을 높임
  • 설계와 구현의 분리: 추상 클래스는 기본적인 틀을 제공하고, 구체적인 구현은 자식 클래스에 위임
  • 다형성 구현: 추상 클래스를 통해 다형성을 효과적으로 구현
  • 프레임워크 개발: 범용 라이브러리나 프레임워크 시스템을 설계하는 데 유용하게 사용

즉, 협업을 하기 위해서다!