Notice
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

22gamin

[Java] 스코프, 형변환 본문

java

[Java] 스코프, 형변환

22gamin 2024. 9. 9. 23:02

 

변수는 선언한 위치에 따라 지역 변수, 멤버 변수(클래스 변수, 인스턴스 변수)와 같이 분류된다.

  • 지역 변수는 이름 그대로 특정 지역에서만 사용할 수 있는 변수라는 뜻이다. 
  • 그 특정 지역을 벗어나면 사용할 수 없다.
  • 여기서 말하는 지역이 바로 변수가 선언된 코드 블록 ( {} )이다. 
  • 지역 변수는 자신이 선언된 코드 블록 ( {} ) 안에서만 생존하고, 자신이 선언된 코드 블록을 벗어나면 제거된다. 따라서 이후에 접근할 수 없다.

예제 코드

package scope;

public class Scope1 {
 public static void main(String[] args) {
 	int m = 10; //m 생존 시작
	if (true) {
 		int x = 20; //x 생존 시작
		System.out.println("if m = " + m); //블록 내부에서 블록 외부는 접근 가능
		System.out.println("if x = " + x);
        }  //x 생존 종료
		
        //System.out.println("main x = " + x); //오류, 변수 x에 접근 불가
		System.out.println("main m = " + m);
    } //m 생존 종료
}

 

→ 이렇게 변수의 접근 가능한 범위를 스코프(Scope)라 한다. 참고로 Scope를 번역하면 범위라는 뜻이다.

  • int m은 main{} 전체에서 접근할 수 있기 때문에 스코프가 넓고, int x는 if {} 코드 블록 안에서만 접근할 수 있기 때문에 스코프가 좁다.

 

스코프 존재 이유

package scope;
 public class Scope3_1 {
 	public static void main(String[] args) {
 		int m = 10;
 		int temp = 0;
 		if (m > 0) {
            temp = m * 2;
 			System.out.println("temp = " + temp);
        }
 		System.out.println("m = " + m);
    }
 }

 

  1.  비효율적인 메모리 사용 : temp는 if코드 블록에서만 필요하지만, main() 코드 블록이 종료될 때까지 메모리에 유지된다. 따라서 불필요한 메모리 낭비가 된다.
  2. 코드 복잡성 증가 : 좋은 코드는 군더더기 없는 단순한 코드이다. temp는 if 코드 블록에서만 필요하고, 여기서만 사용하면 된다. 만약 if 코드 블록 안에 temp를 선언했다면 if가 끝나고 나면 temp를 전혀 생각하지 않아도 된다. 생각할 변수를 하나 줄일 수 있다.

 

형변환

  • 작은 범위에서 큰 범위로는 당연히 값을 넣을 수 있다.
    • ex) int → long → double
  • 큰 범위에서 작은 범위는 다음과 같은 문제가 발생할 수 있다.
    • 소수점 버림
    • 오버플로우

작은 범위에서 큰 범위로 대입은 허용한다.

 

 

자동 형변환

//intValue = 10
doubleValue = intValue
doubleValue = (double) intValue //형 맞추기
doubleValue = (double) 10 //변수 값 읽기
doubleValue = 10.0 //형변환

 

  • 이렇게 앞에 (double)과 같이 적어주면 int형이 double형으로 형이 변한다. 이렇게 형이 변경되는 것을 형변환이라고 한다.
  • 작은 범위 숫자 타입에서 큰 범위 숫자 타입으로의 대입은 개발자가 이렇게 직접 형변환 하지 않아도 된다. 이런 과정이 자동으로 일어나기 때문에 자동 형변환, 또는 묵시적 형변환이라 한다.

 

명시적 형변환

  • 큰 범위에서 작은 범위 대입은 명시적 형변환이 필요하다.
  • intValue = (int) doubleValue; //형변환

 

기존 범위를 초과해서 표현하게 되면 전혀 다른 숫자가 표현되는데, 이런 현상을 오버플로우라고 한다

 

 

 

 


 

Java 형변환 (문자, 정수, 실수)

 

문자 → 실수

 

1. String to Int

  • parseInt 함수와 valueOf 함수를 사용하여 변환 가능
  • parseInt()는 int, ValueOf()는 Integer 타입으로 반환함
    • 따라서 parseInt()는 정수값이 필요할 때, valueOf()는 Integer 객체가 필요한 경우 (컬렉션을 사용하거나 Integer 객체가 필요할 때) 사용
    • valueOf()는 기본타입인 int로 자동 변환 처리해주는 auto-unboxing 기능이 있음
String num = "456";

int num1 = Integer.parseInt(num);
int num2 = Integer.valueOf(num);

.

 

2. String to Double,float

String num = "456";

double num1 = Double.parseLong(num);
float num2 = Float.valueOf(num);

 

 

 

 

숫자 → 문자

  • 앞에 타입.함수() 형태
int num = 456;

String num1 = String.valueOf(num);
String num = Integer.toString(num);

 

 

'java' 카테고리의 다른 글

[Java] 배열  (1) 2024.09.10
[Java] Scanner  (0) 2024.09.10
[Java] 조건문과 반복문  (0) 2024.09.09
[Java] 연산자  (0) 2024.09.05
[Java] 변수  (5) 2024.09.05