토비의 스프링 | 3장 템플릿 (모임 중 든 생각, 기억에 남는 말말말)

주싱·2022년 9월 26일
0

토비의 스프링

목록 보기
14/30
post-custom-banner

1. 모임 중 든 생각

객체란 무엇인가?

‘객체란 무엇인가?’라는 질문을 받고 순간적으로 상태와 행위를 가진 프로그래밍의 단위 정도가 생각납니다. 조금 있다 문득 객체 중에는 상태가 없이(사용자가 멤버 변수를 정의하지는 않아도 사실 객체가 되기 위해 JVM이 관리하는 상태는 있을 테지만) 행위만 가지는 객체도 있고 행위 없이 상태만 가지는 객체도 있단 생각이 듭니다. 그럼 다른 정의가 필요할 것 같습니다. 캡슐화! 연관성이 높은 상태 또는 행위를 모아서 내부는 숨기고 외부에는 보여주고 싶은 것만 보여줄 수 있는 프로그래밍의 단위라고 설명하면 어떨까요? 아, 그리고 클래스가 아니니까 메모리에 올라와서 프로세서에 의해 실행 가능한 상태라고 설명을 붙이면 더 좋을 것 같습니다.

콜백을 위해 항상 람다식을 전달하는게 좋나요?

블로그 링크

템플릿 메서드 패턴

템플릿 메서드 패턴에서 서브클래스에서 확장되는 메서드는 슈퍼클래스의 여러 가지 것들에 접근할 수 있어 의도하지 않은 강한 결합을 가져올 수 있음을 다시 생각하게 된다. 전략 패턴을 사용하면 전략 객체는 명시적으로 템플릿의 레퍼런스를 전달하지 않는 한 템플릿에 전혀 접근할 수 없게 된다.

2. 기억에 남는 말말말

  • 기본적으로 동작하는 코드를 만들고 테스트를 만들어 통과한 이후 리팩토링을 하면서 디자인 패턴을 적용해 보는 것이 더 좋다. 처음 부터 디자인 패턴을 적용해야지 하고 적용하기는 힘들지도 모른다. 부가적으로 좋은 점은 디자인 패턴 적용 전후의 변화를 보여주면서 주변에 설득력 있게 설명하기에도 좋다.
  • 프로젝트 망하기 전까지 2개의 케이스 밖에 안나올 것 같으면 그냥 if 문을 주렁주렁 해도 될 것 같아요.
  • 중복이 전체적으로 되면 개선하기 간단하다. 그러나 중복이 부분부분 발생하면 어려워 진다. 그때는 변하는 부분과 변하지 않는 부분을 나누어서 생각하면 된다. 그래서 변하지 않는 부분(템플릿)이 변하는 부분(전략)을 모르게 추상화하면 된다.
  • 전략 패턴은 다른 말로 문맥에서 알고리즘을 바꾸어 사용하는 패턴이라고 할 수 있다.
  • 언제 익명 클래스를 사용하고, 언제 람다식을 사용할 것인가? → When to Use Nested Classes, Local Classes, Anonymous Classes, and Lambda Expressions
  • Marker Interface (ex Serializable)라는게 있다. Effective Java에서 어노테이션 보다 Marker Interfce 사용을 권장하기도 한다.
  • OCP(Open-Closed Principle)는 사실 넓게 적용하면 모든 디자인 패턴에 적용된다.
  • 캡슐화에서 중요한 것 중 하나는 변경이 일어날 수 있는 부분을 외부는 감추는 것이다.
  • Alan Kay는 “객체지향은 데이터(전역적인)를 없애는 것이다”라고도 말했다.
  • 예를 들면 Java가 제공하는 Consumer를 그냥 쓰면 이게 무슨일을 하는 건지 잘 안보이니까 직접 Functional 인터페이스를 정의해서 사용해 보는 것도 좋다.
  • Lambda를 사용하지(라이브러리에 인자로 전달하는 것)만 말고, 받아서 처리하는 코드를 직접 만들어 보길 추천한다.
  • 디자인 패턴의 Intend(의도)를 먼저 이해하고 사용하는 것이 좋다.
  • 단지 메서드 추출만으로는 중복 코드 제거가 잘 안됩니다.
profile
소프트웨어 엔지니어, 일상
post-custom-banner

0개의 댓글