본문 바로가기
java 스터디

java스터디 6주차

by 기록을안하면바보 2024. 5. 24.

 

1.지역변수와 스코프

지역변수: 특정 지역(변수가 선언된 특정 지역)을 벗어나면 사용될 수 없음.

 

 

 

x 변수는 if블럭 안에서 정의 되었기 때문에 밖에서 출력을 시도할 경우 java: cannot find symbol 오류가 남

 

블럭 내부에서 블럭 외부에서 선언된 변수 접근 가능

블럭 외부에서 블럭 내부에서 선언된 변수 접근 불가능

 

변수의 접근 가능한 범위를 스코프(scope)라고 한다

 

for문의 조건식 내부에서 선언된 변수의 경우도 지역변수로 해당 범위를 벗어나면 사용할 수 없다.

 

2. 스코프의 존재 이유

임시적으로 m변수의 값을 변경해주기 위해 temp변수를 사용해주고 있다. 즉 불필요한 메모리를 사용하고 있어 코드블럭 밖에서 temp의 메모리를 제거하면 메모리를 더 효율적으로 쓸 수 있게 된다. 또한 temp는 코드 블럭 내에서만 활용되는데 전체 범위에서 생존하므로 코드 블럭의 복잡도가 증가하게 되었다. 

 

이 코드 내에서 temp의 스코프가 필요한 곳을 생각해보면 if 블럭 내부이다.

 

control E 엔터>이전 코드로 이동 가능)

 

while문과 for문을 스코프의 관점에서

while문 안에서 변수 선언시 반복해서 변수가 선언되므로 블럭 밖에서 선언될 수 밖에 없음. 반면 for문은 조건에서 변수를 선언 가능하므로 반복중에 변수가 다시 생성되지 않는다.

 

변수는 필요 범위 내에서만 한정해서 사용하는게 좋다. 메모리를 효율적으로 사용할 수 있고 유지보수에 용의해진다.

 

3.자동 형변환

 

작은 범위에서 큰범위로 값을 넘길 수 있음

반대로 큰 범위의 값에서 작은범위로 넘길때에는 오버플로우나 소숫점 오류가 일어날 수 있다.

 

 

작은 범위에서 큰 범위로 이동시 오류가 없이 실행된다.

 

자바는 같은 타입의 값만 대입시킬 수 있기 때문에 작은 범위의 숫자가 자동으로 형변환 된 후 값이 대입된다.

int a=10;
long b;
b=a;

이 코드의 경우

b=(long)10;

의 과정이 자동적으로 실행이 된 결과이다.

 

4.명시적 형변환

큰 변수를 작은 변수로 바로 대입하는 경우 오류가 발생함

 

 

이 경우 명시적으로 형변환을 수행해준 후 대입해주면 컴파일 오류 없이 파일을 실행할 수 있음.

 

명시적 형변환의 경우 변수자체 타입이 바뀌는것은 아님. 대입연산자를 썼을 경우에만 변수의 타입이 바뀐다.

 

만약 int의 표현범위를 넘어가는 숫자를 저장하고 싶다면 long을 사용해주어야 함 이 숫자를 int형으로 형변환을 시도해줄 경우 오버플로우가 발생해 다른 숫자가 출력되게 된다.

 

오버플로우가 발생하지 않도록 주의해야한다.

 

 

 

5.계산과 형변환

 

 

같은 타입끼리의 계산은 같은 결과가 나온다.

 

다른타입끼리의 계산은 큰 타입쪽으로 묵시적 형변환이 일어난다.

 

 

3/2의 경우 정수끼리의 계산이므로 계산된 정수 값이 변수에 저장되에 1.5가 아닌 1 값이 저장된다.

따라서 저장되는 변수의 값이 실수형이더라도 1.5가 아닌 1의 값을 갖게됨에 주의해줘야한다.

 

 

 

 

 

 

'java 스터디' 카테고리의 다른 글

java 여름방학 2주차  (1) 2024.07.14
java여름방학 1주차  (0) 2024.07.06
java 5주차  (0) 2024.05.17
java 스터디 4주차  (0) 2024.05.15
java 스터디 3주차  (0) 2024.05.04