[JAVA]/JAVA 기본
[JAVA] 추상화와 인터페이스
팡펑퐁
2022. 9. 8. 01:54
728x90
추상화
- 기존 클래스들의 공통적인 요소를 모아 정의하는 것으로, 상위 클래스에 위치할수록 추상화의 정도가 높고 하위 클래스에 위치할수록 구체화된다.
abstract 제어자
- 주로 클래스와 메서드를 형용하는 키워드로 메서드 앞에 붙으면 '추상 메서드(abstract method)', 클래스 앞에 붙으면 '추상 클래스(abstract class)'로 부른다. 어떤 클래스에 추상 메서드가 포함되어 있으면 해당 클래스는 자동으로 추상 클래스가 된다.
추상 메서드
- 메서드 시그니처만 존재하고 바디가 선언되지 않음
추상 클래스
- 추상 메서드를 포함하는 미완성의 클래스이다. 미완성의 구조이기 때문에 객체를 생성하는 것이 불가능하다. 상속을 받는 하위 클래스에서 오버 라이딩을 통해 각각 상황에 맞는 메서드 구현이 가능하다.
추상 클래스가 필요한 이유
- 상속 관계에 있어 새로운 클래스를 작성하는데 매우 유용하다. 메서드의 내용이 상속을 받는 클라스에 따라 달라지기 때문에 상위 클래스에서 선언부만 작성하고 실제 구체적인 내용은 하위 클래스에 작성한다면 변경 사항이 있어도 유연하게 대응할 수 있다.
final
- final 키워드는 필드, 지역 변수, 클래스 앞에 위치할 수 있고, 그 위치에 따라 의미가 달라진다.
위치 | 의미 |
클래스 | 변경 또는 확장 불가능한 클래스, 상속 불가 |
메서드 | 오버라이딩 불가 |
변수 | 값 변경이 불가한 상수 |
인터페이스(interface)
- 기본적으로 추상 메서드와 상수만을 멤버로 가질 수 있는 클래스이며, 자바 8 이후에 default/static 메서드가 포함되었다. 쉽게 말해, 추상 메서드의 집합이라고 할 수 있다.
인터페이스의 장점
- 역할과 구현을 분리시켜 복잡한 구현의 내용과 그 내용의 변경에 관계없이 해당 기능을 사용할 수 있다.
인터페이스의 기본 구조
- 인터페이스를 작성하는 것은 기본적으로 클래스와 유사하지만 class 키워드 대신에 interface 키워드를 사용한다. 또한, 내부의 모든 필드가 public static final로 정의되고, default와 static 메서드 이외의 모든 메서드가 public abstract로 정의된다. (모든 인터페이스의 필드와 메서드에 포함되어있기 때문에 요소를 명시하지 않아도 생략이 가능하다.)
interface 인터페이스명 { // 인터페이스 선언
public static final 데이터타입 변수명; //public static final 생략 가능
public abstract void 메소드명(); // public abstract 생략 가능
}
인터페이스의 구현
- 추상 클래스처럼 인터페이스 그 자체로 인스턴스를 생성할 수 없으므로, 메서드 바디를 정의하는 클래스를 따로 작성해야 한다. 추상 클래스가 extends 키워드를 사용하여 상속을 통해 하위 클래스와 연결된 것처럼 '구현하다'라는 의미를 가진 implement 키워드를 사용한다.
class 클래스명 implements 인터페이스명 {
내용
}
특정 인터페이스를 구현한 클래스는 해당 인터페이스에 정의된 모든 추상 메서드를 구현해야 한다.(클래스에게 인터페이스의 추상 메서드를 반드시 구현하도록 강제함)
인터페이스의 다중 구현
- 클래스 간의 상속에서 다중 상속은 허용되지 않지만, 인터페이스에서 다중적 구현은 허용된다. 하나의 클래스가 여러 개의 인터페이스를 구현할 수 있다. 그러나, 인터페이스는 인터페이스로부터만 상속이 가능하고, Object 클래스와 같은 최고 레벨의 부모 클래스는 존재하지 않는다.
class 클래스명 implementes 인터페이스명1, 인터페이스명2, 인터페이스명3{
내용
}
728x90