위임

Ajisai·2024년 1월 9일
0
  • has a 관계
  • 위임 관계에 있는 클래스의 인스턴스를 가지고 있는 상태이다.
  • 상속은 클래스 간의 관계, 위임은 인스턴스 간의 관계
  • 어떤 행위를 위임 관계에 있는 객체에게 넘겨서 처리하는 것.
public class MyService {
    MyRepository myRepository; //Service "has a" Repository

    public void save() {
        myRepository.save();
    }
}

상속 관계는 정적인 관계로 컴파일 시간에 모든 관계가 정해지고 변경될 수 없지만 위임 관계는 동적인 관계로 런타임 시간 동안 관계가 변경될 수 있다.
간단한 예시로 save()를 수행할 때 처음에는 myRepositoryMemoryRepository로 쓰다가 어느 순간에 JpaRepository로 교체하여 사용할 수 있다.

또한 다형성을 활용함으로써 두 클래스 간의 결합도가 낮아진다.
myRepository의 구현체를 변경하여도 MyService 입장에서는 실제 구현체가 아닌 그들이 구현하는 인터페이스를 바라보기 때문에 적절한 구현체를 갈아 끼우기만 하면 되기 때문이다.

물론 결합도가 낮아져도 구현체를 바꿔 넣기 위해 코드를 직접 수정해야 한다. 즉 OCP; Open-Close Principle 원칙에 위배된다.

Spring을 쓰면 의존성 주입을 프레임워크가 해주므로 OCP를 준수할 수 있다.

profile
Java를 하고 싶었지만 JavaScript를 하게 된 사람

0개의 댓글

관련 채용 정보