스코프 - 지역변수와 스코프

→ 스코프의 뜻은 범위를 말한다.

  • 변수 : 선언한 위치에 따라 지역변수(Local Variable), 맴버변수 로 나뉜다. 지금까지 우리는 지역 변수로 배웠다.
    1. 지역변수 → 이름 그대로 특정 지역에서만 사용할 수 있는 변수, 지역을 벗어나면 사용할 수 없다. 여기서 말하는 지역은 변수가 선언된 코드 블럭( { } ) 중괄호 안을 의미 한다.

스코프의 존재 이유

  • 변수를 선언한 시점부터 변수를 계속 사용할 수 있게 하면 좋겠다고 생각하지만 → 비효율적으로 메모리가 사용되고, 코드의 복잡성이 증가하게 된다.(스코프 범위 안의 변수가 사라지지 않는다면 변수를 새로 선언이나 사용할때에 주의를 기울여야하는 불편함이 생긴다.)
  • while 문과 for문을 비교해보면
// -> while문
public static void main(String[] args) {
        int sum = 0;
        int i = 1;
        int endNum = 3;

        while ( i <= endNum ) {
            sum = sum + i;
            System.out.println("i = " + i + " sum = " + sum);
            i++;
        }
}

// -> for문
public static void main(String[] args) {
        int sum = 0;
        int endNum = 3;

        for (int i = 1; i <= endNum; i++) {
            sum = sum + i;
            System.out.println(sum);
        }
}

// for 문과 while문은 같은 작동을 한다.

→ 해당 코드의 for 문과 while 문은 같은 작동을 하지만 while문의 scope 내에서 i 를 선언해 사용할 수 없어 main 에서 i 를 선언해줬다 그럼 생기는 문제가 다음 코드를 작성 해 줄 때에도 i 변수를 생각하면서 코드를 짜야하는 불편함이 생긴다. ⇒해당 코드는 for 문이 구조적으로 더 깔끔하다고 할 수 있다.

스코프 정리

  • 변수는 꼭 필요한 범위로 한정하여 사용하자
  • 좋은 프로그램은 무한한 자유보다 적절한 제약이 있는 프로그램이다.

형변환 → Casting

자동 형변환

  • 작은 범위에서 큰 범위로는 당연히 값을 넣을 수 있다.
    • ex) int → long → double (가능)
  • 큰 범위에서 작은 범위는 문제가 발생할 수 있다.
    • 소수점 버림 (double → long, int)
    • 오버 플로우 (long → int)
  • 작은 → 큰 데이터 타입으로 변환될때에 자동으로 형태를 변환 시켜준다
    • ex ) int → double 할때에 int 타입의 데이터를 double 타입으로 자동으로 변환 시켜서 저장 시킨다.

명시적 형변환

  • 큰 범위에서 작은 범위 대입은 명시적 형변환이 필요하다.→ 손실변환을 시킨다.
  • double doubleValue = 1.5; int intValue = 0; // intValue = doubleValue; // 컴파일 오류 발생 intValue = (int) doubleValue; // 명시적 형변환 System.out.println(intValue);
  • 위의 코드와 같이 변경하고 싶은 타입을 ( int ) 와 같이 괄호안에 사용하여 명시적으로 입력하면 된다.

형변환 특징

  • 형변환 한다고 해서 doubleValue의 자체의 타입이 변경 되거나 그 안의 값이 변경 되는것이 아니다.
  • 읽는 값의 형태만 변경하는 것이다. 해당 타입의 값은 그대로 저장되어 있는 상태다.
  • 변수의 값은 ( = ) 대입 연산자 할때만 변경 된다.
  • 같은 타입끼리의 계산은 같은 타입 → int + int = int
  • 서로 다른 타입 계산은 큰 범위로 자동 형변환이 된다 → int + double = double + double → double

오버플로우가 발생했을때 대처

  • 오버플로우가 발생하면 끝난거다 → 그냥 상위 타입으로 사용해라

'자바 공부 > [ 完 ] 자바 입문 - 자바 첫걸음' 카테고리의 다른 글

9. 배열  (0) 2024.02.26
8. Scanner (스캐너)  (0) 2024.02.25
6. 반복문  (0) 2024.02.25
5. 조건문  (0) 2024.02.23
4. 연산자  (0) 2024.02.20

+ Recent posts