[TIL] abstract 사용 이유

이해찬·2023년 7월 5일
0

TIL

목록 보기
5/20

23.07.05 - D+35, 추상클래스 abstract

기록양식 (TIL)
1. 사용 개념
2. 의문점 or 문제
3. 시도해 본 것들(+응용) or 삽질
4. 해결
5. 알게 된 점(회고)



Abstract 추상클래스

abstract를 굳이 사용하는 이유: abstract를 상속하는 하위 클래스는 반드시 그 메서드를 확장시켜 사용해야함
강제성 : 반드시 가져가야 하기 때문에 코드의 확장성과, 설계의 일관성을 가질 수 있다.

강제성을 안가져가는 경우는?



오버라이딩

🤷‍♂️ 만약에 자손클래스가 오버라이딩을 하지 않는다면?
->오류 발생
--> 해결 방법으로는 자손클래스에도 abstract를 붙인다.

abstract class Army{
	abstract void specialties(); 
}

class DriverSolider extends Army{
	void specilties(){System.out.println("운전을 합니다.");}
}

class CombatSolider extends Army{
	void specilties(){System.out.println("전투 훈련을 합니다.");}
}

위에처럼 자손은 반드시 메서드를 가져가서 오버라이딩 해야하나, 만약에 오버라이딩을 하지 않는다면?

abstract class Army{
  abstract void specialties();
}

class DriverSolider extends Army{
   void specilties(){System.out.println("운전을 합니다.");}
}

class CombatSolider extends Army{
   void specilties(){System.out.println("전투 훈련을 합니다.");}
}

abstract class TemporarySolider extends Army{
  void act(){System.out.println("막사에서 안정을 취한다.")}

// --> 군대에 속하는 임시병사라면?
// --> abstract method를 사용할 수도 있고, 일반 메서드를 사용할 수도 있다.

}

class Citizen extendsTemporarySoldier{
  void specialties(){System.out.println("시민입니다.");}
  act 메서드는 일반메서드이기 때문에 그냥 상속

//--> 추상클래스(부모)의 자식 --> 자식클래스는 가능할까? 
// --> 가능하나 abstract메서드 오버라이딩, 해야한다 -->위의 2개의 클래스 전부
// --> Citizen > TemporarySolider > Army

}


알게된 점

  • abstract는 추상클래스(부모)로서 상속받는 하위클래스는 반드시 메서드를 오버라이딩 해야한다.
  • 굳이 추상클래스를 사용하는 이유는 코드의 강제성을 통해 일관성, 확장성 등을 가질 수 있기 때문이다.
  • 하위클래스가 오버라이딩 하지 않으려면 class앞에 abstract를 통해 추상클래스의 성격을 가지면 된다.
  • 하위클래스의 하위클래스는 결국에는 본인이 상속받은 것을 다 쓸 수 있다. 추상메서드라면 그것은 또한 오버라이딩을 해야 한다.
profile
디자인에서 개발자로

0개의 댓글