추상클래스

ㅇ.ㅇ·2022년 7월 4일

추상클래스가 대체 뭐임?
=>
클래스면 클래스지 추상클래스는 뭐임?
결론부터 말하면, A클래스, B클래스, C클래스가 있다고 치자
여기서 각 클래스 안에는 각자의 필드와 메서드가 있을 것이다.
추상클래스는 A클래스, B클래스, C클래스들 간에 비슷한 필드와 메서드를 공통적으로 추출해 만들어진 클래스이다.

음.. 예를 들어 키보드라는 클텍스트래스가 있다.
키보드를 만드는 제조사는 여러개이다.
A제조사, B제조사, C제조사는 각 제조사만의 스타일대로 키보드를 제작하고 소비자들에게 제품을 출시한다.
여기서 A제조사는 키보드를 누를 때마다 불빛이 들어온다.
B제조사는 키보드를 누를 때 딸깍 거리는 소리가 난다.
C제조사는 키보드를 누를 때 살짝만 눌러도 잘 눌린다.
여기서 이 키보드들 간에 공통점이 무엇인가
바로 키보드를 누른다. 라는 액션! 즉 메서드가 공통적이다.
그럼 이 메서드를 추출해서 추상 클래스 안에 두면된다
(키보드를 상속받아 탄생한, A키보드, B키보드,C키보드)
다른 예를 들어보겠다. 나의 얼굴과 너의 얼굴이 있다. 우리는 일반적으로
2개 귀, 2개 눈, 1개 입, 1개 코를 지니고 있다
느낌이 오는가? 공통적인 변수다.
왼쪽 눈, 오른쪽 눈, 왼쪽 귀, 오른쪽 귀, 입, 코 이변수들을 추상 클래스에 넣어버린다.
사람들은 웃는모습이 다르다 하지만 우리는 공통적으로 웃는다라는 액션을 하고 있다. 이는 공통적인 메서드다. 따라서 추상 클래스에 해당 메서드를 넣어버린다.
(인간을 상속받아 탄생한 '나'라는 클래스, '너'라는 클래스)

뭔가 느낌이 왔으면 좋다
실체클래스는 실체가 드러나는 클래스... 추상클래스는 실체클래스의 공통적인 부분을 추출해 어느정도 규격을 잡아놓은 추상적인 클래스이다.
그래서 실체클래스 실제 객체를 생성할 정도의 구체성을 가지는 반면
추상클래스는 아직 메서드와 내용이 추상적이기 때문에 객체를 생성할수 없게 만들었다.

이제 좀 더 개념적으로 있어보이게 정리하고 개념은 마치도록 하자.
객체를 직접 생성할 수 있는 클래스를 실체클래스라고 하는데, 실체클래스들의 공통적인 특성을 추출해서 선언한 클래스를 추상클래스라고 한다. 여기서 추상클래스와 실체클래스는 상속적인 관계를 가지고 있다.

핵심정리

  1. 추상클래스는 뭐임?
  • 실체클래스의 공통적인부분(변수,메서드)를 추출해서 선언한 클래스
  1. 추상클래스는 객체를 생성할수 없다. 아직은 실체성이 없고 구체적이지 않기 때문에
  2. 추상클래스와 실체클래스는 어떤관계? 상속관계!

추상클래스 왜 사용함?

  1. 공통된 필드와 메서드를 통일할 목적
  • 10명 개발자에게 자동차를 상속받아 실체클래스를 구현하라고 주문해보자
  • 10명 개발자가 생각한 변수명과 메서드명은 제각기 다른 이름을 가지고 구현될것이다. 이렇게 구현이 되면 문제가 있다. 만약 수만줄에 이르는 코드에 A라는 자동차 실체클래스 객체를 선언하고 해당 객체의 필드와 메서드를 떡칠했다고 치자.
    헌데 a자동차가 계약만료되고, b자동차를 새로교체해야한다고하자
    따라서 필드와 메서드 이름을 통일하여 유지보수성을 높이고 통일성을 유지 할 수있다.
  1. 실체클래스 구현시 시간절약
    실무적으로 생각해보자. 나는 SI개발자임
    그런데 시간겁나없음
    빨리 개발해야함
    자동차라는 어마어마한 클래스를 일주일안에 구현해야함
    그럼 설계부터 시작함
    자동차는 바퀴가 있어야함
    굴러가야함
    느낌이 옴?
    그런데 추상클래스 결국 만들어야되는거아님?=>너가안할 확률 많음

  2. 규격에 맞는 실체클래스 구현
    아무리 자기 스타일대로 클래스를 구현한다고 해도 그것도 결국에 구현안에서 구현하는것을 허락하는것이지 규격도없이 아무렇게나 구현을 해서는 안된다.

추상클래스 어떻게 씀?

레퍼런스

https://limkydev.tistory.com/188

public abstract class 클래스명{

  //필드

  //생성자

  //메서드

  //추상메서드

 

}


profile
기록과 정리하는것을 계속해서 하려고 노력중이에요 😊

0개의 댓글