[오브젝트] 의존성 관리

skayjays·2021년 12월 19일
0

오브젝트

목록 보기
1/4

객체지향 설계란 의존성을 관리하는 것이고 객체가 변화를 받아들일 수 있게 의종성을 정리하는 기술이다.

의존성 이해하기

변경과 의존성

  • 어떤 객체가 협력하기 위해 다른 객체를 필요로 할 때 두 객체 사이에 의존성이 존재하게 된다.

실행시점: 의존하는 객체가 정상적으로 동작하기 위해서는 실행 시에 의존 대상 객체가 반드시 존재해야한다.
구현시점: 의존 대상 객체가 변경될 경우 의존하는 객체도 함께 변경된다.

의존성 전이

  • PeriodCondition이 Screening에 의존할 경우 PeriodCondition은 Screening이 의존하는 대상에 대해서도 자동적으로 의존하게 된다는 것을 말한다.

직접 의존성: 말그대로 한요소가 다른 요소에 직접 의존하는 경우
간접 의존성: 직접적인 관계는 존재하지 않지만 의존성 전이의 의해 영향이 전파되는 경우

런타임 의존성과 컴파일타임 의존성

  • 런타임 의존성: 어플리케이션이 실행되는 시점에 의존성 판단
  • 컴파일타임 의존성: Class 사이의 의존성

컴파일타임 구조와 런타임 구조 사이의 거리가 멀면 멀수록 설계가 유연해지고 재사용 가능해진다.

컨텍스트 독립성

  • 컨텍스트 독립성이란 클래스가 사용될 특정한 문맥에 대해 최소한의 가정만으로 이뤄져 있다면 다른 문맥에서 재사용하기가 더 수월해진다 를 의미한다.
  • 클래스는 자신과 협력할 객체의 구체적인 클래스에 대해 알아서는 안된다.
  • 구체적인 클래스를 알면 알수록 그 클래스가 사용되는 특정한 문맥에 강하게 결합된다.
  • 컨텍스트 독립성을 따르면 다양한 컨텍스트에 적용할 수 있는 응집력 있는 객체를 만들 수 있고 객체 구성 방법을 재설정해서 변경 가능한 시스템으로 나아갈 수 있다.

의존성 해결하기

  • 컴파일타임 의존성을 실행 컨텍스트에 맞는 적절한 런타임 의존성으로 교체하는 것을 의존성 해결이라고 한다.

의존성 해결 방법 3가지

  • 객체를 생성하는 시점에 생성자를 통해 의존성 해결
  • 객체 생성 후 setter를 메서드를 통해 의존성 해결
  • 메서드 실행 시 인자를 이용해 의존성 해결

유연한 설계

의존성과 결합도

  • 결합도란 의존성의 강함 정도를 표현하는 것이다.
  • 결합도의 정도는 한 요소가 자신이 의존하고 있는 다른 요소에 대해 알고 있는 정보의 양으로 결정된다.

추상화에 의존하라

  • 구체 클래스 의존성 (결합도 강함)
  • 추상 클래스 의존성 (결합도 약함)
  • 인터페이스 의존성 (결합도 매우 약함)

표준 클래스에 대한 의존은 해롭지 않다.

  • ArrayList는 변할일이 없다.
  • 그래도 List를 쓰는 습관을 들인다.

컨텍스트 확장하기

  • 할인율이 적용되지 않는 내용이 추가된다고 할때 null로 처리하기바도 할인적용없은 에대한 정책을 정의해서 if 문에 대한 예외를 제거할 수 있다.

정리

이번 장에서는 의존성 관리에 대해 알아보았다. 개발을 하다 보면 정말 많이 고민하게 되는 파트인 만큼 좀 더 자세히 읽었는데 역시나 모호했던 정의들이 잘 정리 되어있었다. 그중 가장 공감되는 부분은 컨텍스트 독립성을 가져가야 한다는 부분이였다. 결국 이 부분이 제대로 이뤄지지 않아 복잡성이 올라간다고 생각되기 때문이다.
앞으로 방법에 집중하기보다 목적에 집중 할 수 있도록 더 노력 해야겠다.

profile
기초를 탄탄하게

0개의 댓글