abstract 키워드 - 추상 메서드와 추상 클래스

2022. 11. 18. 14:13책 공부/스프링 입문을 위한 자바 객체 지향의 원리와 이해

반응형

추상 메서드(Abstract Method) 란 선언부는 있는데 구현부가 없는 메서드를 말한다.

그리고 이 추상 메서드를 하나라도 가지고 있으면 반드시 추상 클래스(Abstarct Class)로 선언해야한다.

 

먼저 예제 코드를 쭉 읽어보자.

 

1-2. Driver Class

package main;

public class Driver {

	public static void main(String[] args) {
		Animal[] animals = new Animal[3];
		
		animals[0] = new Cow();
		animals[1] = new Mouse();
		animals[2] = new Tiger();
		
		
		for (int i = 0; i < animals.length; i++) {
			animals[i].cry();
		}
	}
}

 

1-2. Animal Class

package main;

//public abstract class Animal {
public class Animal {

	public void cry() {
		System.out.println("어떻게... 울었더라..?");
	}
	
	/*
	  abstract void cry
	 */
}

 

1-3. Cow, Mouse, Tiger Class

package main;

public class Cow extends Animal {

	public void cry() {
		System.out.println("찍찍");
		
	}
	
	/*	
	@Override
	void cry() {
		System.out.println("음머~");
		
	}
	 */
}



public class Mouse extends Animal {

	public void cry() {
		System.out.println("찍찍");
		
	}
	
	/*	
	@Override
	void cry() {
		System.out.println("찍찍");
		
	}
	*/
}


public class Tiger extends Animal {

	public void cry() {
		System.out.println("찍찍");
		
	}
	
	/*
	@Override
	void cry() {
		System.out.println("어흥!");
		
	}
	*/
}

 

 

이중 뭔가 어색한 부분이 있다. 

정답을 보기전에 한번 자세히 살펴보자

 

 

 
정답확인

 

정답

 

 

 

 

Animal의 참조 변수를 통해 하위 클래스의 인스턴스가 가진 cry() 메서드를 호출하고 있으니

상위 클래스인 Animal 에는 cry() 가 반드시 존재해야 한다.

하지만 Animal에서 사용하지 않는 구현체를 넣을 필요가 있을까?

만약 넣는다고 하면 실수로 호출할 경우 난감할 수 있다.

 

바로 이런 경우 구현체는 없고 메서드 선언만 있는 추상 메서드를 사용하게 된다.

 

아래 예제를 보기 전에 아래 파일로 먼저 추상 메서드로 바꿔보도록 하자.

java_abstract.zip
0.01MB

 

 

 

반응형

'책 공부 > 스프링 입문을 위한 자바 객체 지향의 원리와 이해' 카테고리의 다른 글

자바가 확장한 객체 지향  (0) 2022.11.15
캡슐화: 정보 은닉  (0) 2022.11.15
다형성  (1) 2022.11.15
상속성  (0) 2022.11.14
추상화 ( Abstracion )  (0) 2022.11.14