비전공자의 개발과 친해지기/클래스와 객체

[JAVA : 클래스와 객체]8. 추상화 & 추상클래스

justdoIT0730 2022. 6. 13. 16:40
728x90
728x90

추상화 & 추상클래스

  추상화는 상속에서만 사용될 수 있는 개념이다. "추상적이다"라는 뜻은 "구체적이지 않다"라는 말과 일맥상통한다.

 

  즉, 추상화란 구체적으로 무언가를 만드는 것이 아니다. 이 추상화 개념을 프로그래밍과 연관하여 생각한다면, 부모 클래스에서 추상적으로 메서드를 만들어 놓으면, 자식 클래스에서 해당 메소드를 다시 구체화한다. 

 

public class Main {
	public static void main(String[] args) {
		
		//Animal animal = new Animal("동물"); 불가능합니다.
		
		Lion lion = new Lion("사자");
		lion.Growl();
		
		Cat cat = new Cat("고양이");
		cat.Growl();
	}
}

abstract class Animal {
	
	String Name;
	
	public Animal(String name) {
		Name = name;
	}
	
	abstract public void Growl(); 
}

class Lion extends Animal {

	public Lion(String name) {
		super(name);
	}

	public void Growl() {		
		System.out.println("어흥");
	}
}

class Cat extends Animal {
	public Cat(String name) {
		super(name);
	}
	
	public void Growl() {		
		System.out.println("야옹");
	}
}

예제 코드에서 각 클래스 및 메소드를 통해 추상화에 대하여 확인해보자.

  1. Animal 클래스는 생성자와 Growl 메소드를 가진 클래스인데, Growl 메소드에 abstract 라는 문구가 붙어 있는 것을 볼 수 있습니다. abstract 가 명시된 메소드를 바로 추상화 메소드라고 하며, 추상화 메소드는 내용을 정의하지 않습니다. 즉, 껍데기만 존재하는 메소드이며, 추상화 메소드는 상속된 후 자식 클래스에서 내용을 정의하여 사용할 수 있습니다.
  2. 추상화 메소드를 가진 클래스를 추상 클래스라고 하며, 추상 클래스에도 abstract 를 명시해 주어야 합니다. main 메소드에 주석으로 설명되어 있듯이 추상 클래스는 객체화 할 수 없습니다.
  3. Lion 클래스와 Cat 클래스는 Animal 클래스를 상속받은 자식 클래스입니다. 부모 클래스인 Animal 클래스에서 Growl 메소드를 정의하지 않았으므로, 자식 클래스인 Lion 클래스와 Cat 클래스에서 Growl 메소드를 오버라이딩 해야 합니다. Lion 클래스와 Cat 클래스에서 오버라이딩을 하지 않으면, Lion 클래스와 Cat 클래스 또한 abstract 클래스가 됩니다.
  4. 28번째 줄과 38번째 줄에 있는 super 는 부모 클래스를 지칭하는 문구 입니다. 즉, 위 예제에서는 super(name)이 Animal(name)과 동일하다고 할 수 있습니다.

 

  부모 클래스에서 추상화를 통해 클래스 구조의 뼈대만 구성해두고 자식 클래스에서 목적에 맞게 오버 라이딩하여 사용할 수 있으므로,

 

  프로그램 전체를 살펴보았을 때 좀 더 구조화된 프로그램을 만들 수 있다.

 

728x90
728x90