Section.2
(1)
# 상속을 통해 다양한 메타데이터를 읽을 수 있도록 추상화하기
상속은 코드를 재사용할 수 있다.
MovieFinder 클래스는 그대로 두고 상속을 통해 새로운 형식의 메타데이터를 읽을 수 있도록 이제는 얼마든지 확장을 할 수 있다.
이처럼 부모 클래스의 기본적인 알고리즘의 흐름을 구현하고 중간에 필요한 처리를 자식 클래스에게 위임하는 구조를 디자인패턴에서는 템플릿 메소드 패턴이라고 한다.
템플릿 메소드 패턴은 스프링에서 굉장히 애용되는 디자인 패턴 중에 하나이다.
지금까지 우리는 관심사에 따라 영화 메타데이터를 읽는 것과 영화를 검색하는 것이라는 2개의 관심을 상 하위 클래스로 분리시켰다.
이 2개의 관심사는 변화의 성격이 다르다.
변화의 성격이 다르다는 건 변화의 이유와 시기 또는 주기 등이 다르다는 뜻입니다. MovieFinder 는 영화 목록을 조건에 따라 필터링하는 관심사를 모아둔 곳이고 따라서 이런 관심사가 바뀌면 그때 변경이 일어난다.
즉 영화감독이나 연도가 아니라 영화의 장르나 언어로 검색을 하겠다고 하는 이런 요구 사항이 또는 이런 식의 관심사가 바뀔 때 그때 MovieFinder 클래스에 변경이 일어난다 는 뜻이다.
메타데이터를 읽는 관심사가 변경이 된다고 MovieFinder 클래스가 변경되지는 않는다. 반대의 경우도 마찬가지다.
상 하위 클래스로 분리하고 상속으로 구현된 하위 클래스에서 변화가 필요한 부분을 바 꿔 쓸 수 있게 만든 이유는 바로 이렇게 변화의 성격이 다른 것을 분리해서
서로 영향을 주지 않은 채 각각 필요한 시점에 독립적으로 변경할 수 있게 하기 위해서 이다.
(2)
# 상속을 통해 다양한 메타데이터를 읽을 수 있도록 추상화하기
상속은 코드를 재사용하기 위해 널리 사용되는 방법이다. 하지만 널리 사용된다고 해서 가장 좋은 방법은 아니다.
상속은 2가지 관점에서 설계에 안 좋은 영향을 끼친다.
하나는 캡슐화를 위반한다는 것, 또 다른 하나는 설계를 유연하지 못하게 만든다는 것 코드를 재사용하기 위해서는 상속보다는 합성을 먼저 고려하는 것이 좋다.
인터페이스는 자바가 추상화를 위해 제공하는 가장 유용한 도구이다.
인터페이스는 정의된 메시지를 통해서만 재사용이 가능하기 때문에 구현을 효과적으로 캡슐화할 수 있으며, 참조되는 인스턴스를 교체하는 것이 비교적 쉽기 때문에 설계를 유 연하게 만들어 준다.
즉, 합성은 메시지를 통해 느슨하게 결합되며, 따라서 코드를 재사용하기 위해서는 상속 보다는 합성을 선호하는 것이 더 좋은 방법이다.
합성을 통해 다양한 메타데이터를 읽을 수 있도록 코드를 개선해보자
이제 MovieFinder 클래스는 MovieReader 객체로부터 영화목록을 취득해서 검색 기능을 수행할 수 있다.
그리고 MovieReader 인터페이스로 다양한 읽기 전략을 가진 구현체를 만들 수 있으며, 원한다면 언제든 MovieReader 구현체를 교체해서 읽기 전략을 변경할 수 있게 되었다.
출처 : 패스트캠퍼스 스프링강의 - 박용권, 김지헌
'CNU_SW_모각코' 카테고리의 다른 글
13주차 모각코 학습 결과(22.09.28 13:30 ~ 16:30) (1) | 2022.10.01 |
---|---|
13주차 모각코 학습 목표(22.09.28 13:30 ~ 16:30) (0) | 2022.09.28 |
12주차 모각코 학습 목표(22.09.20 13:15 ~ 16:15) (1) | 2022.09.24 |
11주차 모각코 학습결과 (22.09.16 금 09:00~12:00) (0) | 2022.09.18 |
11주차 모각코 학습목표(22.09.16 금 09:00~12:00) (0) | 2022.09.16 |