금융에 대한 모든 것

인터페이스란?

 인터페이스는 몸체가 없는 메서드들의 모임입니다. 클래스를 구현하기 전에 만들 메서드를 먼저 정해놓는 것입니다.

 

인터페이스

public interface Service {

    public static final number = 10;
        
    String getString(String a);
    int getInteger(int b);
}

인터페이스 안에는 구현할 메서드명, 리턴 타입, 매개변수를 정의합니다. 인터페이스에서 필드를 선언할  있지만 static final 강제 적용되기 때문에 해당 필드의 값을 변경할  없습니다.

 

인터페이스를 구현한 클래스

public class ServiceImpl implements Service {
        
    public String getString(String a) {
            return a;
    }
    
    public int getInteger(int b) {
            return b;
    }
}

클래스 옆에 implements라는 예약어와 인터페이스명을 적어줍니다. 그리고 인터페이스에서 정의한 메서드들을 똑같이 적어 로직을 구현합니다. 만약 메서드명이나 매개변수가 다르면 오류가 납니다. 또한 인터페이스의 메서드들을 구현할  접근 제어자는 public이어야 한다는 것에 유의합니다. 하나의 클래스에서 여러 개의 인터페이스를 구현하는 것도 가능합니다.

 

인터페이스를 사용하는 이유

 인터페이스를 이용하여 클래스를 구현하면 다른 클래스와 대체가 유연해서 유지보수가 편해진다는 장점이 있습니다. 마치 규격만 맞으면 다른 부품으로 바꿀 있는 것처럼 쉽게 변경할 있기 때문입니다.

 

인터페이스를 사용하지 않은 클래스

public class B Service {
        
    public int getString(int a) { // A클래스의 getString과 메서드명은 같지만 리턴타입과 매개변수가 다름
            return a + "string";
    }
}

유지 보수하기 불편함

public class Controller {
        
   public void method() {
    A a = new A();
   
    a.getString();  
    a.getInteger();
    a.getBool();
    ...    
           ...
   ...
   }
}

위와 같이 수많은 클래스에서 A클래스의 메서드들을 이용하고 있다고 가정해봅시다.  상태에서 다른 사람 만든 B클래스를 A클래스 대신 사용하려고 하면 메서드명이나 매개변수의 상태가 같지 않을  있기 때문에 연결이 어렵습니다. 수정을 한다고 다른 클래스에서 사용되는 메서드들을 하나씩 수정해야 하는 번거로움이 생깁니다.

 

인터페이스를 사용한 클래스

public class B implements Service {
        
    public String getString(String a) { // A클래스와 같은 리턴타입, 메서드명, 매개변수
            return a + "string";
    }
       ...
       ...
}

유지 보수하기 편함

public class Controller {
        
   public void method() {
    B a = new B(); // 인스턴스화 부분만 변경
    
    a.getString();
    a.getInteger();
    a.getBool();
       ...    
       ...
       ...
   }
}

B클래스는 A 같은 인터페이스에 따라 구현했기 때문에 이미 사용되고 있는 메서드들은 변경할 필요 없이 인스턴스화 부분만 바꿔주면 오류 없이 코드 동작을 변경할  있습니다. , 같은 인터페이스를 구현한 클래스끼리는 유연하게 대체가   있습니다

반응형