멋사 Backend 17일차 🦁

신재원·2023년 5월 10일

🍥 Java

🙋‍♂️ 인터페이스 (Interface) 란?

  • 추상클래스와 마찬가지로 추상된 틀 ( 껍데기 ) 라고 생각하면 편할것 같습니다.
  • 인터페이스 끼리도 implements도 할수있습니다.

🤓 인터페이스 사용

  • 클래스와 달리 접근제어자를 작성 하지 않아도되며, {} 를 통해 논리 식을 작성하지 않아도 됩니다.

📍 인터페이스

public interface PrintHello {
    void print(String message); // 추상된 틀 (껍데기)
}

📍 구현 클래스

public class Print implements PrintHello{
    @Override
    public void print(String message) {
        System.out.println(message);
    }
}
  • 클래스에서 특정한 인터페이스를 구현 ( Implement ) 한다면 인터페이스를 사용한 클래스는 반드시 메소드를 구현해야 합니다.

📍 Main 클래스

public class Main{
    private PrintHello printHello;
    
    public Main(PrintHello printHello) {
        this.printHello = printHello;
    }

    public static void main(String[] args) {

        PrintHello print = new Print();
        printHello1.print("hello"); // hello

    }
}
  • 구현 클래스와 인터페이스를 연결하여 인스턴스를 사용함으로써 유연하고 확장 가능한 코드가 됩니다.

  • public Main(PrintHello printHello) 생성자를 통해 인터페이스를 주입 받는것이 좋다.

    • 이유 : 의존성 분리, 단위 테스트 용이성 등
      ( 추후에 뒤에서 더 자세히 다루겠습니다.)

인터페이스를 왜 사용 해야 하는가 ?

  1. 인터페이스는 다형성을 구현하기 위한 핵심 도구이며, 인터페이스를 구현하는 클래스들은 같은 인터페이스 타입으로 다룰 수 있으며,
    이를 통해 객체의 다양한 구현체를 일관된 방식으로 다룰 수 있습니다.
    ( 코드의 재사용성과 유연성을 높여준다. )
  2. 클래스에 대한 강결합을 낮춰주며 ( 결합도를 낮춘다 ) 유연하고 확장 가능한 코드를 작성할 수 있습니다.

⭕ 3. 협업에서 인터페이스를 미리 추상된 틀을 만들어 설계대로 만들수 있게 할수 있습니다.
( 반환타입, 파라미터 인자 등 )

❗ 추상 클래스와 인터페이스의 차이점 ?

// 인터페이스의 다중 상속
public class User implements Account, Util {
}
  • 가장큰 차이점은 "다중 상속" 을 할수있냐 없냐의 차이가 있습니다.
    • 추상 클래스는 단일 상속만 허용합니다. ( 이러한 이유때문에 잘 사용 X )
    • 인터페이스는 "다중 상속" 이 가능하며, 여러개의 인터페이스를 구현할수 있습니다.

🐱‍🐉 번외

전략(Strategy) 패턴

  • 스프링에서 사용하는 패턴입니다.
  • 인터페이스를 사용하며 DI (생성자 주입) 등을 함으로써, 유지보수가 좋으며, 테스트 코드를 작성하기가 편합니다.

OOP 규칙

  • OOP 규칙에 다다르게 하기위해 끊임없이 리팩토링 해야합니다....

0개의 댓글