☕Java 추상화 (Abstraction), 추상 클래스

hamsang·2022년 5월 31일
0

Java

목록 보기
15/36
post-thumbnail

🥬추상화 (Abstraction)

객체들이 공통적으로 필요로 하는 속성이나 동작을 하나로 추출하는 작업

  • 세부적인 사물들의 공통적인 특징을 파악하여 추출하고, 필요없는 특성은 제거하여 하나의 묶음으로 정의한다.

추상화는 클래스들 사이의 핵심적인 개념 또는 기능을 간추려 내는 것입니다.


🧐 그렇다면 추상 클래스는?

public abstract class 클래스명{}

abstract 예약어를 붙여 추상클래스를 구현할 수 있습니다.
추상 클래스는 항상 추상 메서드를 포함한다. (추상 클래스를 상속 받아 모든 메서드를 구현했어도(=추상 메서드가 존재하지 않아도) abstract 예약어를 사용하면 추상 클래스다.)


📌 추상 메서드

아무런 수행 방법도 제시되지 않은 상태의 미완성 메서드다. 즉, 몸체 부분의 구현 코드는 생략되고 선언만 되어있는 메서드입니다.

//추상메서드
int add(int x, int y);

//중괄호 부분을 아예 생략하는 게 핵심이다.

int add(int x, int y) {}; //추상메서드가 아님

📌 추상 클래스에서 구현하는 메서드

아래에서도 볼 수 있지만 추상클래스는 상속을 하기 위해 만드는 클래스입니다. 추상클래스에서 구현하는 메서드는 하위 클래스에서도 사용할, 즉 하위 클래스에서도 구현 내용을 공유할 메서드를 구현합니다.
하위 클래스에서 메서드의 내용을 각각 다르게 구현하고 싶을 때 구현 내용을 추상 메서드로 남겨 두고 하위 클래스에 구현을 위임하는 것입니다.

메서드내용
구현된 메서드하위 클래스에서 공통으로 사용할 코드. 하위 클래스에서 재정의 가능
추상 메서드하위 클래스가 어떤 클래스냐에 따라 구현이 달라짐

🤩 추상 클래스의 특징!

이러한 추상 메서드 내부에는 아무런 구현 코드가 제시되지 않습니다. 여기서 우리는 추상 클래스를 객체로서 사용하지는 않을 것이라 짐작해볼 수 있습니다. 아무런 동작도 할 수 없기 때문이죠! 😪

예상했듯이,

  • 추상 클래스는 단독으로 사용되지 않고 상위 클래스로서 사용됩니다.
  • 또, 인스턴스를 생성할 수 없습니다! (NEW ❌)
  • 추상 클래스를 상속받은 자식 클래스는 추상클래스의 추상메소드를 반드시 오버라이딩(재정의)해야합니다.
  • 하위클래스에서 반드시 부모클래스의 메소드를 사용하도록 강제하는 것이죠. 공통적으로 필요한 모든 메서드가 각 클래스에 구현될 수 있도록 하여 안정성, 호환성을 높이는 역할을 합니다.

😌 추상 클래스의 사용 목적

1. 공통된 필드와 메소드를 통일할 목적으로 사용

추상클래스에서 미리 필드와 메서드를 정의해 놓는다면, 실체클래스(일반클래스)에서는
추상클래스의 필드와 메소드명을 변경할 수 없고 그대로 받아 사용해야 구현해야 합니다. 따라서 필드와 메소드의 이름을 통일시켜주고 유지보수성을 높일 수 있습니다.

2. 실체클래스 구현시, 시간 절약 효과

예를 들어 자동차 클래스를 구현할 때 우리가 자동차 추상클래스를 상속받으면 자동차에 공통적으로 들어가야하는 필드와 메서드가 녹여져있는 필드가 자동으로 오버라이딩됩니다!
즉, 강제로 주어지는 필드와 메서드를 가지고 구현만 하면 되는 것이죠! 설계하는 시간이 절약되니 구현에 집중할 수 있습니다.

3. 규격에 맞는 실체클래스 구현

추상클래스를 상속받은 실체 클래스들은 반드시 추상메서드를 재정의(오버라이딩)헤서 실행 내용을 작성해야 합니다. 그렇지 않으면 컴파일 에러가 발생해 실행조차 하지 못하게 됩니다!
즉 추상 클래스는 많은 사람들이 참여하는 개발에서 모두가 약속한 필드와 메서드, 설계 규칙에 맞는 클래스를 구현하는 것을 돕습니다.


사실 위 세 개의 내용 모두 하나로 합칠 수 있는 비슷비슷한 내용입니다.

정리하자면, 소스 수정시 다른 소스의 영향도를 적게 가져가면서 변화에 유연하게 대처하기 위해 추상클래스를 사용하기도 합니다. 규격에 맞게 소스가 구현되어 있기 때문에 해당 규격에 대한 구현부만 수정하면 손 쉽게 수정이 가능하기 때문입니다!


넓게 알고, 깊게 생각하고, 바르게 행동하자
Know broadly, think deeply, and act rightly.

profile
햄생

0개의 댓글

관련 채용 정보