[Java] 추상 클래스

hwarye·2022년 11월 8일
0

클래스 => 설계도
추상 클래스 => 미완성 설계도 ( 완성되지 못한 채 남겨진 설계도 )

추상

=> 공통성과 본질을 모아 추출

추상화

=> 객체의 공통적인 속성과 기능을 추출하여 정의하는 것.
=> 기존 클래스들의 공통적인 요소들을 뽑아서 상위 클래스를 만들어 내는 것.

👉🏻 추상화의 장점

추상화로 공통적인 속성과 기능을 모아서 정의하면
1) 코드의 중복을 줄일 수 있다.
2) 효과적으로 클래스 간의 관계를 설정할 수 있다.
3) 유지, 보수가 용이해진다.


🟪 추상 메서드

자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드.

🟡 사용 목적

추상 메소드가 포함된 클래스를 상속받는 자식 클래스가 반드시 추상 메소드를 구현하도록 하기 위함
=> 모듈처럼 중복되는 부분이나 공통적인 부분은 미리 다 만들어진 것을 사용하고, 이를 받아 사용하는 쪽에서는 자신에게 필요한 부분만을 재정의하여 사용함으로써 생산성이 향상되고 배포 등이 쉬워지기 때문이다.

abstract 반환타입 메소드이름();

추상 메소드는 선언부만 존재하고, 구현부는 작성되지 않는다.
작성되어 있지 않은 구현부를 자식 클래스에서 오버라이딩하여 사용한다.
선언부만 있고 구현부가 없다는 의미로 선언부 끝에 세미콜론(;)을 추가한다.


🟪 추상 클래스

하나 이상의 추상 메소드를 포함하는 클래스
abstract class 클래스 이름 {
	//...
    abstract 반환타입 메소드이름();
    //...
}
  • 다형성을 가지는 메소드의 집합을 정의할 수 있도록 한다.

  • 추상클래스로 인스턴스 생성할 수 없다.

  • 상속을 통해서 자손 클래스에 의해서만 완성될 수 있다.

  • 반드시 사용되어야 하는 메소드를 추상 클래스에 추상 메소드로 선언해 놓으면, 이 클래스를 상속받는 모든 클래스에서는 이 추상 메소드를 반드시 재정의해야 한다.

  • 추상 클래스는 키워드 'abstract'만 붙이면 된다.

  • 추상 클래스는 동작이 정의되어 있지 않은 추상 메소드를 포함하고 있으므로, 인스턴스를 생성할 수 없다.

  • 추상 클래스는 먼저 상속을 통해 자식 클래스를 만들고, 만든 자식 클래스에서 추상 클래스의 모든 추상 메소드를 오버라이딩하고 나서야 비로소 자식 클래스의 인스턴스를 생성할 수 있게 된다.

  • 클래스에 추상 메서드가 포함되어 있는 경우, 해당 클래스는 자동으로 추상 클래스가 된다.

🟡 사용 목적

추상 메소드가 포함된 클래스를 상속받는 자식 클래스가 반드시 추상 메소드를 구현하도록 하기 위함이다.

만약 일반 메소드로 구현한다면 사용자에 따라 해당 메소드를 구현할 수도 있고, 안 할 수도 있다.
하지만 추상 메소드가 포함된 추상 클래스를 상속받은 모든 자식 클래스는 추상 메소드를 구현해야만 인스턴스를 생성할 수 있으므로, 반드시 구현하게 된다.

🟡 추상 클래스 vs 일반 클래스

추상 클래스는 추상 메소드를 포함하고 있다는 점을 제외하면, 일반 클래스와 모든 점이 같기 때문에 생성자와 필드, 일반 메소드도 포함할 수 있다.


cf)
http://www.tcpschool.com/java/java_polymorphism_abstract

profile
례코드

0개의 댓글