추상 클래스
추상 클래스(abstract class)란 선언은 되어 있으나 코드가 구현되어 있지 않은, 즉 껍데기만 있는 메소드이다.
abstract 키워드와 함께 원형만 선언하고 코드는 작성하지 않는다.
추상 클래스(abstract class)가 되는 경우는 다음 2가지이다.
1. 추상 메소드를 포함하는 클래스
abstract class Shape{
public Shape(){ }
public void pain() {draw();}
abstract public void draw();
}
2. 추상 메소드가 없지만 abstract로 선언한 클래스
abstract class MyComponent{
String name;
public void load(String name) {
this.name = name;
}
}
객체를 생성 불가
응용프로그램은 추상 클래스의 객체를 생성할 수 없다. 추상 클래스는 본디 객체를 생성할 목적으로 만드는 클래스가 아니다.
추상 클래스의 상속
추상 클래스를 단순히 상속받는 서브 클래스는 추상 클래스가 된다.
그러므로 서브 클래스에 abstract를 붙여 추상 클래스임을 명시해야 컴파일 오류가 발생하지 않는다.
abstract class Shape{
public Shape() { }
public void paint() {draw();}
abstract public void draw(); // 추상메소드
}
abstract class Line extends Shape{ //추상 클래스
public String toString() {return "Line";}
}
위와 같이 추상 클래스 Shape을 상속받는 Line 클래스에서 추상 메소드인 draw()를 오버라이딩하지 않으면 자동으로 추상 클래스가 되므로, Line은 abstract 키워드를 사용하여 추상 클래스임을 명시해야 한다.
(즉, 추상 클래스를 상속받아, 추상 메소드를 구현하지 않으면 추상 클래스가 된다.)
추상 클래스의 구현과 목적
추상 클래스의 구현이란, 슈퍼 클래스에 선언된 모든 추상 메소드를 서브 클래스에서 오버라이딩하여 실행 가능한 코드로 구현하는 것을 말한다.
abstract class Shape{
public abstract void draw();
}
class Line extends Shape{
@Override
public void draw(){
System.out.println("Line");
}
}
추상 클래스는 추상 메소드를 통해 서브 클래스가 구현할 메소드를 명료하게 알려주는 인터페이스 역할을 하고, 서브 클래스는 추상 메소드를 목적에 맞게 구현하는 다형성을 실현할 수 있다.
인터페이스
구성
Java 10이 출시된 지금 인터페이스는 다음 5종류의 멤버로 구성되며, 필드(멤버 변수)를 만들 수 없다.
- 상수와 추상 메소드 (Java 7까지)
- default 메소드 (Java 8부터)
- private 메소드 (Java 9부터)
- static 메소드 (Java 9부터)
특징
- 인터페이스에 구현되지 않은 추상 메소드를 가질 수 있기 때문에 객체를 생성할 수 없다.
- 인터페이스 타입의 레퍼런스 변수는 선언 가능하다.
예를 들면 다음과 같다.
PhoneInteface galaxy; // galaxy는 인터페이스에 대한 레퍼런스 변수
- 인터페이스끼리 상속된다.
- 인터페이스를 상속받아 클래스를 작성하면 인터페이스의 모든 추상 메소드를 구현해야 한다.
구현
인터페이스 구현이란 implements 키워드를 사용하여 인터페이스의 모든 추상 메소드를 구현한 클래스를 작성하는 것을 말한다.
상속
클래스는 인터페이스를 상속받을 수 없고, 인터페이스는 다른 인터페이스를 상속할 수 있다.
인터페이스는 클래스와는 달리 다중 상속을 허용한다.
public interface 하위인터페이스 extends 상위인터페이스1, 상위인터페이스2 { }
인터페이스를 상속받아 클래스를 작성하면 인터페이스의 모든 추상 메소드를 구현해야 한다.
다중 인터페이스 구현
클래스는 하나 이상의 인터페이스를 구현할 수 있다. 이 경우 콤마로 각 인터페이스를 구분하여 나열하며, 각 인터페이스에서 선언된 모든 추상 메소드를 구현하여야 한다.
class AIPhone implements MobileInterface, AIInterface { }
추상 클래스 vs. 인터페이스
추상 클래스 | 인터페이스 | |
사용 키워드 | abstract | interface |
사용 가능 변수 | 제한 없음 | static final |
사용 가능 접근 제어자 | 제한 없음 | public |
사용 가능 메소드 | 제한 없음 | abstract method, default method, static method, private method |
상속 키워드 | extends | implements |
다중 상속 가능 여부 | 불가능 | 가능 |
*오기재가 있을 경우 알려주세요*
'2-1 학기 > OOP' 카테고리의 다른 글
[JAVA] Wrapper 클래스 (0) | 2023.05.31 |
---|---|
[JAVA] Object 클래스 (0) | 2023.05.31 |
[JAVA] 메소드 오버라이딩(Method Overriding) (0) | 2023.05.30 |
[JAVA] 업캐스팅과 instanceof 연산자 (0) | 2023.05.23 |
[JAVA] 상속 (0) | 2023.05.09 |