본문 바로가기
🌈 백엔드/객체 지향

JAVA_객체지향_인터페이스

by 개발자 알마 2023. 6. 18.
반응형

 

[1] 인터페이스


(1) 인터페이스 interface 

  • 추상화 정도가 높은 추상클래스의 윗버전 같은 것이다 
  • 인터페이스는 기본설계도, 추상클래스는 미완성 설계도 이다 
  • 인터페이스에 메서드를 추가하면 , 인터페이스를 구현한 모든 클래스에 각각 메서드를 구현해야하는 대공사가 필요하다 
  • 인터페이스는 Object클래스가 최상위 클래스가 아니다. 최고 상위클래스는 없다 

 

(2) 인터페이스 구성 

        (2-1) 상수

        (2-2) 추상메서드

        (2-3) default 메서드

  • 추상메서드의 기본구현을 제공한다. 메서드를 추가해도 인터페이스를 구현한 모든 클래스에 메서드를 추가하지 않아도된다
  • public default 기본 
  • 인터페이스를 구현한 클래스에서 디폴트 메서드는 오버라이딩한다
  • 상위클래스의 메서드와 이름이 똑같다면 디폴트 메서드는 무시된다 
public default void play(){...};

        (2-4) static 메서드 

인스턴스 생성없이도 인터페이스 타입으로 사용가능한 메서드 

 

(3) 인터페이스 상속 

  • 다중상속이 가능하다 
  • 인터페이스와 인터페이스로만 상속받는다
  • 인터페이스를 구현한 클래스는 인터페이스 형으로 선언한 변수로 형 변환 할 수 있음
  • 클래스 상속은 단일상속만 가능하여 인터페이스와 차이점이 있다 
  • 구현코드 상속이 아니라 타입상속이다
interface 상위1 {...}

interface 상위2 {...}

interface 하위 extends 상위1 , 상위2 {...}

 

 

 

(4) 인터페이스 구현 

  • 멤버변수: public static final 타입 변수  (생략O)
  • 메서드 : public abstract 메서드 (생략O)
  • static 메서드 , 디폴트 메서드는 생략불가
  • 생략된 부분은 컴파일시 컴파일러가 자동적으로 추가한다 

 

(5) 인터페이스 사용이유

  • 개발시간 단축
  • 표준화 가능
  • 클래스들과의 관계 연결
  • 독립 프로그래밍 제작 
  • 클래스나 프로그램이 제공하는 기능을 명시적으로 선언
  • 일종의 클라이언트 코드와의 약속이며 클래스나 프로그램이 제공하는 명세(specification)
  • 클라이언트 프로그램은 인터페이스에 선언된 메서드 명세만 보고 이를 구현한 클래스를 사용할 수 있음
  • 어떤 객체가 하나의 인터페이스 타입이라는 것은 그 인터페이스가 제공하는 모든 메서드를 구현했다는 의미임

 

 

[2] 인터페이스 다형성 


(1) 인터페이스 다형성

  • 1개 인터페이스와 인터페이스의 메서드를 활용하여 여러 객체의 구현을 사용할 수 있다 
  • 다형성을 활용하기 위해 DAO를 사용한다 data access object 
  • 만들어진 인터페이스를 MySQL, Oracle 등 여러 데이터베이스에 접목시키기 위해 DAO 인스턴스를 사용한다 

 

(2) 인터페이스 타입 형변환 

new 하위클래스 생성자() 를 상위클래스 타입 생성자로 형변환한다 

// 인터페이스 선언
interface Fightable {}

// 인터페이스 상속
class Figher implements Fightable {}

// 인터페이스 상속 + 추상 클래스 
abstract class Fighter implements Fightable {}


Fightable f = (Fightable) new Fighter();

Fightable f = new Fighter();

 

(3) 인터페이스를 매개변수 타입으로 설정하기 

인터페이스에 인터페이스의 매개변수를 넣는다

void attack (Fightable f) {...}

class Fighter extends Unit implements Fightable {
	
    public void move(int x, int y) {...}
    public void attack(Fightable f) {...}
    
    }

 

(4) 인터페이스를 반환타입으로 설정하기

  • Fightable 클래스의 인스턴스 주소를 반환하도록 설정한다
Fightable method() {
	
    Fighter f = new Fighter();
    return f;
    
    }

 

 

 

반응형

댓글