6. 스코프(scope)

스코프는 변수의 생존 범위를 의미한다.

 

종류

  • 지역 변수 : 특정 지역에서만 사용할 수 있는 변수
  • 멤버 변수 : 클래스 변수, 인스턴스 변수

 

스코프 존재 이유

  • 비효율적인 메모리 사용 예방
    • 모든 변수가 모든 지역에서 사용이 가능하다면 특정 지역에서만 사용되는 변수로 인해 메모리 낭비가 계속 발생할 가능성 존재
  • 코드 복잡성 증가 예방
    • 전역 변수는 개발자가 계속 신경을 써야하고, 에러의 위험성이 있어서 코드를 복잡하게 만든다.
    • 필요할 때만 딱 쓰고 신경 안쓰게 변수의 범위를 잘 정하자
    • 좋은 코드는 단순하고, 명확한 코드!!

 

정리

  • 변수의 스코프는 꼭 필요한 곳으로 한정해서 사용하자.
    • 메모리를 효율적으로 사용하고 더 유지보수하기 좋은 코드를 만들 수 있다.
  • 좋은 프로그램은 무한한 자유가 있는 프로그램이 아니라 적절한 제약이 있는 프로그램이다.
    • 제약의 끝판왕은 타입 제한 → 유지보수에 유용하다

 

형변환1 - 자동 형변환(묵시적 형변환)

작은 범위의 타입 값을 큰 범위 타입에 자동으로 넣을 수 있다. 하지만 반대는 소수점 버림, 오버플로우와 같은 문제가 발생할 수 있기에 주의해야 한다.

  • 가능한 케이스
    • int → long → double 가능
    package casting;
    public class Casting1 {
    	public static void main(String[] args) {
    		int intValue = 10;
    		long longValue;
    		double doubleValue;
    
    		longValue = intValue; // int -> long
    		System.out.println("longValue = " + longValue); //longValue = 10
    
    		doubleValue = intValue; // int -> double
    		System.out.println("doubleValue1 = " + doubleValue); //doubleValue1 = 10.0
    
    		doubleValue = 20L; // long -> double
    		System.out.println("doubleValue2 = " + doubleValue); //doubleValue2 = 20.0
      } 
    }
    

 

형변환2 - 명시적 형변환

큰 범위에서 작은 범위 대입은 명시적 형변환이 필요하다.

 

명시적 형변환

double doubleNum = 10.0; 
int intNum = (int) doubleNum; // intNum = 10;

 

주의

  • 형변환을 한다고 해서 변수의 타입이나 안에 있는 값이 변경되는 것은 아니다.
  • 변수에서 읽은 값을 형변환하는 것이다.
  • 변수의 값은 대입연산자를 사용해 직접 대입할 때만 변경된다.

 

오버플로우

  • 타입의 기존 범위를 초과해 표현할 경우 전혀 다른 숫자가 표현되는 경우
  • 오버플로우는 발생하는 것 자체가 문제이기 때문에 오버플로우가 발생했을 때 결과가 어떻게 되는지 계산하는데 시간을 낭비하면 안된다.
  • 잘못된 숫자를 활용할 생각하지 말고, 잘못된 숫자가 안 나오게 수정하는 것에 초점을 맞춰야 한다.
    • 예시 : 타입을 int → long 변경

 

자바에서 타입 규칙 2가지

  1. 같은 타입끼리의 계산은 같은 타입의 결과를 낸다.
  2. 서로 다른 타입의 계산은 큰 범위로 자동 형변환이 일어난다.

 

Reference

인프런 '김영한의 실전 자바 - 기본편'

 

'Dev Language > Java' 카테고리의 다른 글

[자바/입문] 8. 메서드  (2) 2023.12.29
[자바/입문] 7. 배열  (0) 2023.12.29
[자바/입문] 4. 조건문, 5. 반복문  (2) 2023.12.29
[자바/입문] 2. 변수, 3. 연산자  (0) 2023.12.29
[자바/입문] 1. 자바란?  (0) 2023.12.29

+ Recent posts