2021. 3. 9. 23:39ㆍJAVA 공부
이번에는 abstract 에 대해 알아 보아요 ~
abstract
영어로 이런 뜻을 가지고 있어요 ~
프로그래밍 에서는 ....
클래스와 메서드에서 사용이 되는데요 ~
클래스 앞에 abstract 가 붙으면, 그 클래스는 객체화 할 수 없습니다.
즉. 상속을 통해서만 사용 할 수 있습니다.
그리고, 메서드 앞에 abstract가 붙으면, 자식 클래스는 무조건 오버라이딩을 해주어야 합니다.
※ abstract 를 메서드에 사용하면, 클래스 앞에도 무조건 붙여 주어야 합니다.
예제를 보죠
프랜차이즈 지점이라고 생각을 해봅시다.
본사에서 사과, 포도, 오렌지 를 팔기로 했고, 가격은 지점마다 알아서 결정하기로 했습니다.
그런데... 서울지점에서 사과와 포도만 가격을 정하고, 오렌지의 가격을 까먹고 안 정한 겁니다.
그러면, 오렌지는 못팔죠?
그런데.. 이미 부모 클래스에서 오렌지 메서드를 상속 받았기 때문에 자식 클래스에서 오렌지 메서드를 사용할 수 있습니다.
사과와 포도는 오버라이딩을 했으니, 자식 클래스에서 재정의 한 메서드를 실행을 하는데 !
오렌지는 오버라이딩을 안 했으니, 부모에 있는 상속 받은 메서드가 실행이 되는 겁니다.
이러한 일을 막기 위해서 추상화 abstract 를 사용하는 겁니다 ~
그러면 abstract 를 사용해서 위의 클래스들을 고쳐 볼까요?
부모 클래스 ParentStore 앞에 abstract 를 붙여주고, 무조건 오버라이딩 해야할 메서드 앞에 abstract 를 사용해 줍니다.
그러면, 자식 클래스 에서는 abstract가 붙었던 메서드를 전부 오버라이딩 해주지 않으면 오류가 납니다.
메서드 앞에 abstract 를 사용하면 메서드 뒤에 중괄호{} 는 쓰지 않습니다. 어차피 오버라이딩 해야하기 때문에
그렇기 때문에, 전부 무조건 꼭 오버라이딩을 해주어야 합니다
요렇게 고쳐주면 되겠습니다.
그리고 전부 오버라이딩이 되었으니, main 에서 사용을 하면 각각 재정의 된 메서드가 실행이 되겠죠?
그리고......
추상화(abstract)를 사용한 부모 클래스에서는, abstract 메서드 말고 다른 멤버변수, 일반 메서드 를 사용할 수 있습니다.
메서드 앞에 final 이 붙으면 ? 오버라이딩 금지.
이렇게, 추상화된 클래스 안에서 다른 멤버변수, 생성자, 일반메서드 를 사용할 수 있습니다.
그리고, 저번 시간에 배운 다형성을 이용해서 이렇게 자식 클래스의 객체를 부모 클래스에 저장 할 수 있기도 하고, 상속을 받았기 때문에.. 부모클래스가 가지고 있는 걸 사용할 수 있는데 ! 무조건 abstract가 붙은 메서드는 자식클래스에서 재정의가 되야 한다는 것 ! 기억해주세요
★ 정리 ★
1. 메서드에 abstract 키워드를 붙이면 추상메서드가 됩니다. (이 메서드는 상속을 통해서 반드시 오버라이딩이 되야합니다)
2. 추상메서드는 {}가 없는 메서드의 선언 입니다.
3. 추상메서드는 일반 클래스에 선언할 수 없습니다. (추상메서드를 사용하려면 클래스도 추상클래스가 되어야 합니다)
4. 추상클래스는 일반메서드, 일반멤버변수, 생성자 모두 사용이 가능합니다.
이렇게 abstract (추상화) 에 대해 알아 보았습니다
고생하셨습니다
'JAVA 공부' 카테고리의 다른 글
Day18 - interface 02 (0) | 2021.03.11 |
---|---|
Day17 - interface 01 (0) | 2021.03.10 |
Day16 - final (0) | 2021.03.09 |
Day16 - static 변수의 초기화 / 싱글톤 (0) | 2021.03.09 |
Day16 - static의 사용 (0) | 2021.03.09 |