strange-study / ss-start-clean-code

크으으린 코드 스터디 🧹
2 stars 0 forks source link

[Week] 6주차 진도 #12

Closed DaehunGwak closed 4 years ago

DaehunGwak commented 4 years ago
  • 발표자를 제외한 인원은 느낀점, 질문사항을 코멘트로 남겨주세요.
  • 발표자는 발표자료를 준비하시고 공유해주세요.

이번 주 발표자

진도

발표자료

ChoMk commented 4 years ago

11장

도시를 세운다면?

도시가 돌아가는 또 다른 이유는 적절한 추상화와 모듈화 때문이다!!!

시스템 제작과 시스템 사용을 분리하라

main 분리

팩토리

아이템 생성 시점은 시스템이 결정하지만 아이템 생성하는 코드는 시스템이 모르게...

(예제에서는 인터페이스로 팩토리를 정의하고 이에 대한 factoryimpl에 대한 구현체를 따로 만들고 main에서는 이를 통하여 factoryimpl을 통하여 아이템을 만들고 어플리케이션에서는 이 팩토리를 factory(인터페이스)를 봐라보게하여 팩토리에서 직접적인 아이템의 만들어지는 로직을 모르도록 유지하는 예제로 보인다.)

DI

클레스 내부에서 만드는 것이 아닌 클레스가 만들어지는 시점에서 외부에서 생성이 필요한 친구들을 주입하는 방식 정도? 이렇게 된다면 재사용성이 높아지고 의존도가 떨어진다는 장점이 있는 듯 하다...(의존도가 떨어진다는 장점이란 새로운 A라는 객체에서 B를 만들 때 A의 어떠한 상황?(context)가 들어가게 된다면 A의 상황에 따라서 B의 객체가 달라질 수 있으니... A의 의존되지 않게 외부에서 B를 만들어 주입 받는 다면 다른 C라는 객체에서 B라는 객체를 사용하더라도 A에서 사용했던 B와 같은 B를 사용할 수 있는 점이 아닐까???)

확장

소프트웨어 시스템은 물리적인 시스템과 다르다. 관심사를 적절히 분리해 관리 한다면 소프트웨어 아키텍처는 점진적으로 발전할 수 있다.

프록시

개별 객체나 클레스에서메서드 호출을 감사는 경우가 좋은 예다.

테스트 주도 시스템 아키텍처 구축

의사 결정을 최적화하라

12장

minSW commented 4 years ago

[Chapter 11] 시스템

📖 기억에 남는 부분 & 느낀점

시스템 역시 깨끗해야 한다.

도시를 세운다면?

시스템 제작과 사용을 분리하라

확장

결론


[Chapter 12] 창발성

📖 기억에 남는 부분 & 느낀점

창발성 _ 하위 계층(구성요소)에는 없는 특성이나 행동이 상위 계층(전체 구조)에서 자발적으로 돌연히 출현하는 현상 (ref. wikipedia)

단순한 설계 규칙을 따른다면 (오랜 경험 후에야 익힐) 우수한 기법과 원칙을 단번에 활용할 수 있다.

단순한 설계 규칙 네가지

표현하라

jin5335 commented 4 years ago

Ch11. 시스템

느낀점

시스템 제작과 시스팀 사용을 분리하라.

Main 분리

팩토리

의존성 주입(DI, dependency injection)

확장

횡단 관심사(cross-cutting) 관심사

자바 프록시

순수 자바 AOP 프레임 워크

AspectJ 관점

테스트 주도 시스템 아키텍처 구축

의사 결정을 최적화하라.

명백한 가치가 있을 때 표준을 현명하게 사용하라.

시스템은 도메인 특화 언어가 필요하다.

결론

Ch12. 창발성(Emergence)

느낀점

켄트백이 제안한 4가지 규칙

  1. 모든 테스트를 실행한다.
    • “테스트 케이스를 만들고 계속 돌려라” -> 시스템은 낮은 결함도와 높은 응집력을 가지게 된다.
  2. 중복을 없앤다.
    • 잦은 리팩토링을 할 수 잇는 환경을 조성하자
      • 처음부터 완벽하고, 이쁜 코드를 작성할 수는 없다. 리팩토링의 반복을 통해 예쁜 코드가 탄생한다.
    • “코드를 정리하면서 시스템이 깨질까 걱정할 필요가 없다!! -> 테스트 케이스가 존재하니까!!!”
  3. 프로그래머 의도를 표현한다.
    • 명백하고 쉽게 구현하려. <- 노력
  4. 클래스의 메소드 수를 최소로 줄인다.
    • 중복을 제거하고, 의도를 표현하며, SRP를 준수하는 개념도 극단적이게 되면, 득보다 이 많다.
    • 함수와 클래스 크기를 작게 유지하면서, 동시에 시스템 크기도 작게 유지하자.
KimYealynn commented 4 years ago

Chaptor 11.시스템

높은 추상화 수준, 즉 시스템 수준에서도 깨끗함을 유지하는 방법.

시스템 제작과 시스템 사용을 분리하라.

초기화 지연(계산 지연) 등의 좀스러운? 설정 기법을 수시로 사용하다 보면 전반적인 설정 방식이 어플리케이션 곳곳에 흩어지게 된다. 따라서 모듈성이 저조하고 중복이 심하다. 체계적인 시스템을 위하여 설정 논리와 실행 논리를 분리해 모듈성을 높이고, 주요 의존성을 해소하기 위하여 전반적인 일관 적인 방식이 필요하다.

확장

시스템을 처음 부터 올바르게 만들 수 없다. 반복적이고 점진적인 애자일 방법을 통해 오늘의 요구에 맞추어 시스템을 조정하고 확장한다. TDD와 리펙토링을 통해 얻어지는 깨끗한 코드는 코드 수준에서 시스템 조정을 쉽게 만든다. 시스템 수준에서는 관심사를 적절히 분리해 관리한다면 점진적으로 발전 할 수 있다.

POJO

POJO ? 진정한 POJO란 객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트를 말한다.

결론

실제로 돌아가는 가장 단순한 수단을 사용하자.

Chaptor 12. 창발성

창발성을 촉진하는 단순한 설계 규칙

DaehunGwak commented 4 years ago

Q