Java - 추상화 클래스

컴퓨터/Java

728x90
반응형

추상화

추상화란 무엇일까요? '추상적이다'라는 말은 실체가 있는 것이 아닌 개념적인 확립을 한다의 의미로 많이 쓰입니다. 

Java언어에서도 이런 추상의 개념을 사용하여 클래스를 설계할수 있습니다. 이런 추상화의 개념이 적용된 클래스를 추상 클래스라고 부르며 실체화될 수는 없지만 개념적인 부분을 정의 내려 상속을 하여 사용할 수 있습니다.

 

추상 클래스

Java언어를 이용하여 흑인,황인,백인이 각각 고유의 색을 가지고 있고 자신의 피부색을 말하는 클래스를 설계한다고 가정해 봅시다. 이 3종류의 클래스는 공통된 부분을 가지고 있습니다. 

  • 피부색
  • 하나의 말하는 기능
    • 백인  : 저는 보통 서양인이라고 불립니다.
    • 황인  : 저는 보통 아시아인이라고 불립니다.
    • 흑인  : 저는 보통 남미,아프라가인이라고 불립니다. 

기존에 있던 부모클래스의 개념으로 위의 2개를 묶어서 사용한다면 아래와 같을 것입니다.

class Human{
	String color;
	void Say()
	{
		System.out.println("나는 사람입니다.");
	}
}

class WhiteHuman extends Human{
	@Override
	void Say(){
		System.out.println("저는 보통 서양인이라고 불립니다.");
	}
}

하지만 만약 아래와 같이 오버라이드를 하지 않는다면 어떻게 될까요?

class WhiteHuman extends Human{

}

부모 클래스의 나는 사람입니다.라는 기능을 수행하게 될 것입니다. 우리가 의도한 설계와는 다르게 말이죠.

 

이런 상황에서 추상화 클래스를 사용한다면 프로그래머가 오버라이드를 필수적으로 작성해야만 사용할 수 있게 됩니다. 

이게 바로 실체는 없고 개념적인 부분만을 상속하기 때문입니다.

 

추상 클래스의 선언

추상 클래스를 사용하기 위해서는 abstract 키워드를 붙여 선언합니다. 그리고 실체하지 않는 개념만을 전달하기 위한 메서드들에 abstract키워드를 붙여 아래와 같이 표현합니다.

abstract class Human{
	String color;
	abstract void Say();
}

class WhiteHuman extends Human{
	@Override
	void Say(){
		System.out.println("저는 보통 서양인이라고 불립니다.");
	}
}

위의 소스코드처럼 abstract 키워드를 사용하여 추상화의 개념을 적용하면 부모 클래스인 Human에서는 Say메서드를 정의하지 않습니다. 이 추상클래스를 상속받은 자식 클래스에서 정의하게 됩니다. 만약 자식 클래스에서 적용하지 않는다면 어떻게 될까요?

class WhiteHuman extends Human{

}

이처럼 에러가 발생하게 됩니다. 이렇게 추상화의 개념을 적용시키면 보다 안전하게 프로그래머가 의도한 대로 설계하는 것이 가능해집니다. (상속을 받으면서 필수적인 재정의가 필요할 때 주로 사용)

 

 

추상 클래스는 인스턴스의 생성이 불가능하다.(추상메서드 포함시)

추상클래스는 완벽하게 실체화할 수 없는 구조입니다. 개념적인 부분만이 적용된 메서드들이 존재하기 때문입니다.

 

따라서 인스턴스 변수로 생성하여 사용할 수 없습니다. (단, 추상메서드가 없는 추상클래스라면 인스턴스화가 가능합니다)

package blog.getset;

abstract class Human{
	String color;
	abstract void Say();
}

class WhiteHuman extends Human{

}

public class abs {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Human h = new Human();
		Human h1;
	}

}

하지만 아래처럼 클래스를 기반으로 변수의 선언은 가능합니다. 이 내용에 대해서는 추후에 클래스 형 변환과 함께 더 다루도록 하겠습니다.

 

추상화 클래스 정의

위의 내용들을 축약적으로 정리하자면 아래와 같습니다.

 

  • 추상의 개념을 적용시킨 클래스로 실체가 없는 개념만 존재하는 메서드들을 삽입할 수 있다
  • 때문에 자식 클래스에서 추상 메서드를 필수적으로 구현하게 설계할 수 있다.

 

728x90
반응형

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :