본문 바로가기
언어/Java

(Java)OOP / 인터페이스와 추상클래스

by 흥부와놀자 2021. 7. 23.

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()로 사용할 수 있다.

 

 

사용의의

- 프로젝트 설계를 할때 인터페이스나 추상 클래스를 사용해서 각 객체의 접합부를 미리 만들어놓고 설계 테스트를 할수 있다. 또한 경험 많은 개발자가 설계한 것을 밑의 개발자들이 구현할때 구현상 실수를 줄여줄 수 있는 장점이 있다.