java에서 변수의 선언과 초기화는 필수적이다.
초기화를 해주지 않으면 해당 변수는 사용을 할 수가 없다.
예제를 적어본다.
int wesley;
System.out.print(wesley);
해당 예제는 초기화를 해주지 않고 변수 타입만 선언해 준 경우다.
이럴 경우 컴파일 에러가 나타난다
The local variable wesley(변수명) may not have been initialized
로컬 변수 : 메소드 블록 내에서 선언된 변수
로컬 변수는 메소드 실행이 끝나면 메모리에서 자동으로 없어지게 됩니다.
예제를 보겠습니다.
해당 예제 속 a와 sum 은 로컬 변수입니다.
int a = 15;
int sum = a+20;
System.out.println(sum);
이 들어가 있는 곳은 메소드 블록입니다.
메소드 블록을 감싸고 있는 큰 박스
public static void main(String[] args) {
int a = 15; //변수 선언 초기화
int sum = a+20;//변수 선언 초기화
System.out.println(sum);
}
는 클래스 블록입니다.
여기서 주의해야 할 점은 변수는 선언된 블록 내에서만 사용이 가능하다는 것입니다.
메소드 블록 안에서도 여러 중괄호로 묶여있는 변수들이 있을 겁니다.
예시를 들어보겠습니다.
public class Localvariable {
public static void main(String[] args) {
int example = 1;
if(example == 1) {
int firstExampleValue = 2;
//example, firstExampleValue 사용가능
}
if(example == 2) {
int secondExampleValue = 3;
//example, secondExampleValue 사용가능
}
//example 사용가능
}
}
여기서 example은 메서드 블록에서 사용이 되었고, 메서드 블록 안에 if문이 위치하게 됩니다.
첫 번째 if 문에서는 큰 메서드 블록에 있는 example과 자신의 if문 블록 안에 있는 firstExampleValue를 사용할 수 있습니다.
두 번째 또한 큰 메서드 안에 if문이 위치하고 있습니다. 그렇기 때문에 example 변수와 secondExampleValue를 사용할 수 있습니다. 하지만 if문들은 각각 다른 if문 블록에 들어있는 변수명은 사용할 수 없습니다.
메서드 블록에서도 마찬가지입니다. if문 안에 있는 firstExampleValue와 secondExapleValue는 사용이 불가능합니다.
빨간색이 메서드 블록
하늘색이 첫 번째 if문 블록
진한 빨간색이 두 번째 if문 블록이 되겠습니다.
이러한 특성 때문에 변수를 선언할 때에는 어떤 위치에서 사용될 것인지를 잘 파악한 후 선언을 해주는 것이 좋습니다.
만약 모든 곳에서 사용을 해야 한다고 한다면 메서드 첫 번째 줄에 선언을 하는 것이 좋습니다.
낭비를 막기 위해 if문 for문 switch case 문 등에서만 쓰는 변수는 제어문 내에서 사용하는 것이 좋습니다.
로컬 변수로 인해 오류가 생기는 경우를 확인해보겠습니다.
해당 코드는 example을 20으로 선언한 후 example이 10보다 크다면 firstExampleValue를 2로 선언하고
example + firstExampleValue를 sumExample로 선언한 뒤 출력을 하려는 코드입니다.
하지만 위 사진과 같이 오류가 뜨는 것을 알 수 있습니다.
sumExample을 해석할 수 없다는 뜻입니다.
왜 안 되는 것일까?
우리는 sumExample을 if문 블록에서 선언을 했습니다.
하지만 System.out.println();은 메소드 블록에 있습니다.
앞서 말했듯이 현재 이 코드상 메소드 블록에서 불러올 수 있는 값은 example값뿐입니다.
우리는 이러한 오류의 힌트는 해당 오류 라인의 마우스를 가져다 대는 것뿐 아니라
콘솔에서도 확인을 할 수 있습니다.
우리는 그럼에도 불구하고 sumExample을 출력을 하고 싶습니다.
출력을 하기 위해선 어떤 조치를 취해줘야 할까
우리는 System.out.println();의 위치를 우리가 알고 싶어 하는 변수의 위치 아래로 옮기면 됩니다.
값이 정상적으로 출력이 된다.
파란 네모 부분이 원래 System.out.prinln(sumExample);이 있던 자리이다
빨간 네모 부분은 sumExample을 출력하기 위해 해당 변수 부분의 블록을 표시한 것이다.
'IT Program > Java Basic' 카테고리의 다른 글
자바(java) 타입 변환 & 자동 타입 변환 & 강제 타입 변환 & 데이터 타입 크기 & 아스키코드표 (2) | 2022.02.27 |
---|---|
자바(java) 띄어쓰기 하는 법 & 이스케이프 문자(\t, \n, \",\') (4) | 2022.02.27 |
변수 & 변수 종류 & 예약어 & 작성 규칙(변수 명명 규칙)&println print 차이 (2) | 2022.02.25 |
이클립스(eclipse) JRE 버전 바꾸는 방법 & JRE 버전 변경 (2) | 2022.02.24 |
자바(Java) 이클립스(eclipse) 프로젝트 생성 & Class 생성 & package 생성 (0) | 2022.02.24 |