프로그래밍 왕초식(변수 아끼기)
안좋은 예시
- 변수를 많이쓸 때
String name = any.getName(); // 변수를 미리 선언하고
int age = 0;
...
...
age = 2021 - any.getBirthYear(); // 변수를 중간에 변경도하고
...
...
System.out.println("이름 : " + name); // 사용하고
System.out.println("나이 : " + age);
- 변수의 용도/의미를 바꿔가며 사용
int value = someOp();
...
if(value == 0){
value = someOp2();
...
}
value = someOp3();
if(value ==2) {
}
인지 부하
변수 범위 증가, 변수 개수 증가, 변수 용도 변화의 문제점은 추적의 복잡함을 늘어나고 인지부하까지 이어져 코드이해 노력이 증가하여 비용이 많은 비용이 발생하게 된다.
해결법 : 변수 아껴쓰기 1
- 선언 하고 1~2번 참조하는 변수는 필요 여부 검토
String name = any.getName();
String id = any.getId();
Summary ret = Summary.builder()
.name(name)
.id(id)
.build();
변경 후
👇👇👇👇👇
//변수를 선언하지 말고 직접코드를 넣는다.
Summary ret = Summary.builder()
.name(name)
.id(id)
.build();
해결법 : 변수 아껴쓰기 2
- 의미를 더해주는 변수 위주로 사용하기
식이 복잡하거나 길어질 경우 변수 이름으로 설명
int age = 2021 - mem.getBirthyear();
같은 계산을 반복하는 경우 변수로 재사용
- 가능한 선언과 값 할당을 한 번에
int age;
...(age 사용없음)
age = 2021 - mem.getBirthyear();
해결법 : 최대한(절대) 변수의 용도/의미 변경 X
- 의미나 용도가 다르면 다른 변수 사용할 것
- 단순히 타입이 같다고 변수를 막 이런 저런 용도로 쓰지 말 것
- 코드 분석뿐만 아니라 향후 코드 정리도 힘들게 한다.
Response<String> resp = callApi1();
...
...
resp = callApi2();
변경 후
👇👇👇👇👇
Response<String> resp1 = callApi1();
...
...
Response<String> resp2 = callApi2();
해결법 : 변수 범위 좁히기
- 변수가 사용되는 코드 범위를 최소화하기
- 짧은 루프 블록 안으로 한정
- 짧은 if-else 블록 안으로 한정
- 짧은 메서드로 한정
- 사용도기 직전에 정의
코드를 볼 때 변수가 어떤 식으로 바뀌는지 상태를 추적이 용이해야한다. 변수의 범위가 짧으면 짧을수록 추적의 부하가 줄어든다. 변수는 최대한 짧은 범위에서 짠다.!
String msg;
for(Some some : somes){
msg = some.getName() + ":" + ....;
...
}
변경 후
👇👇👇👇👇
for(Some some : somes){
String msg = some.getName() + ":" + ....; //for 안에서만 쓰는 변수면 안에서 선언하자!
...
}
String msg = ...;
...(코드 10줄, msg 변경 없음)
return Result.message(msg);
변경 후
👇👇👇👇👇
...(코드 10줄)
String msg = ...; //변수를 사용하기 직전에 선언하고 사용하자 !
return Result.message(msg);
변수를 아끼는 연습하기
- 멋진 설계, 화려한 기술 다 좋지만 기본인 코드는 정말 중요하다고 말씀하신다.
- 코드가 없다면 모두 소용없음
중요한 코드의 복잡도를 낮추고 가독성을 높이는 쉬운 방법
→ 변수 아끼고 변경 줄이고 범위 좁히고
참고 : Youtube 채널 - 최범균 https://www.youtube.com/watch?v=kRdML08R2Yo