View
Virtual & Abstract & Interface
가상 클래스 (Virtual Class)
: virtual 키워드를 사용하는 클래스
특징
- Abstract와는 달리 구체적인 기능 기술 O (본문 정의 O)
- 파생 클래스에서 재정의 O (필수가 X)
- 자식 클래스에서 new 또는 override 키워드 사용 O
- override : 재정의/확장
- new : 기본 클래스 숨기기
- base 키워드를 통해 부모 클래스의 함수 호출 O
- private, static 등 접근 한정자 사용 X
추상 클래스 (Abstract Class)
: 추상 메소드를 포함하고 있는 클래스
※ 추상 메소드 : 선언부만 작성하고 구현부는 작성하지 않은 메소드
주로 전혀 다른 클래스들에 사용하기보다는 비슷한 특징을 지닌 클래스들에 사용함
공통된 클래스들에 대해 추상화된 부분을 추상 메소드를 통해 하위 클래스들에게 상속을 통해 사용할 수 있도록 함
예시
언제 추상 메소드를 사용할까?
public class mouse extends animals {
void say() {
System.out.printlin("찍찍");
}
}
public class cat extends animals {
void say() {
System.out.println("야옹");
}
}
public class animals {
void say() {
System.out.println("???");
}
}
☞ 위와 같은 경우에 추상 메소드를 사용하면 좋다.
public class animals {
abstract void say();
}
특징
- extends 키워드를 사용하여 상속
- 추상 클래스는 키워드 abstract 를 붙여 표현
- 추상 메소드를 포함하지 않은 클래스에서도 abstract 를 붙여 추상 클래스로 지정 O
- 추상 메소드를 포함하는 클래스는 반드시 추상 클래스여야 함
- 클래스를 abstract 로 지정하면 new 를 통해 객체를 직접 생성 X
- 메소드에 abstract 를 사용할 경우 interface 메소드와 같이 구현 부분은 없음
- 자식 클래스에서 추상 메소드를 반드시 구현해야 함 (오버라이딩)
- 상속하는 집합 간에는 연관 관계가 있음
- 다중 상속 X
인터페이스
: 일종의 추상 클래스로, 추상 메소드를 갖지만 추상 클래스보다 추상화 정도가 높아
추상 클래스와 달리 몸통을 갖춘 일반 메소드, 멤버 변수를 구성원으로 가질 수 없음 (구현된 것이 아무것도 없음)
특징
- implements 키워드를 사용하여 상속
- 그 자체만으로 사용되기보다, 다른 클래스를 작성하는 데 도움을 줄 목적으로 작성됨
- 일반 메소드 / 멤버 변수를 구성원으로 가질 수 X
- 모든 메소드는 public abstract 이어야 하며, 이를 생략 O
- 모든 멤버 변수는 public static final 이어야 하며, 이를 생략 O
- Java 8 부터는 static, default 메소드 사용 O
- 상속하는 집합 간에는 연관 관계가 존재하지 않을 수 O
- 다중 상속 O
♠ public static final 사용?
구현 객체의 같은 상태를 보장하기 위해 사용
인터페이스 변수는 아무 인스턴스도 존재하지 않는 시점이기 때문에 스스로 초기화될 권한이 X
추상 클래스 & 인터페이스의 상속
추상 클래스
: 객체 지향의 상속 특징을 가지고 있음 (상위 클래스의 특성을 재사용&확장)
인터페이스
: 클래스가 '무엇을 할 수 있다'라고 하는 기능을 구현하도록 강제 (클래스의 목적에 맞게 기능 구현)
사용 케이스
추상 클래스
- 관련성이 높은 클래스 간에 코드를 공유하고 싶은 경우
- 추상 클래스를 상속받을 클래스들이 공통으로 가지는 메소드와 필드가 많거나, public 이외의 접근자(protected, private) 선언이 필요한 경우
- non-static, non-final 필드 선언이 필요한 경우 (각 인스턴스에서 상태 변경을 위한 메소드가 필요한 경우)
인터페이스
- 서로 관련성이 없는 클래스들이 인터페이스를 구현하게 되는 경우
- 특정 데이터 타입의 행동을 명시하고 싶은데, 어디서 그 행동이 구현되는지 신경 쓰지 않는 경우
- 다중 상속을 허용하고 싶은 경우
※ 출처
1) https://ri3n.tistory.com/51
2) https://minquu.tistory.com/222
4) https://devlog-wjdrbs96.tistory.com/370
'Basics' 카테고리의 다른 글
CI/CD란? (0) | 2022.04.13 |
---|---|
Static이란? (0) | 2022.03.17 |
프로그래밍 용어 01 (0) | 2022.01.07 |
reply