7 분 소요

이번 장에서는 단순 변수 명이나 주석 등과 같이 코드를 쉽게 읽기 위한 내용 뿐만 아니라, 실제로 구현된 알고리즘에 대해서도 개선을 진행했다. 리팩터링을 진행할 때 개선의 기준이 필요하다. 이를 위해서는 시스템에 대한 이해가 필요하다. 언제 enum을 사용하면 좋은지, 정적 메서드를 인스턴스 메서드로 바꿔도 되는지 등을 판단하기 위해서는 관련된 지식이 필요하다. 처음 java를 배울 때 익혔던 것들인데, 이후 깊게 고민없이 사용했던터라, 나라면 이렇게 리팩터링을 할 수 있었을까?하는 생각이 들었다. 역시 기본이 중요하다!


📆TIL(Today I Learned) 날짜

2022.05.03

📑오늘 읽은 범위

16.SerialDate 리팩터링

✍🏻책에서 기억하고 싶은 내용

강조하건대, 이 장에서 수행하는 분석은 악의나 자만과는 거리가 멀다. 전문가 입장에서 수행하는 검토, 그 이상도 그 이하도 아니다. 우리 모두가 편안하게 여겨야 할 활동이다. 남이 내게 해준다면 감사히 반겨야 할 활동이다. 이와 같은 비판이 있어야만 발전도 가능하다.

또한 인수와 변수 선언에서 final 키워드를 모두 없앴다. 실질적인 가치는 없으면서 코드만 복잡하게 만든다고 판단했기 때문이다. final을 제거하겠다는 결정은 일부 기존 관례에 어긋난다. 예를 들어, 로버트 시몬스는 “코드 전체에 final을 사용하라”고 강력히 권장한다. 확실히 나와 다른 생각이다. 내가 보기에 final 키워드는 final 상수 등 몇 군데를 제하면 별다른 가치가 없으며 코드만 복잡하게 만든다. 어쩌면 내가 이렇게 느끼는 이유는 내가 짠 단위 테스트가 final 키워드로 잡아낼 오류를 모두 잡아내기 때문인지도 모르겠다.

이와 같은 논리적 의존성이 내게는 불편하다. 뭔가가 구현에 논리적으로 의존한다면 물리적으로도 의존해야 마땅하다. 게다가 구현에 의존하는 부분이 아주 작으므로 알고리즘 자체를 일반적인 메서드로 구현할 방법이 있으리라 생각했다.


❓궁금한 내용, 잘 이해되지 않는 내용

  • enum : 열거체(enumeration type)
    데이터 중에는 요일(월, 화, 수, 목, 금, 토, 일), 계절(봄, 여름, 가을, 겨울) 등과 같이 몇 가지 한정된 값을 갖는 경우가 있다. 이런 타입을 Enumeration Type이라고 한다.
    [Java Enum 활용기] (https://techblog.woowahan.com/2527/)
  • final : 오직 한 번 만 할당할 수 있는 entity를 정의할 때 사용된다. final로 선언된 변수가 할당되면 항상 같은 값을 가진다. 만약 final 변수가 객체를 참조하고 있따면, 그 객체의 상태가 바뀌어도 final 변수는 매번 동일한 내용을 참조한다.
  • static : 메모리에 한 번 할당되어 프로그램이 종료될 때 해제하는 것을 의미한다. 이를 정확히 이해하기 위해서는 메모리 영역에 대한 이해가 필요하다.
    일반적으로 우리가 만든 Class는 Static 영역에 생성되고, new 연산을 통해 생성한 객체는 Heap 영역에 생성된다. 객체의 생성 시에 할당된 Heap 영역의 메모리는 Garbage Collector를 통해 수시로 관리를 받는다. 하지만 Static 키워드를 통해 Static 영역에 할당된 메모리는 모든 객체가 공유하는 메모리라는 장점을 지니지만, Garbage Collector의 관리 영역 밖에 존재하므로 Static을 자주 사용하면 프로그램의 종료시까지 메모리가 할당된 채로 존재하므로 자주 사용하게 되면 시스템의 퍼포먼스에 악영향을 준다.

댓글남기기