일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- CentOS
- Bridge Pattern #구조패턴 #Structure Pattern
- MariaDB #DB #기본쿼리 #select
- 프록시패턴 #Gof #ProxyPattern #Proxy
- 자바 #인터페이스 #추상클래스 #abstract #
- 데이터베이스
- PostgreSQL
- GoF #빌더패턴 #Builder Pattern
- GOF #
- Today
- Total
개발자 기초부터 시작하기
[JAVA] 인터페이스와 추상클래스의 차이 본문
자바 기본 개념서를 보면 추상클래스(Abstract Class)와 인터페이스에 대해 공부할때
애매하게 설명하고 어떻게 쓰는지, 왜 비슷한 용도의 두개가 나뉘어 쓰이는지에 대한 설명이 부족했다
이번글의 목표는 다음과 같다.
- 인터페이스란 무엇인지
- 추상클래스란 무엇인지
- 각각의 사용 이유 및 차이점
인터페이스란 ?
- 클래스의 설계도 혹은 명세서이다.
- 모든 메소드는 public abstract (생략가능) 메소드들이며 일반 변수는 가질 수 없다.
- interface 키워드를 통해 생성된다.
인터페이스의 모양
public interface Vehicle {
public abstract void move();
}
인터페이스를 구현한 클래스
public class Car implements Vehicle{
@Override
public void move() {
// TODO Auto-generated method stub
}
}
추상 클래스란?
- 자바에서 클래스는 일반 클래스와 추상 클래스로 구분이 된다.
- 0개 이상의 추상 메소드(abstract 메소드)를 가지고 있고, 일반 메소드, 일반 변수 등을 가질 수 있다.
- class 앞에 abstract 키워드를 사용해 생성한다.
public abstract class Animal {
int a = 0;
String k = "동물";
// 추상 메소드
public abstract void color();
protected abstract void height();
// 일반 메소드
public void printName(String name) {
System.out.println(name);
};
}
추상 클래스를 상속받은 Cat 클래스
public class Cat extends Animal{
@Override
public void color() {
// 부모(Super Class) Animal에서 받은 변수 a
System.out.print(a);
}
@Override
protected void height() {
// TODO Auto-generated method stub
}
// 일반 메소드인 printName은 무조건 구현하지 않아도됨
}
"뭐 이정도 차이가 있다는 건 알겠어.. 근데 뭐 때문에 나눴지?" 라는 생각이 들 수 있다.
둘 다 추상메소드를 가지고 있고.. 외관상으로도 크게 차이가 없어보이니 말이다.
간단하게 조금 더 설명이 들어가자면
추상 클래스는
- 슈퍼클래스의 기능을 이용하거나 확장하기 위해 활용된다.
- 일반 변수와 메소드를 활용할 수 있다.
- 일반 메소드는 상속받을 클래스에서 다시 재정의할 필요는 없다.
- 다중상속은 불가하다.
인터페이스는
- 하나의 메소드로 상속받은 클래스들의 동작을 일관성 있도록 도와준다.
- 약속 같은 것으로 협업에 중요한 역할을 한다.
- 여러 인터페이스를 구현할 수 있다.
참조자료