SW 개발 방법론 - 객체지향 (OOP) - 추상클래스 vs 인터페이스
추상클래스 vs 인터페이스
추상클래스 vs 인터페이스
1. 추상클래스 : 객체 인스턴스를 생성하지 않으며, 단지 유사클래스들의 공통 특징을 정의하고 하나 이상의 추상 메소드를 포함하는 클래스
- 오퍼레이션 중복정의 방지 : 여러 클래스들 사이에 공통으로 사용되는 오퍼레이션이 있을 경우 같은 오퍼레이션을 중복해서 정의 방지
2. 인터페이스 : 인터페이스라는 말은 흔히 외부의 다른 모듈과 데이터를 주고받는다는 의미나 어떤 기능을 요청하고, 그 결과를 받는다의 의미로 사용
3. 같은점 : 객체를 추상화했다는 개념
추상화 : 공통적인 성질을 모아 놓은 집합의 개념
4. 다른점 : 추상 클래스는 함수 구현이 가능
5. 상호 특징 비교
인터페이스 : 함수 선언만 가능/구현 불가 , static 변수 가능/일반 변수 불가능
추상클래스 : 함수 선언만 가능/구현 가능 , static 변수 가능/일반 변수 가능


# abstract class(추상클래스) vs interface(완전 추상클래스)
- 일반변수 가능 vs 상수(static final) 만 가능
- 일반메소드 보유가능 vs 일반 메소드는 없음(모두 추상메소드임)
- 다중상속 불가능 vs 다중상속 가능
- extends vs implements
#추상클래스의 정의: 객체 인스턴스를 생성하지 않으며 단지 유사클래스등의 공통특징을 정의하고 하나 이상의 추상메소드를 소유하는 클래스 >> 구상클래스에서의 구현 강제(템플릿으로 많이 활용)
- 장점 : 재사용 부품을 이용하여 확장가능, 점진적 개발용이
#인터페이스 : 추상클래스와 유사하나 일반메소드와 멤버변수를 갖지 못하고 오직 추상메소드와 상수변수만 소유가능한 완전추상클래스
- 장점: 동시개발로 개발기간 단축, 표준화 가능, 서로 관계없는 클래스등의 관계 생성가능
* 선언부
abstract class Shape{ // 추상클래스
abstract void draw();
void hit(int x){ // 일반메소드 소유가능
x=3;
}
interface Shape{ // 인터페이스(추상메소드만 소유가능)
abstract void draw();
}
* 구현부
class Circle extends Shape{ // 추상클래스 구현하는 구상클래스(concrete calss)
void draw(){ // 추상메소드를 구현함
system.out.println("원그리기");
}
void hit(int x){ // 일반메소드는 그대로 상속받아서 사용가능
x=3;
}}
class Circle implements Shape{ // 인터페이스 구현
void draw(){
system.out.println("원그리기"); // 모든 메소드를 구현해서 사용
}
}
1. 추상클래스(Abstract Class)와 인터페이스(Interface) 개요
추상클래스(Abstract Class) |
인터페이스(Interface) |
객체 인스턴스를 생성하지 않고, 단지 유사 클래스들의 공통된 특징을 정의하고 하나 이상의 추상 메소드와 일반 필드 및 일반 메소드를 포함하는 클래스 |
기능(Function)을 모아놓은 클래스로 추상 메소드와 상수(static final 필드)만을 포함하는 추상 클래스 |
2. 추상클래스(Abstract Class)와 인터페이스(Interface) 비교
구분 |
추상클래스 |
인터페이스 |
개념도 |
|
|
변수 |
일반변수 가능 |
상수(Static Final)만 가능 |
추상메소드 |
보유 가능 |
보유 가능 |
일반메소드 |
보유 가능 |
보유 불가능 |
다중상속 |
불가능 |
가능 |
장점 |
- 재사용 부품을 이용하여 확장 가능 - 점진적 개발 용이 |
- 동시 개발로 개발기간 단축, 표준화 가능 - 서로 관계 없는 클래스들 관계 생성 가능 |
선언 |
abstract class Shape {
abstract void draw( ); // 메소드 앞에 abstract가 있으면 추상 메소드 void hit(int x){ x=3; } } |
interface Shape {
public void draw( ); // 인터페이스에서는 abstract 생략 가능 public void move(int y); } |
구현 |
class Circle extends Shape
// 상속처럼 extends를 씀 { void draw( ){ // 일반 메소드 형태로 구현 System.out.println ("원을 그린다"); } } |
class Circle implements Shape
{ public void draw( ){ System.out.println("원을 그린다"); } public void move(int y){ System.out.println ("원을 이동시킨다"); } } |
3. 추상클래스와 인터페이스의 활용방안
- 공통된 기능을 정의하여 사용하고자 할 때는 추상클래스를 사용함
- 기능을 집약시켜 놓고 각각 다른 로직을 개발하는 경우는 인터페이스를 사용함
- 추상클래스는 서브클래스와 강하게 결합되는 형태로 개발될 때 유리, 인터페이스는 기능만 정의하고 구현은 개별클래스에서 하는 약한 결합관계에서 개발할 때 유리함