1. 추상클래스
클래스를 설계도로 비유한다면 추상클래스는 미완성된 설계도이다. 예를 들어 여러 종류의 TV를 생산한다고 가정했을 때 사실 이들의 설계도 90%는 같을 것이며 공통부분을 따로 빼놓는 게 다양한 제품을 만드는데 효율적일 것이다.
1) 추상 클래스의 특징 :
- 추상 클래스는 추상 메서드를 포함할 수 있다. 그러나 추상 메서드가 없어도 추상 클래스로 선언은 가능하다.
- 추상 클래스는 자식 클래스에 상속되어 자식 클래스에 의해서만 완성될 수 있다.
- 추상 클래스는 여러개의 자식 클래스들에서 공통적인 필드나 메서드를 추출하여 만들 수 있다.
2) 추상 메서드 : 아직 구현되지 않은 미완성된 메서드
- abstract 키워드를 사용하여 추상 메서드를 선언할 수 있으며 일반적인 메서드와 달리 블록{}이 없다. (정의만 할 뿐, 실행 내용은 가지고 있지 않다.)
public abstract class 추상클래스명 {
abstract 리턴타입 메서드이름(매개변수, ...);
}
- 추상 메서드는 상속받은 자식 클래스에서 반드시 오버라이딩 되어야 한다.
public class 클래스명 extends 추상클래스명 {
@Override
public 리턴타입 메서드이름(매개변수, ...) {
// 실행문
}
}
2. 인터페이스
1) 인터페이스의 역할
- 상속 관계가 없는 다른 클래스들이 서로 동일한 행위 즉, 메서드를 구현해야 할 때 인터페이스는 구현 클래스들의 동일한 사용방법과 행위를 보장해 줄 수 있다.
- 예를 들어 사람과 삼성티비, 엘지티비 객체가 존재한다고 가정하면 사람 객체는 멀티 리모컨 인터페이스를 통해 삼성티비 뿐만 아니라 엘지티비로 객체가 교체된다고 해도 채널을 변경할 수 있게 한다.
- 인터페이스의 구현 클래스들은 반드시 정의된 메서드들을 구현해야 한다. -> 구현 클래스들의 동일한 사용 방법과 행위를 보장해 줄 수 있다.
2) 인터페이스 선언 : interface 키워드를 사용하여 인터페이스를 선언할 수 있다.
public interface 인터페이스명 {
}
- 인터페이스는 클래스와 마찬가지로 public, default 접근 제어자를 지정할 수 있다.
3) 인터페이스 구성
- 모든 멤버 변수는 public static final 이어야 한다.(생략가능)
- 모든 메서드는 public abstract 이어야 한다.(생각가능, 그러나 static, default 메서드 예외)
public interface 인터페이스명 {
public static final char A = 'A';
static char B = 'B';
final char C = 'C';
char D = 'D';
void turnOn(); // public abstract void turnOn();
}
4) 인터페이스 구현 : 인터페이스는 추상 클래스와 마찬가지로 직접 인스턴스를 생성할 수 없기 때문에 클래스에 구현되어 생성되어야 한다.
- implements 키워드를 사용하여 인터페이스를 구현한다.
- 인터페이스의 추상 메서드는 구현될 때 반드시 오버라이딩 되어야 한다.
- 만약 인터페이스의 추상 메서드를 일부만 구현해야 한다면 해당 클래스를 추상 클래스로 변경해주면 된다.
public class 클래스명 implements 인터페이스명 {
// 추상 메서드 오버라이딩
@Override
public 리턴타입 메서드이름(매개변수, ...) {
// 실행문
}
}
5) 인터페이스 상속 : 인터페이스간의 상속도 가능하다.(implements가 아닌 extends 사용) 또한 다중 상속도 가능하다.
6) static, default 메소드:
- static 메서드 : static으로 메소드나 변수를 선언해주면 클래스와 마찬가지로 객체 생성없이 호출이 가능하다.
- default 메소드 :추상 메서드의 기본적인 구현을 제공하는 메서드이다. 블록{}이 있어야 하며 필수로 재정의 할 필요는 없다.
7) 인터페이스의 다형성 :
// LG TV 구현체를 조작
MultiRemoteController mrc = new LgTv("LG");
mrc.turnOnOff();
mrc.volumeUp();
// 조작 대상을 Samsung TV로 교체
mrc = new SamsungTv("Samsung");
mrc.turnOnOff();
mrc.channelUp();
- 다형성을 이용해 TV구현객체를 교체해도 멀티리모컨 인터페이스 변수는 전혀 수정작업 없이 그대로 기능을 호출할 수 있다.
- 사용 방법은 동일하지만 다양한 특징과 결과를 가질 수 있는 것이 바로 다형성이다.
- 즉, 멀티리모컨으로 티비를 사용하는 방법은 동일하지만 어떤 TV구현객체가 대입되었느냐에 따라 실행 결과가 다르게 나옴을 통해 다형성이 적용되었음을 확인할 수 있다.
'개발 공부 > Java' 카테고리의 다른 글
Java 문법정리 10. 예외처리 (0) | 2023.11.01 |
---|---|
Java 문법 정리 8. 다형성 (1) | 2023.10.19 |
Java 문법 정리 7. 상속 (1) | 2023.10.19 |
Java 문법 정리 6. 객체지향 프로그래밍, 클래스 (0) | 2023.10.19 |
Java 문법 정리 **length vs length() vs size() - 길이 값 불러오기 (0) | 2023.10.13 |