작성
·
293
0
강의를 듣다 보면, 컨트롤러, 어댑터 서비스 리포지토리 등 인터페이스로 정의한 뒤에 실제 구현객체를 따로 두는 형태로 개발을 하고 있는데
MVC 강의를 들어보면 어댑터의 경우 createParamMap 이라는 공통으로 사용되는 메서드가 있는데, 어댑터 들은 어댑터 끼리 "의미있는 연관 관계"가 아니라 같은 기능을 하기 때문에 interface로 정의하는 걸까요?
createParamMap같이 똑같이 사용되는 건 interface에 default 메서드나, 추상 클래스에 메서드로 사용하면 좋을 것 같은데, 이렇게 default 메서드로 구현하거나 추상클래스의 메서드로 구현하는 부분에서도 차이가 있을까요? 둘의 차이가 없다면, 왜 추상 클래스가 아닌 인터페이스로 정의하고 구현객체를 두는지 궁금합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴이에요.
인터페이스와 추상클래스 모두 객체를 정의하는데 사용되지만, 다음과 같은 차이점이 있습니다.
어댑터의 경우, 인터페이스로 정의되고 실제 구현객체를 따로 두는 이유는 인터페이스를 기반으로 여러 개의 구현체를 사용할 수 있기 때문입니다. 예를 들어, 어댑터 인터페이스를 정의하고 구현체를 따로 두면, 필요한 기능을 갖춘 다양한 어댑터 구현체를 사용할 수 있습니다. 마찬가지로, 서비스, 리포지토리 등도 인터페이스로 정의하고 구현객체를 따로 둠으로써 다양한 구현체를 사용할 수 있게 됩니다.
createParamMap과 같이 똑같이 사용되는 메서드는 인터페이스에 default 메서드로 구현할 수도 있지만, default 메서드는 구현을 가지기 때문에 다중 상속 시 충돌의 위험이 있을 수 있습니다. 따라서, 공통으로 사용되는 메서드를 가진 인터페이스를 정의하고, 구현 객체에서 해당 메서드를 구현하도록 하는 것이 더 유연한 설계 방식입니다.
결론적으로, 인터페이스와 추상클래스 모두 객체 정의에 사용되지만, 인터페이스는 다중 상속과 구현 여부에 제한이 없으며, 추상클래스는 단일 상속을 통해 구현과 위임을 동시에 할 수 있는 장점이 있습니다. createParamMap과 같은 공통 메서드는 인터페이스에 정의하여 다양한 구현 객체에서 유연하게 사용할 수 있습니다.
더 궁금한 사항이 있다면 언제든지 물어보세요!요.