현재 5, 6주 차 데브노트가 밀린 시점 이번 주 7주 차는 밀리지 않았다. 더 이상 밀리면 지옥뿐..
기존 레거시 코드를 리팩터링 하기 위해 제네릭 상속, 와일드 카드에 대한 학습 시간을 많이 사용했다. 어찌어찌 추후 확장성을 고려해리팩터링을 하긴 했지만 제대로 했는지는 다음주에 코드 리뷰를 받아봐야 알 것 같다.
이펙티브 자바를 읽는 중이다. (차례대로 읽는 건 지루해서 목차보고 궁금한 거 위주로 읽는 중)
Feelings(느낌, 주관) & Findings (배운점)
@EmbeddedId 어노테이션을 선언해 준 필드 객체는 Serializable 인터페이스를 구현해야 직렬화를 보장할 수 있다.
코드의 중복을 줄이고자 와일드카드를 이용해 추상 메서드를 만들어 추상 메서드를 구현하려 했지만 구현부에서 제네릭 타입 소거 문제가 발생해서 추상 클래스에 이름이 다른 두 개의 추상 메서드를 선언해서 구현부에서 상황에 맞게 구현하려고 했지만 해당 클래스를 상속받는 클래스에서 불필요하게 오버라이드 해야 하는 문제가 발생했다. 결국 중복 코드가 발생하는 굴레에서 벗어날 수가 없었는데 추상 클래스가 아닌 인터페이스로 변경을 해 메서드를 강제로 구현해야 하는 게 아닌 필요에 따라 구현하도록 변경했다. 기존에 작성된 코드가 추상 클래스라 추상 클래스를 사용해야 한다는 생각이 있었는데 레거시 코드를 리팩터링 할 때는 기존 코드의 틀을 깨고 다양한 방법을 생각해 보자.