OOP(객체지향 프로그래밍)
- 절차지향 프로그래밍과 달리 객체단위로 코드를 조직화해서 재사용성을 높이고 협업과 유지보수성에 유리함
- 상속 : 부모 객체의 특성을 그대로 물려받아서 재사용성을 높일수 있음
- 다형성 : 같은 데이터를 받아도 여러 형태가 나올수 있는것으로 함수 오버로딩이나 하나의 인터페이스 객체에 여러 구현 객체를 사용가능함
- 캡슐화 : 객체의 내부를 보여주고 싶은 부분만 보여줄수 있음. public(전부), private(같은 클래스 내부에서만), package(같은 패키지 내부에서만), protected(같은 패키지 내부에서 상속됬을때만)
인터페이스란?
- 보통 두장치 사이의 통신을 원할히 할수 있게 해주는 접합부를 의미한다. 자바에서 인터페이스는 여러 클래스들을 동일한 형식으로 정의해준다.
추상클래스란?
- 한개 이상의 추상 메소드가 있는 클래스로 여러 클래스들을 추상화된 형식에 맞추게 한단 점에서 인터페이스와 비슷하다. 몇가지 문법적 차이가 있다.
둘간의 공통점
- 추상메소드(구현부가 없는 메소드)를 구현할수있으며 해당 인터페이스와 추상클래스를 상속받은 클래스는 무조건 추상메소드를 구현해야한다.
- 그 자체로 인스턴스화가 불가능하다. 꼭 다른 클래스에 상속해서 써야한다.
- 해당 인터페이스, 추상클래스 변수에 구현된 클래스의 인스턴스를 넣어 사용함으로써 다형성을 살려 사용할 수 있다.
- 추상클래스와 달리 인터페이스는 default키워드를 사용하지 않으면 일반 메소드를 선언할 수 없다.
둘간의 차이점
- 추상클래스와 달리 인터페이스는 다중상속이 가능하다.
- 상속시 인터페이스는 implements, 추상클래스는 extends를 사용한다.
- 인터페이스는 추상클래스와 달리 static final 변수만 선언할 수 있다. 구현클래스 스스로 해당 변수를 초기화 할수 없기 때문에 추상클래스에 비해 인터페이스의 형식이 조금더 엄격하다고 볼수 있다.
코드 사용방식
abstract class abstractClass{
int a = 0;
public abstract void fun1();
public void fun2() {}
}
interface interfaceClass{
int a=0;
public void fun3();
public void fun4();
}
public class testClass extends abstractClass implements interfaceClass {
@Override
public void fun3() {
// TODO Auto-generated method stub
}
@Override
public void fun4() {
// TODO Auto-generated method stub
}
@Override
public void fun1() {
// TODO Auto-generated method stub
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
abstractClass의 fun2()의 경우 구현된 메소드임으로 testClass내부에서 this.fun2()로 사용할 수 있다.
사용의의
- 프로젝트 설계를 할때 인터페이스나 추상 클래스를 사용해서 각 객체의 접합부를 미리 만들어놓고 설계 테스트를 할수 있다. 또한 경험 많은 개발자가 설계한 것을 밑의 개발자들이 구현할때 구현상 실수를 줄여줄 수 있는 장점이 있다.
'언어 > Java' 카테고리의 다른 글
(Java)메모리 상수풀 영역 / JDBC / 리플렉션 / 제네릭 (0) | 2021.07.23 |
---|---|
(Java)JVM / JRE / JDK / 컴파일 동작 과정 (0) | 2021.07.23 |