추상 클래스
: 클래스는 크게 일반 클래스와 추상 클래스로 나뉨
: 클래스 내 추상 메서드가 하나 이상 포함되거나 abstract로 정의된 경우
: 추상 메서드가 있을 수 있고 일반 메서드가 있을수도 있음
: 추상 클래스로 인터페이스를 구현할 수 있지만 이때는 모두 구현하지 않아도됨
: 추상 클래스로 인스턴스를 만들 수 없지만 추상 클래스를 상속 받은 클래스를 통하면 인스턴스가 가능
- 목적
: 상속을 위함
abstract class Shape
{
abstract void draw( ); //메소드 앞에 abstract가 있으면 추상메소드다.
void hit(int x)
{
x=3;
}
}
인터페이스
: 모든 메서드가 추상 메서드인 경우
: JAVA 8에서는 defult 키워드를 이용해서 일반 메서드의 구현도 가능
: 안이 비어있는 메서드들로만 구성되어 있으며 상속하는 클래스들에서 해당 메서드등의 내용을 구현해야함
: 일반 변수들을 가질 수 없으며 인터페이스 변수들은 static이여야 함
- 목적
: 함수의 구현을 강제함으로써 구현 객체의 같은 동작을 보장
interface Shape
{
void draw( ); //인터페이스에서는 abstract 생략가능하다.
abstract void move(int y);
}
추상 클래스와 인터페이스
: 상속받는 클래스 혹은 구현하는 인터페이스 안에 있는 추상 메서드를 구현하도록 강제함
: 이를 생각해보면 결국 추상 메서드를 구현 하는 것은 같음
: 추상 클래스 안에 추상 메서드를 여러 개 두거나 전부 추상 메서드로 두어도 인터페이스와 동일
- 차이점
: 인터페이스와 추상 클래스는 존재 목적이 다름
: 추상 클래스는 상속 받아서 기능을 이용하고 확장시키는 목적
: 인터페이스는 함수의 껍데기만 있는데, 함수의 구현을 강제함으로써 구현 객체의 같은 동작을 보장하는 것이 목적
- 개념이 나뉜 이유
: JAVA가 다중 상속을 지원하지 않기 때문에 이 두 개념이 나온 것 (다중 상속의 모호성으로 인함)
: 모든 클래스가 같은 이름의 메서드를 가지고 있을 때 다중 상속을 받으면 가장 마지막 자식 클래스에서 해당 클래스를 호출하면 어떤 부모 클래스의 메서드가 실행될지 모르기 때문
: 이와 달리 인터페이스는 여러 개의 인터페이스를 구현할 수있음
상속
: 슈퍼 클래스의 기능을 이용하거나 확장하기 위해 사용
: 다중 상속의 모호성 때문에 하나만 상속 받을 수 있음
: 반면 인터페이스는 해당 인터페이스를 구현한 객체들에 대해 동일한 동작을 약속
Reference
'Development > Development' 카테고리의 다른 글
GOF (Gang Of Four)와 디자인 패턴 (0) | 2023.03.10 |
---|---|
데코레이터와 어노테이션 (0) | 2023.03.10 |
함수형 프로그래밍에 대해 알아보자 (0) | 2023.03.10 |
객체 지향 프로그래밍에 대해 알아보자 (0) | 2023.03.10 |
모든 주니어 개발자들에게 전하는 충고 5 (0) | 2023.02.06 |