추상 클래스(abstract class)와 인터페이스(Interface)
1. 추상 클래스(abstract class)
: 추상 클래스는 전체적인 구성이 '구체화'되어 있지 않고 설계만 되어있는 클래스라고 정의할 수 있습니다.
클래스라는 것을 만들어 두면 이것을 인스턴스 화하여 객체를 생성하고 객체를 통해 클래스의 기능을 이용하게 됩니다. 객체지향 언어에서 클래스는 객체를 구체화한 것인데 이 구체화 단계가 명확하게 떨어지지 않을 대 추상 클래스를 사용하게 됩니다.
추상 클래스는 상속(extends)을 통한 자식 클래스를 의해 완성되며 abstract 키워드로 클래스가 작성됩니다.
abstract class School { // abstract 추가
abstract student high();
abstract student secondary()
}
추상 클래스와 추상 메서드 속성
- 추상 메서드가 하나 이상 포함된 클래스는 반드시 추상 클래스이어야 합니다.
- 추상 클래스에서 선언된 메서드는 추상 메서드가 아니어도 상관이 없습니다.(일반 메서드도 선언 및 구체화 가능)
- 추상 클래스를 상속하는 자식 클래스는 반드시 추상 클래스의 메서드를 오버라이딩 해주어야 합니다.
- 추상 메서드는 구체화하지 않고 선언만 합니다.
※ 추상 메서드를 오버라이딩 하지 않으면 에러가 발생이 됩니다.
abstract class School { // 추상 클래스 선언
String name;
int age;
School() { // 생성자 사용 가능
name = "카피장인";
age = 40;
}
abstract void speaking(); // 추상 메서드 선언
abstract void listen();
}
class Copymaster extends School { // 추상 클래스 상속
void speaking() { // 추상메서드를 오버라이딩을 해서 구체화 시킴.
System.out.println("말하기");
}
void listen() {
System.out.println("듣기");
}
}
class Example {
public static void main(String[] args){
Copymaster copymaster = new Copymaster();
copymaster.speaking();
}
}
abstract class로 추상 클래스 선언 후 그 안에 추상 메서드를 선언하였습니다.
그리고 Copymaster라는 클래스로 추상 클래스를 상속받고 추상 클래스 내의 추상 메서드를 구체화하였습니다.
2. 인터페이스(interface)
: 추상 클래스와 거의 비슷한 개념이지만, 인터페이스는 절대로 메서드의 구체적인 구현을 가지지 않습니다.
추상 클래스와는 다르게 오로지 선언만 가능하며, 변수를 가질 수 없고 상수만 가질 수 있습니다.
interface 클래스명 {
public static final 변수명 = 값;
public abstract 메서드명(매개변수);
}
인터페이스 속성
- 모든 멤버 변수는 public static final 이어야 합니다.(상수)
- 모든 메서드는 abstract 속성을 가져야 합니다.
- 인터페이스는 인터페이스만 상속 가능하며 인터페이스를 상속(Extends) 받을 때 클래스와 다르게 다중 상속이 가능합니다.
- extends가 아닌 implements를 이용하여 상속받습니다.
interface Lion {
public static final int num = 3;
public abstract void growl();
// int num = 3; // 상수의 경우 public static final이 생략 가능
// void growl(); // 메서드의 경우 public abstract이 생략 가능
}
class Animal implements Lion {
void growl(){
System.out.println("%d번 으르렁대다 :" + num);
}
}
class MainClass {
public static void main(String[] args){
Animal animal = new Animal();
animal.growl();
}
}
Lion을 implement 받은 Animal Class를 만들고 abstract void growl()를 구체화하였습니다.
인터페이스를 사용하는 이유
- 개발 시간 단축.
- 정형화된 프로그램 개발
- 클래스의 선언부와 구현부를 구분하여 보다 독립적인(모듈화) 프로그래밍 가능
- 다중 상속으로 인한 구현의 편리성
Interface는 관리가 쉽다는 부분과 재사용이 용이하며, 선언과 구현부의 구분이 명확하기 때문에 유지보수나 코드 리딩, 구현이 손쉽다는 장점이 있습니다.
'Programming 개발은 구글로 > JAVA[Android]' 카테고리의 다른 글
Android 개발자를 위한 Google I/O 핵심 내용 13가지 (0) | 2022.05.22 |
---|---|
[안드로이드] App Icon 추가 및 수정하기 (0) | 2022.05.19 |
[안드로이드] Androidx 사용법 (0) | 2022.05.17 |
[안드로이드] 적응형 앱아이콘(Adaptive icon) (0) | 2022.05.16 |
[안드로이드] HashMap 사용하기 (0) | 2022.05.14 |
댓글