Closed DaehunGwak closed 4 years ago
도시가 돌아가는 또 다른 이유는 적절한 추상화와 모듈화 때문이다!!!
아이템 생성 시점은 시스템이 결정하지만 아이템 생성하는 코드는 시스템이 모르게...
(예제에서는 인터페이스로 팩토리를 정의하고 이에 대한 factoryimpl에 대한 구현체를 따로 만들고 main에서는 이를 통하여 factoryimpl을 통하여 아이템을 만들고 어플리케이션에서는 이 팩토리를 factory(인터페이스)를 봐라보게하여 팩토리에서 직접적인 아이템의 만들어지는 로직을 모르도록 유지하는 예제로 보인다.)
클레스 내부에서 만드는 것이 아닌 클레스가 만들어지는 시점에서 외부에서 생성이 필요한 친구들을 주입하는 방식 정도? 이렇게 된다면 재사용성이 높아지고 의존도가 떨어진다는 장점이 있는 듯 하다...(의존도가 떨어진다는 장점이란 새로운 A라는 객체에서 B를 만들 때 A의 어떠한 상황?(context)가 들어가게 된다면 A의 상황에 따라서 B의 객체가 달라질 수 있으니... A의 의존되지 않게 외부에서 B를 만들어 주입 받는 다면 다른 C라는 객체에서 B라는 객체를 사용하더라도 A에서 사용했던 B와 같은 B를 사용할 수 있는 점이 아닐까???)
소프트웨어 시스템은 물리적인 시스템과 다르다. 관심사를 적절히 분리해 관리 한다면 소프트웨어 아키텍처는 점진적으로 발전할 수 있다.
개별 객체나 클레스에서메서드 호출을 감사는 경우가 좋은 예다.
시스템 역시 깨끗해야 한다.
창발성 _ 하위 계층(구성요소)에는 없는 특성이나 행동이 상위 계층(전체 구조)에서 자발적으로 돌연히 출현하는 현상 (ref. wikipedia)
단순한 설계 규칙을 따른다면 (오랜 경험 후에야 익힐) 우수한 기법과 원칙을 단번에 활용할 수 있다.
높은 추상화 수준, 즉 시스템 수준에서도 깨끗함을 유지하는 방법.
초기화 지연(계산 지연) 등의 좀스러운? 설정 기법을 수시로 사용하다 보면 전반적인 설정 방식이 어플리케이션 곳곳에 흩어지게 된다. 따라서 모듈성이 저조하고 중복이 심하다. 체계적인 시스템을 위하여 설정 논리와 실행 논리를 분리해 모듈성을 높이고, 주요 의존성을 해소하기 위하여 전반적인 일관 적인 방식이 필요하다.
시스템을 처음 부터 올바르게 만들 수 없다. 반복적이고 점진적인 애자일 방법을 통해 오늘의 요구에 맞추어 시스템을 조정하고 확장한다. TDD와 리펙토링을 통해 얻어지는 깨끗한 코드는 코드 수준에서 시스템 조정을 쉽게 만든다. 시스템 수준에서는 관심사를 적절히 분리해 관리한다면 점진적으로 발전 할 수 있다.
POJO ? 진정한 POJO란 객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트를 말한다.
실제로 돌아가는 가장 단순한 수단을 사용하자.
이번 주 발표자
진도
발표자료