추상클래스 & 인터페이스
참고 블로그 를 바탕으로 작성하였습니다.
메서드는 선언부와 구현부로 구성되어있습니다. 선언부만 작성하고 구현부는 작성하지 않은 메서드를 추상메서드
라고 합니다.
추상클래스와 인터페이스는 모두 추상메서드를 포함하며 상속을 위한 클래스이기 때문에 객체를 생성할 수 없습니다.
즉 상속받은 클래스에서 선언된 메서드를 구현하게 됩니다.
추상클래스 (abstract class)
- 추상 메서드를 선언하여 상속을 통해서 자손 클래스에서 완성하도록 유도하는 클래스로
미완성 설계도
라고 할 수 있습니다. - 구현부를 지닌 일반 메서드 또는 멤버변수를 가질 수 있고, 클래스 구현부 내부에 추상메서드가 하나 이상 포함됩니다.
abstract
키워드로 정의해서 사용하고, 상속을 통해 자식클래스에서extends
키워드를 통해 완성됩니다.
- 추상 메서드를 선언하여 상속을 통해서 자손 클래스에서 완성하도록 유도하는 클래스로
인터페이스 (Interface)
인터페이스는 추상클래스보다 추상화 정도가 높으며 오직 추상메서드와 상수만을 가질 수 있습니다.
즉, 구현부를 지닌 일반 메서드 또는 멤버변수를 가질 수 없고 이에 따른 제약 조건이 있습니다.
- 모든 멤버변수는 public static final 이며 생략가능
- 모든 메서드는 public abstract 이며 생략가능
생략된 제어자는 컴파일러가 컴파일 단계에서 추가해줍니다.
단 static메서드와 디폴트 메서드는 예외 (jdk1.8부터)
interface
키워드로 정의하고 접근지정자도 사용할 수 있으며, 상속을 통해 자식클래스에서implements
키워드를 통해 완성됩니다.클래스가 아니기 때문에 다중상속이 가능합니다.
인터페이스를 사용하는 이유 : 클래스는 다중 상속이 불가능 하기 때문에 여러 인터페이스의 메서드를 상속받아 사용하기 위해 사용합니다.
이와 같은 차이점에 따라 사용하는 의도가 나뉘게 됩니다.
C#
/ JAVA
의 특성상 한개의 클래스만 상속이 가능하기 때문에
- 추상클래스의 상속으로 클래스의 구분을 해결
- 기능들을 인터페이스로 구현
으로 나누어 사용합니다.
인터페이스의 장점
그러면 인터페이스를 사용하는 이유는 무엇일까?
1. 개발시간을 단축시킬 수 있다.
- 개발자들이 각각의 부분을 완성할 때까지 기다리지 않고
서로 규약만 정해두어 각자의 부분만 따로 나눠서 작성된 코드를 컴파일 할 수 있다.
2. 표준화가 가능하다.
- 클래스의 기본틀을 제공하여 개발자들에게 정형화된 개발을 강요할 수 있다.
3. 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다.
- 코드의 종속성을 줄이고 유지보수성을 높이도록 해준다.
즉 클래스들끼리의 쓸데없는 상속을 줄일 수 있다.
4. 독립적인 프로그래밍이 가능하다.
- 클래스와 클래스간의 직접적인 관계를 인터페이스를 통해 간접적인 방법으로 변경하면,
한 클래스의 변경이 다른 클래스에 영향을 미치지 않는 독립적인 프로그래밍이 가능하다.
추상클래스 예제
다음은 추상클래스의 예제이다.
public class Animal extends AnimalValue {
String sound;
// 추상메서드 구현(재정의)
@Override
void sound(String sound) {
this.sound = sound;
}
@Override
void behavior() {
System.out.println(sound);
}
public static void main(String[] args) {
Animal tiger = new Animal();
tiger.sound("어흥");
tiger.behavior();
}
}
// 추상클래스
abstract class AnimalValue {
abstract void sound(String sound);
abstract void behavior();
}
@Override는 어노테이션 종류 중 하나인데, 간단히 설명하자면, 이것이 붙은 메서드는 반드시 부모클래스나 인터페이스에 명시되어야 한다. 재정의를 할때 오타로 인한 오류를 막아주는 역할이라고 생각하면 편하다.
인터페이스 예제
interface interfaceExample {
int NUMBER = 1; // public static final int NUMBER = 1;
void getNumber(); // public abstract void getNumber()
;
}
class useInterface implements interfaceExample {
@Override
public void getNumber() {
// 재정의...
}
}
'SW > C# & WPF' 카테고리의 다른 글
[C#] Callback, Delegate (0) | 2021.06.01 |
---|---|
[WPF] Thread와 Dispatcher를 이용한 멀티스레딩 (0) | 2021.06.01 |
[C#] HTTP 통신 (0) | 2021.06.01 |
[C#] 싱글톤패턴 (0) | 2021.05.28 |
[C#] 비동기식 프로그래밍 TAP (0) | 2021.05.19 |
Comment