자바 인터페이스의 default method와 private method

조경찬 (Jo Gyungchan)·2023년 10월 25일
0

자바

목록 보기
2/5
post-thumbnail

Default Method

모두 자바 interface에서 이용 가능한 default method를 아시나요?
최근에 알게된 default method에 대해서 작성해보려고 합니다.


이전까지 인터페이스를 구현하면 인터페이스를 구현할 클래스를 생성하고, 이 클래스 안에서 메서드를 오버라이드 해서 작성했었다.

그런데 만약 인터페이스를 사용하는 클래스가 100개가 있고, 인터페이스에 공통적으로 사용 가능한 메서드 하나를 추가했다고 해보자.

  • 이런 상황이 있을 때 문제는??

    클래스 100개에 동일한 코드를 작성해야됨!!

모든 클래스에 열심히 복사, 붙여넣기를 통해 코드를 추가할 수 있겠지만, 대충 생각해봐도 이것은 너무나도 번거롭고 귀찮은 작업이 될 것 같다.


이를 해결할 방법이 있을까?

이를 해결하기 위한 방법이 바로 설명 드리는 default method이다.
default method는 인터페이스 안에서 작성 가능하고, 구현한 클래스에게 모두 동일하게 적용할 수 있다.

즉, 클래스 100개에 모든 코드를 복사하지 않고 인터페이스에서 default method를 통해 간단히 해결 가능하다!!

  • 아래와 같은 코드가 있다.
public interface MyInterface {
	// 일반적인 인터페이스 활용 방법
    void printMessage();

	// 디폴트 메서드를 이용한 방법
    default String getMessage() {
        return "디폴트 메서드를 이용한 메시지입니다.";
    }
}

public class Main implements MyInterface {

    @Override
    public void printMessage() {
        System.out.println("일반적인 인터페이스 활용");
    }
}

위와 같은 코드가 있을 때 실제로 Main 클래스에서 구현하지 않아도 MyInterface 안에 있는 getMessage() 메서드를 이용 가능하다는 것을 볼 수 있다.


Interface에서 private method

또한 인터페이스에서 private method를 이용할 수 있다.

우리가 클래스를 작성했을 때 중복되는 기능을 효율적으로 관리하기 위한 방법이 무엇이 있을까?

여러가지가 있겠지만, 간단하게 메서드로 분리하는 방법을 생각할 수 있다.

이와 동일하게 인터페이스 안에서도 private method를 이용하여 중복을 제거할 수 있고, 당연하게 해당 인터페이스를 사용하는 클래스들은 private method를 사용할 수 없다.

// 예시 코드
public interface MyInterface {

    void printMessage();

    default String getMessage() {
        return privateMethod();
    }

    default String getMessage(String input) {
        return String.format("%s: %s", input, privateMethod());
    }

	// private method를 이용한 중복 제거
    private String privateMethod() {
        return "디폴트 메서드를 이용한 메시지입니다.";
    }
}

정말 공부하다 보면 모르던 개념들을 너무나도 많이 알 수 있고, 잘 활용해봐야겠다는 생각이 드는 것 같다.

얼른 익숙해질 수 있길~

profile
한걸음씩 성장하는 개발자

0개의 댓글

Powered by GraphCDN, the GraphQL CDN