-
Java - 추상 클래스(추상 클래스 만드는 이유)3개발언어/JAVA 2023. 11. 3. 15:29
추상 클래스 만드는 이유
package abstractex; public class ComputerTest{ public static void main(String[] args){ //오류 발생 ⛔Computer c1 = new Computer(); Computer c2 = new DeskTop(); //오류 발생 ⛔Computer c3 = new NoteBook(); Computer c4 = new MyNoteBook(); } }
Computer 클래스형으로 인스턴스를 4개 생성했다. 그런데 코드를 보면 Computer와 NoteBook에서 오류가 난다. 오류 메시지를 확인해보면 Computer클래스와 NoteBook클래스를 인스턴스로 생성할 수 없다고 나온다.
추상 클래스는 인스턴스로 생성할 수 없다
abstract class ABC{ abstract void a(); void b(){ System.out.println("b()"); } }
추상 클래스는 모든 메서드가 구현되지 않았으므로 인스턴스로 생성할 수 없다. 예를 들어 위와 같은 ABC 클래스가 있다고 가정해보자.
ABC 클래스는 추상 클래스이며 a() 추상 메서드를 가지고 있다. 만약 ABC 클래스를 생성하는 ABC abc = new ABC(); 문장이 가능하다면 abc.a() 메서드를 호출했을 때 어떤 코드가 수행될까? 결론을 말하자면 구현된 코드가 없으므로 수행할 수 있는 내용이 없다. 따라서 추상 클래스는 인스턴스로 만들 수 없다.
추상 클래스에서 구현하는 메서드
구현된 메서드 하위 클래스에서 공통으로 사용할 구현코드. 하위 클래스에서 재정의할 수도 있음 추상 메서드 하위 클래스가 어떤 클래스냐에 따라 구현 코드가 달라짐 추상 클래스는 상속을 하기 위해 만든 클래스이다. 그렇다면 어떤 메서드를 구현하고, 어떤 메서드를 구현하지 않고 추상 메서드로 남겨 두는 것일까? 추상 클래스에서 구현하는 메서드는 하위 클래스에서도 사용할, 즉 하위 클래스에서도 구현내용이 동일 하게 사용될때 메서드를 구현한다. 실제 하위 클래스에서 내용을 각각 다르게 구현해야 한다면, 구현 내용을 추상 메서드로 남겨 두고 하위 클래스에 구현을 위임하는 것이다.
💡 tip) 추상 클래스와 프레임워크
실제 추상 클래스는 많은 프레임워크에서 사용하고 있는 구현 방식이다. 예를 들어 안드로이드를 생각해보면, 안드로이드 앱을 만들 때 안드로이드 라이브러리에서 제공하는 많은 클래스를 사용한다. 이들 클래스 중에는 모두 구현된 클래스도 있지만, 일부만 구현되어 있어 상속을 받아 구현하는 경우도 많다.
이때 안드로이드에서 구현해 놓은 코드(메서드)는 내부적으로 사용하거나 상속받은 모든 클래스가 공통으로 사용할 메서드이다. 그리고 구현을 미루어 놓은 메서드(추상 메서드)는 실제로 앱에서 어떻게 만드냐에 따라 다르게 구현해야할 내용으로 앱에서 구현하도록 선언만 해둔 것이다.[출저 - Do it! 자바 프로그래밍 입문 , 박은종]
http://www.easyspub.co.kr/20_Menu/BookView/A001/267/PUB
'개발언어 > JAVA' 카테고리의 다른 글
Java - 추상 클래스(템플릿 메서드 응용하기)4 (1) 2023.11.04 Java - 추상 클래스(템플릿 메서드)3 (0) 2023.11.03 Java - 추상 클래스(추상 클래스)1-1 (0) 2023.11.03 Java - 상속 다형성(다형성 활용하기:IS-A 관계, HAS-A 관계)6-2 (1) 2023.11.03 Java - 상속 다형성(다형성 활용하기)6-1 (1) 2023.11.03