인프런 커뮤니티 질문&답변

권정익님의 프로필 이미지
권정익

작성한 질문수

김영한의 실전 자바 - 중급 1편

섹션 4. 문제와 풀이2

해결된 질문

작성

·

195

·

수정됨

1

LotteGenerator 클래스에서

private final Random random = new Random(); 에서

이것만 final로 처리한 이유가 있을까요?

 import java.util.Random;

public class LotteGenerator {

    private final Random random = new Random();
    private int[] lotteNumbers;
    private int count;

    public int[] generate () {
        lotteNumbers = new int[6]; // 배열 6칸 생성
        count = 0;

        while (count < 6) {
            // 1부터 45 사이의 숫자 생성
            int number = random.nextInt(45) + 1; // number에 random 번호 넣기
            // 중복되지 않는 경우에만 배열에 추가
            if (isUnique(number)) {
                lotteNumbers[count] = number;
                count++;
            }
        }
        return lotteNumbers;
    }

    // 이미 생성된 번호와 중복되는지 검사
    private boolean isUnique(int number) {
        for (int i = 0; i < count; i++) {
            if (lotteNumbers[i] == number) {
                return false;
            }
        }
        return true;
    }

}

답변 1

1

안녕하세요. 권정익님, 공식 서포터즈 코즈위버입니다.

궁금할 땐 lotteNumbers 와 count 에도 final을 붙여 어떻게 되는지 확인하는것도 좋은 방법입니다. 우선 지금의 로또번호 생성기는 generate()을 호출할 때마다 기존에 생성했던 번호들을 버리고, 새롭게 6자리 숫자를 생성하여 보관합니다. 변수인 lotteNumbers, count 가 호출할때마다 값이 계속 변하지요. 그래서 만약 여기에 final 을 붙이면 컴파일 오류가 발생합니다.

반면 random 객체는 한 번 생성하여 계속 재활용해서 쓸 수 있습니다. 그래서 final을 붙여도 컴파일 오류가 발생하지 않습니다.

감사합니다.

권정익님의 프로필 이미지
권정익

작성한 질문수

질문하기