티스토리 뷰
Item57에서는 지역변수의 범위를 최소화하라 말한다
왜일까? 변수의 범위를 줄이면 가독성과 유지보수성이 좋아지기 때문이란다
이 조언을 정면으로 들이박는 형태가 있는데 메서드나 코드 블록에서 변수를 한 무더기 선언해놓고
그 아래에서 선언한 변수를 사용하는 방식을 옛날 옛적 C를 사용할 때 그렇게 했었다고 한다
다행히도 아직까지는 실무에서 변수촌을 만들어놓고 아무데서나 막 가져다 쓰는 코드는 보지 못 했다
이펙티브 자바의 예는 약간 극단적이라 갸우뚱하긴 하다, iterator()로 직접 돌리는 코드도 본 적이 없고
자바8 이후로 성능이 정말 중요한 경우가 아니고서야 enhanced-for도 stream으로 대체 가능하니 더욱 그렇다
자바8의 stream, Function 등을 배우고 나면 기존의 코드를 싹 다 갈아엎버리고 싶은 충동이 들 텐데
예전에는 새로운 API를 사용하고자 하는 마음이었다면 요즘에는 의미 없는 변수 할당을 줄여준다는 점과
어떻게 처리할지 기술하지 않고 무엇을 처리할지 기술한다는 점 때문에 stream을 애용하고 있다
최근에 리팩토링 할 일이 많아 회사 프로젝트 코드를 여기저기 뜯어보고 있다
내가 주로 하는 리팩토링은 추상화 수준을 맞춰 사람이 이해하기 쉬운 형태로 바꾸는 작업이다
초창기부터 클린 코드를 강조하며 만들었다고 들었는데 그래서 그런지 참 잘 작성되었다는 느낌을 받는다
다만 잘 작성된 것과 사람이 이해하기 쉬운 것은 분명히 다르기 때문에 리팩토링할 것들은 넘쳐난다
클린 코드에서는 돌아가는 코드를 작성하기란 쉽지만 사람이 이해하기 쉬운 코드는 작성하기 어렵다 말한다
이를 리팩토링에 접목시켜보면 일단 돌아가도록 우당탕탕 작성해놓고 사람이 이해하기 쉬운 형태로 리팩토링하면
기능에 이상이 없으며 사람이 이해하기 쉬운 코드를 작성할 수 있게 된다
이를 위해 반드시 필요한 것은 추상화 수준 맞추기라고 생각한다
추상화 수준을 맞춰놓으면 글을 읽는 것처럼 코드를 볼 수 있고 세부사항이 궁금하면 메서드 내부를 찾아가 보면 된다
하나의 메서드 안에서 알고리즘 문제 풀이 뺨치는 복잡한 코드와 한껏 추상화시킨 메서드 호출을 합쳐놓으면
메서드를 정확히 이해하기 위해서는 하나하나 다 뜯어봐야 된다
메서드 작성 시점에 안일한 마음으로 변수명과 메서드명을 개떡 같이 지어놨다면 장애물이 하나 추가된다
즐겨보는 유튜브 중 개발바닥이라는 채널이 있는데 해당 채널의 영상 중에 레거시 오히려 좋아라는 영상이 있다
이 영상을 보고 레거시를 대하는 생각이 많이 바뀌었고 지금의 레거시들에 감사함을 느낀다
심지어 리팩토링 하기 쉬운 구조로 되어있어서 더욱 감사하다
이펙티브 자바, 클린 코드의 다양한 조언들과 함께 리팩토링, TDD를 실무에서 진행하니 조금씩 레벨업이 되는 기분이다
아이템 57의 조언을 따라 변수의 범위를 최소화해보고 나아가 stream을 활용해 지역 변수조차 필요 없게 만들어보자
또한 잘 돌아가는 코드뿐만 아니라 이해하기 쉬운 코드까지 만들 수 있다
코드를 읽는 사람의 입장에서 필요 없는 것들은 숨기고 잘 지어진 메서드 이름으로 핵심만 전달할 수 있다
'Java > Effective Java' 카테고리의 다른 글
[Item59] 가끔은 구현도 까보자 (0) | 2022.06.09 |
---|---|
[Item58] fori 대신 iter (0) | 2022.06.07 |
[Item56] 주석은 죄가 아니다 (0) | 2022.05.23 |
[Item55] Optional vs Null check (2) | 2022.05.14 |
[Item54] null 멈춰 (0) | 2022.05.09 |