Practice makes perfect
[JAVA] Abstract 클래스, Interface 본문
Abstract class 란?
1. 추상 메소드를 하나라도 가진 클래스이며, 클래스 앞에 반드시 abstract라고 선언해야 합니다.
abstract class Shape { // 추상 클래스 선언
public Shape() { }
public void paint() { draw(); }
abstract public void draw(); // 추상 메소드
}
2. 추상 메소드가 하나도 없지만 abstract로 선언된 클래스 입니다.
abstract class MyComponent { // 추상 클래스 선언
String name;
public void load(String name) {
this.name = name;
}
}
그렇다면 추상 메소드(abstract method)란 무엇일까요?
public abstract String getName();
public abstract void setName(String s);
- 선언되어 있으나 구현되어 있지 않은 메소드 : abstract로 선언 합니다.
- 추상 메소드는 서브 클래스에서 오버라이딩하여 구현해야 합니다.
- 상속 관계하에 다형성에 의한 method overriding 하는 method 입니다.
- 기능을 재정의! 순수하게 overriding 되어 기능을 업그레이드 하기 위합입니다.
- 이름만 빌려주는 것으로 자녀 class에서 기능을 재정의 해서 사용합니다 (불완전한, 완전하지 않은 method)
abstract class Friend
{
……
public void showData()
{
System.out.println("이름 : "+name);
System.out.println("전화 : "+phoneNum);
System.out.println("주소 : "+addr);
}
public abstract void showBasicInfo(); // 메소드를 완성시키지 않는다는 선언
}
- showBasicInfo 메소드는 비어있습니다. 이렇듯 오버라이딩의 관계유지를 목적으로 하는 메소드는 abstract로 선언이
가능합니다.
- 하나 이상 abstarct 메소드를 포함하는 클래스는 abstract로 선언되어야 하며, 인스턴스 생성은 불가합니다.
- 인스턴스 생성은 불가능하나, 참조 변수 선언 가능하고, 오버라이딩의 원리 그대로 적용합니다.
● 추상 클래스의 상속 2 가지 경우
1. 추상 클래스의 단순 상속
- 추상 클래스를 상속받아, 추상 메소드를 구현하지 않으면 추상 클래스 됩니다.
- 서브 클래스도 abstract로 선언해야 합니다.
2. 추상 클래스 구현 상속
- 서브 클래스에서 슈퍼 클래스의 추상 메소드 구현(오버라이딩)해야합니다.
- 서브 클래스는 추상 클래스 아닙니다.
Line, Rect, Circle 은 추상클래스 Shape를 상속받아 만든 서브 클래스로서, draw()를 오버라이딩 하고 있는 것입니다.
그러므로 Line, Rect, Circle 은 추상 클래슥 아니며 이들은 인스턴스를 생성할 수 있습니다.
Interface 란?
: 인터페이스는 두 결과물의 연결고리가 되는 일종의 약속 역할한다고 이야기 할 수 있습니다.
● 인터페이스(interface)의 특징
1. 모든 메소드가 추상 메소드
2. 상수와 추상 메소드로만 구성
3. 필드(멤버 변수) 선언 불가
4. 인터페이스 선언 (interface 키워드로 선언)
5. 모든 메소드는 abstract public이며 생략 가능
6. 상수는 public static final 타입이며 생략 가능
7. 다른 인터페이스 상속 가능
8. 인터페이스의 다중 상속 가능
● 인터페이스의 목적
: 인터페이스는 스펙을 주어 클래스들이 그 기능을 서로 다르게 구현할 수 있도록 하는 클래스의 규격 선언이며,
클래스의 다형성을 실현하는 도구로서 사용하는 것입니다.
● 인터페이스 활용
interface AIInterface {
void recognizeSpeech(); // 음성 인식
void synthesizeSpeech(); // 음성 합성
}
class AIPhone implements AIInterface { // 인터페이스 구현
// AIInterface의 모든 메소드를 구현한다.
public void recognizeSpeech() { ... } // 음성 인식
public void synthesizeSpeech() { ... } // 음성 합성
// 추가적으로 다른 메소드를 작성할 수 있다.
public int touch() { ... }
}
인터페이스는 둘 이상을 동시에 구현 가능하며, 인터페이스의 상속(구현)은 extends가 아닌 implements를 사용합니다.
● 추상 클래스와 인터페이스 비교
유사점
- 객체를 생성할 수 없고, 상속을 위한 슈퍼 클래스로만 사용합니다.
- 클래스의 다형성을 실현하기 위한 목적으로 사용합니다.
다른점
'빅데이터 > JAVA' 카테고리의 다른 글
[JAVA] Object 클래스 (0) | 2020.05.17 |
---|---|
[JAVA] 예외처리 (0) | 2020.05.15 |
[JAVA] 메서드 오버라이딩(Method Overriding) , Instanceof연산자 (0) | 2020.05.07 |
[JAVA] 상속(inheritance) (0) | 2020.05.05 |
[JAVA] 콘솔 출력 (0) | 2020.05.04 |