item57) 지역변수의 범위를 최소화 하라

황남욱·2023년 1월 10일
0
post-thumbnail

지역변수의 범위를 최소화란?

  • 해당 변수의 유효 범위를 줄이는 일로 코드의 가독성과 유지보수성을 높여주고 오류가 발생할 일을 줄여준다.

1. 가장 처음 사용할때 선언하기

가장 기본적이면서 가장 효과가 좋은 방법이다.

예전 개발습관들이 이어져오면서 최상단에 선언해놓고 사용하는 일이 잦은데 만약 최상단에 선언해둔다면

실제로 사용할 때 변수의 타입 및 초기값이 기억이 안날수도있으며 코드가독성을 떨어트린다.

안좋은 코드

public int calculator(){
	int a = 10;
  int b = 3;
  int c = 5;
  int d = 7;

	b = b + b;
  c = c + b;
  d = d + b;

  return (b+c+d) / a;
}

좋은 코드

public int calculator() {
	int b = 3;
  int c = 5;
  int d = 7;

	b = b + b;
  c = c + b;
  d = d + b;

  int a = 10;
  return (b+c+d) / a;
}

2. 선언과 동시에 초기화하기

초기화에 필요한 정보가 부족할 경우 충분해 질 때까지 선언을 미뤄야 한다.

예외

try-catch문은 이 규칙에서 예외이다.

왜냐하면 초기화 하는 구문이 예외를 던질 수 있다면 try블록 안에서 초기화해야하기 때문이다.

반복문

반복문은 독특한 방식으로 범위를 최소화 시켜준다.

반복문에서는 반복 변수(loop variable)의 범위가 반복문의 몸체, 그리고 for 키워드와 몸체 사이의 괄호 안으로 제한된다.
따라서 반복변수의 값을 반복문이 종료된 뒤에도 써야 하는 상황이 아니라면 while 문보다는 for 문을 쓰는 편이 낫다.

3. 메서드를 작게 유지하고 한가지 기능에 집중하기

한 메서드안에서 여러기능을 처리하는 경우에 한가지 기능에만 필요한 지역변수이더라도 다른 기능에서 접근 가능할 수 있다.

객체지향원칙 중 SRP와 비슷하게 메서드도 한가지 기능에 집중하여 만들면 가독성도 좋아지고 코드가 더욱 더 명확해 질 것이다.

안좋은 코드

// case1. 하나의 메소드에 여러 기능을 포함한 경우
public void buy() {
	// 아이템의 정보를 가져온다.
	// 아이템의 할인 정책을 적용한다. 
	// 사용자의 보유 금액을 아이템 가격만큼 차감한다. 
}

좋은 코드


// case2. 기능단위로 메소드를 쪼개서 사용한 경우
public void buy(String itemId) {
	Item item = getItem(itemId);
	setDiscountRate(item);
	deductAmount();
}

//아이템 정보 조회
public Item getItem(String itemId) {
	...
}

//아이템_할인_정책_적용
public void setDiscountRate(Item item) {
	...
}

//보유 금액 차감
public void deductAmount() {
	...
}
profile
안녕하세요👋 주니어 백엔드 개발자입니다.

0개의 댓글