02.SW

SW 개발 방법론 - 객체지향 (OOP) - 추상클래스 vs 인터페이스

Mr. Slumber 2020. 6. 23. 14:04
728x90
반응형

추상클래스 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. 추상클래스와 인터페이스의 활용방안

- 공통된 기능을 정의하여 사용하고자 할 때는 추상클래스를 사용함

- 기능을 집약시켜 놓고 각각 다른 로직을 개발하는 경우는 인터페이스를 사용함

- 추상클래스는 서브클래스와 강하게 결합되는 형태로 개발될 때 유리, 인터페이스는 기능만 정의하고 구현은 개별클래스에서 하는 약한 결합관계에서 개발할 때 유리함  

 

728x90