Java Method의 반환형을 interface로 하면 ?

ZEDY·2024년 4월 4일
0

개발

목록 보기
2/11

문득 그런 생각이 들었습니다.
return을 interface로 하면 어떨까??

Java의 method 반환

메서드가 반환하는 것은 해당 메서드를 호출한 부분에게 반환되는 값입니다. 이 값은 메서드의 반환 유형에 의해 정의됩니다. 반환 유형은 메서드 선언부에 지정되며, 메서드가 실행되고 완료된 후에 해당 값을 반환합니다.

Java에서 메서드의 반환 유형은 기본 데이터 유형(primitive type), 참조 데이터 유형(reference type), 또는 void일 수 있습니다.

1. 기본 데이터 유형(primitive type)

int, double, boolean 등과 같은 기본 데이터 유형을 반환할 수 있습니다. 이러한 유형의 값은 메서드 호출 부분으로 직접 반환됩니다.

 public int add(int a, int b) {
     return a + b;
 }

2. 참조 데이터 유형(reference type)

클래스, 인터페이스 또는 배열과 같은 참조 데이터 유형을 반환할 수 있습니다. 이 경우 메서드는 해당 유형의 객체에 대한 참조를 반환합니다.

 public String getName() {
     return "John";
 }

또는

 public SomeObject getObject() {
     SomeObject obj = new SomeObject();
     // obj 초기화 및 조작
     return obj;
 }

3. void

반환 유형이 void인 경우 메서드는 어떤 값을 반환하지 않습니다. 대신에 메서드는 작업을 수행하고 그 결과를 반환하지 않습니다.

 public void printMessage() {
     System.out.println("Hello, world!");
 }

메서드가 반환하는 값은 해당 메서드의 반환 유형과 일치해야 합니다. 만약 메서드가 반환 유형이 int인데 String을 반환하려고 한다면 컴파일 오류가 발생합니다.

interface란?

인터페이스(Interface)는 Java에서 클래스가 구현해야 하는 메서드의 명세(specification)를 정의하는 추상형(abstract type)입니다. 이는 클래스가 특정한 동작을 보장하고, 다른 클래스와의 상호작용을 가능하게 합니다.

인터페이스 특징

  1. 추상 메서드 정의
    인터페이스는 메서드의 시그니처(signature)만을 정의하고, 해당 메서드의 몸체(body)는 포함하지 않습니다. 이러한 메서드를 추상 메서드(abstract method)라고 합니다. 클래스가 인터페이스를 구현할 때는 인터페이스에 정의된 모든 추상 메서드를 반드시 구현해야 합니다.

  2. 다중 상속 지원
    클래스는 단일 상속만 허용되지만, 여러 개의 인터페이스를 구현할 수 있습니다. 이를 통해 클래스가 여러 개의 독립적인 협업 관계에 동시에 참여할 수 있습니다.

  3. 코드의 유연성
    인터페이스를 사용하면 클래스 간의 느슨한 결합을 유지할 수 있습니다. 클래스는 인터페이스를 통해 서로 다른 구현을 가질 수 있으므로, 코드의 유연성과 확장성이 향상됩니다.

  4. 표준화와 일관성
    인터페이스는 특정 동작을 보장하는 표준화된 명세를 제공하므로, 다른 클래스에서 동일한 인터페이스를 구현함으로써 일관성 있는 동작을 유지할 수 있습니다.

인터페이스는 interface 키워드를 사용하여 정의되며, 다음은 간단한 인터페이스의 예시입니다.

public interface Animal {
    void makeSound(); // 추상 메서드 정의
    void eat();
}

위 예시에서 Animal 인터페이스는 makeSound()eat()이라는 두 개의 추상 메서드를 정의하고 있습니다. 클래스가 Animal 인터페이스를 구현하려면 이 두 메서드를 반드시 구현해야 합니다.

Java에서 method의 return으로 interface를 사용할 수 있는가?

YES !
Java에서 메서드의 반환 유형으로 인터페이스를 사용할 수 있는 이유는 다형성(polymorphism)의 개념과 관련이 있습니다. 다형성은 하나의 인터페이스나 클래스를 여러 가지 형태로 구현하거나 사용할 수 있는 능력을 의미합니다.

메서드가 인터페이스를 반환할 때, 실제 반환되는 객체는 해당 인터페이스를 구현한 클래스의 인스턴스입니다.

그래서 좋은점은?

  1. 유연성과 확장성
    메서드가 인터페이스를 반환하면 클라이언트 코드는 실제 반환되는 구현 클래스의 세부 사항을 알 필요가 없습니다. 대신 인터페이스의 메서드를 사용하여 객체를 조작할 수 있습니다. 이는 코드의 유연성과 확장성을 높여줍니다. 만약 나중에 다른 구현 클래스로 교체하고자 할 때, 클라이언트 코드를 수정할 필요 없이 새로운 구현 클래스를 사용할 수 있습니다.

  2. 코드의 재사용
    같은 인터페이스를 반환하는 다양한 메서드가 있을 때, 이러한 메서드들은 클라이언트 코드에서 동일한 방식으로 사용될 수 있습니다. 따라서 인터페이스를 반환하는 메서드를 통해 코드를 재사용할 수 있습니다.

  3. 의존성 역전 원칙(Dependency Inversion Principle, DIP) 준수
    메서드가 구체 클래스가 아닌 인터페이스를 반환함으로써 의존성 역전 원칙을 준수할 수 있습니다. 클라이언트 코드가 구체 클래스가 아닌 추상화된 인터페이스에 의존하게 되므로, 클라이언트 코드와 구현 클래스 사이의 결합도가 낮아지고 유연성이 향상됩니다.

따라서 Java에서 메서드의 반환 유형으로 인터페이스를 사용하는 것은 코드의 유연성과 재사용성을 높이고, 객체 지향 설계 원칙을 준수하는 데 도움이 됩니다.

예를 들어, 여러 구현체가 같은 인터페이스를 구현하고 있을 때, 메서드가 해당 인터페이스를 반환하면 클라이언트는 구현체의 실제 유형을 몰라도 인터페이스를 통해 메서드에 접근할 수 있습니다. 이것은 코드를 확장하고 유지보수하기 쉽게 만듭니다.

아래는 인터페이스를 반환하는 메서드의 간단한 예시입니다.

public interface SomeInterface {
    void someMethod();
}

public class SomeImplementation implements SomeInterface {
    @Override
    public void someMethod() {
        // 구현 내용
    }
}

public class MyClass {
    public SomeInterface getSomeObject() {
        return new SomeImplementation();
    }
}

위의 예시에서 MyClassgetSomeObject() 메서드는 SomeInterface를 반환합니다. 이렇게 하면 클라이언트는 SomeImplementation의 존재를 알 필요가 없고, 대신에 인터페이스를 통해 메서드를 호출할 수 있습니다.

profile
Spring Boot 백엔드 주니어 개발자

0개의 댓글