해결된 질문
작성
·
37
-1
이 그림 자체의 문제라기보다 도출되는 과정의 문제인데요.
과정을 보면
JsonReader와 CsvReader의 코드를 관찰한다.
공통점을 발견한다.
상위모듈에 그 공통점을 기술한다.
이렇게 했단 말이죠.
헌데 이건 하위모듈의 구현상의 공통점으로 xml리더나 html리더를 만들 때도 그 공통점이 일어난다고 보장할 수는 없을 거에요. 특히 이 코드는 전적으로 로컬파일시스템에서 읽을 때나 readLines가 일치하지 원격파일 리소스에서 읽어 들일 때는 그렇지도 않죠.
즉 하위 구현에서 얼마든지 공통점은 달라질 수 있는데 그걸 단단한 상위모듈에 모아서 정의해도 되냐는 것입니다. 저는 인터페이스까지는 몰라도 추상클래스는 하위모듈에 있어야한다고 생각이 듭니다.
답변 2
2
반대로 XML리더나 HTML 리더를 만들때도 공통 코드가 달라진다고 보장할 수도 없습니다.
이 시점까지 구현해야 한다고 알고 있는 JsonReader와 CsvReader는 모두 로컬 파일시스템에서 파일을 읽는 로직을 공유합니다.
따라서 실제로 필요한 변경이 일어날 때까지는 현재 알고 있는 내용 안에서 구현하면 되는거죠.
상위 모듈은 하위 모듈에 비해 상대적으로 안정적인 부분입니다.
다시 말해서 변경할 수 없는 코드가 아니라 하위 모듈보다 상대적으로 더 적게 변경하는 부분입니다.
원격에서 읽는 부분에 대해서 문의 주셨는데 강의를 보시면 아시겠지만 원격이라는 요구사항이 추가되는 순간 현재이 구조는 리팩터링하게 됩니다.
현재 상황에서 추상 클래스가 상위 모듈 안에 위치하는게 중복 코드나 의존성 관리 측면에서 유리한 것이기 때문에 현재 구조는 유효합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
Hika Maeng님께서 제기하신 질문은 소프트웨어 설계에서 추상화의 위치와 공통 기능의 상위 모듈 정의 유효성에 대한 고민이라고 생각됩니다. 여기서는 AbstractReader
가 하위 모듈에서 도출된 공통점을 상위 모듈에 포함하는 것이 적절한가에 대한 문제를 다루고 있습니다.
하위 모듈에서 공통점 도출:
하위 모듈인 JsonReader
와 CsvReader
에서 공통점을 발견하고 이를 추상 클래스로 상위 모듈로 옮긴 상황입니다. 이는 소프트웨어 설계에서 다양한 코드 중복 제거 및 재사용성 증대를 위함인데, 말씀하신 대로 어떤 공통점이 모든 형식(예: XML, HTML)에서 동일하게 발생하지 않을 수가 있습니다.
추상화의 위치:
계층 구조와 유연성:
Reader
인터페이스를 유지하면서, 파일 시스템 기반의 읽기가 필요한 경우에만 별도로 AbstractReader
를 사용하도록 설계하는 방법이 있습니다.구체적인 요구사항 이해:
이와 관련하여 추상 클래스와 인터페이스의 적용 사례에 대한 링크를 통해 더 많은 인사이트와 사례를 공유받으실 수 있습니다.
기본적으로, 시스템 구조 설계는 설계자가 결정하는 부분으로, 다양한 시각과 문제 해결 접근 방법이 공존할 수 있습니다. Hika Maeng님께서 제기하신 의문이 유용한 설계적 관점 변화를 가져올 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.