안녕하세요.
오늘은 저번 시간에 알아본 추상화에 대해 자바에서는 어떤 형식으로
추상화를 구현하는지에 대해 알아보도록 하겠습니다.
자바의 추상화
자바에서는 추상화를 구현하기 위해 추상 클래스(Abstract Class)와 인터페이스(Interface)를 이용합니다.
추상화란 공통적인 속성과 기능을 정의하여 코드의 중복을 줄이고,
클래스 간의 관계를 효과적을 설정하면서,
유지보수를 용이하게 하는 것 입니다.
추상 클래스(Abstract Class)
추상 클래스는 쉽게 말하자면 미완성된 설계도 입니다.
때문에 이를 통해서는 인스턴스를 생성할 수 없습니다.
그렇기에 오로지 상속을 통해 하위 클래스에서만 완성할 수 있는 것 입니다.
클래스 역할을 못하는 추상 클래스가 필요한 이유는
이것이 새로운 클래스를 작성하는데 유용한 바탕이 되어주기 때문입니다.
또, 아무것도 없는 무에서 클래스를 만들어내는 것 보다는,
추상 클래스라는 최소한의 틀에서 점차 확장시키는 것이 편리하고,
설계에 있어 유연함을 가져다주기 때문입니다.
abstract 제어자는 무엇인가?
추상 클래스를 사용하기 위해서는 'abstract'라는 키워드를 사용하여야 합니다.
abstract는 주로 클래스와 메서드에 붙는 키워드로, 이것을 붙이면 자동으로
추상 클래스와 추상 메서드가 된다고 보면 됩니다.
abstract는 '추상적인'이라는 사전적인 의미가 있지만, 핵심적인 개념은 '미완성' 입니다.
abstract class 클래스명 { . . . }
위와 같이 클래스 선언부가 작성되어 있으면,
이것은 미완성된 추상 클래스이므로 상속을 통해 내부의 추상 메서드를 구현해줘야한다는 점을 알 수 있습니다.
* 추상 메서드가 없더라도 키워드를 붙이면 추상 클래스로 지정은 가능하다.
* 단, 메서드 바디가 완성되기 전에는 이를 기반으로 한 인스턴스를 생성할 수 없다.
추상 메서드(abstract method)
추상 메서드는 구현부가 없이 선언부만 있는 메서드를 말합니다.
추상 클래스와 마찬가지로 설계만 하고 구체적인 내용을 작성하지 않아 미완성인 메서드 입니다.
// 추상 메서드 선언
abstract class Computer {
abstract void PowerOn();
abstract void PowerOff();
}
위와 같이 추상 메서드를 선언하고,
// 추상 메서드 구현
class Com_1 extends Computer {
void PowerOn() {. . .};
}
Or
abstract class Com_2 extends Computer {
void PowerOff() {. . .};
}
위와 같이 추상 메서드를 구현할 수 있습니다.
추상 메서드의 구현은 하위 클래스로 상속하여 실행할 수 있는데,
이때 사용하는 것을 '오버라이딩'이라고 합니다.
오버라이딩을 통해 메서드를 완성시키고,
이렇게 완성된 클래스로 해당 인스턴스를 생성할 수 있습니다.
인터페이스(Interface)
인터페이스는 일종의 추상 클래스라고도 볼 수 있습니다.
추상 클래스와 다른 점이라고 한다면 보다 더 높은 추상화 정도를 가지고 있다는 것 입니다.
때문에 바디가 있는 일반 메서드나 멤버변수를 구성원으로 가질 수 없습니다.
// 인터페이스 선언
public interface Computer {
public static final int temp = 36;
public abstract String getComInfo();
void info()
}
인터페이스는 'interface'라는 키워드를 사용해 만들 수 있습니다.
위에서 알 수 있듯이 구현부가 완성되지 않은 추상 메서드와 상수로만 이루어져 있습니다.
특히 일반 클래스와 다른 점은 내부의 필드가 public static final로 정의되어 있다는 점 입니다.
// 인터페이스 구현
class Com_1 implements Computer { . . . }
인터페이스 구현 시에는 위와 같이 'implements'라는 키워드를 사용합니다.
// 일부 메서드만 구현
abstract class Com_1 implements Computer {
void Info() {. . .}
}
만일 구현하는 인터페이스 메서드 중에 일부만 구현하고 싶다면,
위와 같이 abstract를 붙여 추상 클래스로 선언해줘야 합니다.
// 인터페이스 상속
interface Com_1 { . . . }
interface Com_2 { . . . }
interface Computer extends Com_1, Com_2 { . . . }
위와 같이 인터페이스는 인터페이스로만 상속을 받을 수 있습니다.
자바에서는 다중상속이 불가능한데,
인터페이스로는 가능하다는 점이 특징입니다.
이상으로 자바의 추상화 기법인 추상 클래스와 인터페이스를 알아보았습니다.
'Java' 카테고리의 다른 글
[ JAVA ] 13. 인스턴스(Instance)는 왜 중요할까? (0) | 2023.07.25 |
---|---|
[ JAVA ] 12. 오버라이딩(Overriding)과 오버로딩(Overloading) (0) | 2023.07.17 |
[ JAVA ] 10. 추상화(Abstraction)란 무엇인가? (0) | 2023.07.15 |
[ JAVA ] 09. 객체(Object)와 인스턴스(Instance)는 같은 개념인가? (0) | 2023.07.09 |
[ JAVA ] 08. 객체(Object)란 무엇인가? (0) | 2023.07.08 |