티스토리 뷰

728x90
반응형

Spring MVC에서 Service 레이어를 interface와 implements로 나누는 이유와 장점을 설명해드리겠습니다.

1. 느슨한 결합도 (Loose Coupling)
- interface를 사용하면 실제 구현체(implements)와 이를 사용하는 클래스 간의 결합도가 낮아집니다.
- 예를 들어, Controller는 ServiceImpl의 구체적인 내용을 알 필요 없이 interface만 알면 됩니다.



2. 유연성과 확장성

public interface UserService {
    User findUser(Long id);
}

public class UserServiceImpl implements UserService {
    public User findUser(Long id) {
        // 실제 구현
    }
}

// 새로운 구현체가 필요할 때 쉽게 추가 가능
public class NewUserServiceImpl implements UserService {
    public User findUser(Long id) {
        // 다른 방식으로 구현
    }
}

 


3. 테스트 용이성

// 테스트를 위한 Mock 구현이 쉬워집니다
public class MockUserService implements UserService {
    public User findUser(Long id) {
        return new User(id, "test");
    }
}

 

 

4. 비즈니스 로직의 명확한 정의
- interface는 "무엇을 해야 하는가"를 명확히 정의합니다
- implements는 "어떻게 구현할 것인가"를 담당합니다

 


5. 다형성 활용

@Autowired
private UserService userService; // interface를 통한 의존성 주입
// 실제 구현체는 설정에 따라 UserServiceImpl 또는 NewUserServiceImpl이 될 수 있습니다



이렇게 분리함으로써 코드의 유지보수가 쉬워지고, 새로운 기능을 추가하거나 변경할 때 기존 코드를 수정하지 않고도 새로운 구현체를 만들어 적용할 수 있습니다. 실제 업무에서는 하나의 interface에 대해 운영용, 테스트용, 개발용 등 다양한 구현체를 만들어 상황에 맞게 사용할 수 있다는 장점이 있습니다.

728x90
반응형