카테고리 없음

관심사 분리 5. 원칙과 패턴

dev_0hoon 2024. 9. 19. 22:17

 

  • 원칙 : 객체지향 설계 원칙
  • 패턴 : 객체지향 디자인 패턴

첫 원칙은 관심사 분리였다.

개방 폐쇄 원칙 (Open-Closed Principle (OCP))

- 무엇 하나가 열려있다면 무엇은 닫혀있다.

-> 클래스나 모듈은 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다.

-> 무슨 뜻이야??

-> 확장은 하는데 코드는 바뀌면 안된다.

 

관심자 분리 1~4까지 보았다면 이제는 PaymentService는 prepare라는 메소드를 사용할 때에 그 데이터를 Api에서 읽어오든 DB에서 읽어오든 코드 수정이 필요하지 않게 되었다.

 

 

높은 응집도와 낮은 결합도

- 응집도가 높다는 것은 하나의 모듈이 하나의 책임 또는 괌심사에 집중되어있다는 뜻.

- 변화가 일어날 때 해당 모듈에서 변하는 부분이 크다.

- 책임과 관심사가 다른 모듈과는 낮은 결합도

- 즉 느슨하게 연결된 형태를 유지하는 것이 바람직하다.

 

전략 패턴

- 자신의 기능 맥락(Context)에서, 필요에 따라서 변경이 필요한 알고리즘을 인터페이스를 통해 통째로 외부로 분리시키고, 이를 표현한 구체적인 알고리즘 클래스를 필요에 따라 바꿔서 사용할 수 있게 하는 디자인 패턴

      List<String> scores = Arrays.asList("z","x","spring","java");
        Collections.sort(scores, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.length() - o2.length();
            }
        });
        
        //람다
        //Collections.sort(scores, (o1, o2) -> o1.length() - o2.length());

        scores.forEach(System.out::println);

전형적인 전략 패턴의 예이다.  클래스를 포함시키면 sort의 기준을 바꿀 수 있다.

    @SuppressWarnings({"unchecked", "rawtypes"})
    public static <T> void sort(List<T> list, Comparator<? super T> c) {
        list.sort(c);
    }

 

근데 사실 봐도 모르겠다. 어떤 상황에서 사용하면 좋을지..

제어의 역전 (Inversion of Control)

- 제어권 이전을 통한 제어관계 역전,  프레임 워크의 기본 동작 원리

- 코드를 작성했을 때 제어가 어디에서 일어났는가?

- 관심사분리 1~4를 보면 exRate를 어디에서 부르게 끔 변경되기 시작했는가?

- 결국 Client가 필요했던 제어권을 경국 ObjectFactory가 가져가게 되었다.