Published on

마커인터페이스 Maker Interface

Authors
  • avatar
    Name
    ywj9811
    Twitter

마커 인터페이스(Marker Interface)란?

마커 인터페이스란 아무 메소드도 선언되어있지 않고, 단지 자신을 구현하는 클래스가 특정 속성을 가짐을 표시하는 인터페이스를 의미한다.

이를 통해 객체에 대한 런타임 유형 정보를 제공하기에 컴파일러와 JVM은 객체에 대한 추가 정보를 갖는다.

덕분에 컴파일러 시점에 예외를 발생할 수 있다는 장점이 있다.

하지만, 이는 Code Smell로 표현될 수 있기 때문에 주의하여 사용되어야 한다.

왜냐하면 마커가 어떤 동작도 정의하지 않기 때문에 인터페이스가 나타내는 것의 경계가 모호해지기 때문이다.

때문에 주석을 선호하기도 한다고 한다.

JDK 사용 사례

Java에는 Serialized, Cloneable, Remote와 같은 많은 내장 마커 인터페이스가 있다.

위의 예시는 해당 인터페이스를 구현하지 않은 객체에 대해 직렬화 혹은 복사 등등을 수행하려 했을 때 JVM에서 예외를 발생시키도록 하는 것이다.

나의 사용 사례

나는 소셜 로그인 API에서 상황에 따라 서로 다른 응답을 해줘야 하는 문제가 존재했다.

만약 기존의 회원이라면 바로 로그인 토큰을, 회원이 아니라면 정보를 전달하여 추가 가입을 유도해야 한다.

하지만 이미 개발되어 있는 모습을 보면 따로 API가 존재하는 것이 아닌, 경우에 따라 서로 다른 모습으로 응답을 하고 있었다.

이를 위해서 ResposeDto<?> 와 같이 와일드카드 타입을 사용하고 있었다.

하지만 이는 모든 타입을 받아줄 수 있기 때문에 논리적으로 설계에 오류가 발생했을 때 발견하기 어려울 수 있다.

따라서 API를 나누지는 않지만, 컴파일러 시점에 오류도 잡을 수 있도록 하고 싶었기에 마커 인터페이스를 사용하게 되었다.

AuthResponse 라는 인터페이스를 생성한 후 비회원의 응답과 회원의 응답 DTO가 이것을 구현하도록 하여 만들었다.