[JAVA] 김영한의 자바 입문 - 스코프, 형변환

선뀰·2023년 12월 13일
0

JAVA

목록 보기
3/25

1. 스코프

변수의 접근 가능한 범위이다. 블록의 내부에서 외부는 접근이 가능하다.
지역 변수는 특정 지역에서만 사용할 수 있는 변수라는 뜻이다.
코드 블록이 끝나면 제거가 된다.

스코프의 존재 이유

  • 비효율적인 메모리 사용
    if코드 블록에서 사용되는 코드가 main()코드 블록이 종료될 때 까지 메모리에 유지가 되기 때문에 메모리의 낭비가 된다.

  • 코드 복잡성 증가
    스코프가 넓은 것이 복잡한 경우 이해가 어렵게 된다.
    조건이 맞으면 m의 값을 2배 증가해서 출력하는 코드이다.

변수는 꼭 필요한 범위로 한정해서 사용하기.
메모리를 효율적으로 사용하여 유지보수가 유용한 프로그램을 만들자.

좋은 프로그램은 무한한 자유가 있는 프로그램이 아니라, 적절한 제약이 있는 프로그램이다.

2. 형변환

  • 형변환
    작은 범위에서 큰 범위로 값을 넣을 수 있다.
    int -> long -> double

큰 범위에서 작은 범위는 문제가 발생한다.

  • 소수점 버림

  • 오버플로우

  • 작은 범위에서 큰 범위로 대입은 허용된다.
    int < long < double

  • 자바는 기본적으로 같은 타입에 값을 대입할 수 있다.
    작은 범위에서 큰 범위로의 대입은 허용한다.

1) 자동 형변환, 묵시적 형변환

doubleValue = intValue
doubleValue = (double) intValue
doubleValue = (double) 10
doubleValue = 10.0 //형 변환

2) 명시적 형변환

double을 int로 대입
double doubleValue = 1.5;
int intValue = 0;

intValue = doubleValue; // 컴파일 오류가 발생한다.
intValue = (int) doubleValue; // 명시적 형변환

큰 데이터 타입에 있는 것은 작은 데이터 타입에 넣는 것을 허용하지 않는다.

  • 강제로 변환하는 방법
    intValue = (int) doubleValue; 괄호를 사용하여 명시적으로 입력한다.
  • 형변환과 오버플로우
    작은 숫자가 표현할 수 있는 범위를 넘어선다면
    maxIntOver = 2147483648L; // int 최고값 + 1
    intValue = (int) maxIntOver; // 변수 값 읽기
    intValue = (int) 2147483648L; // 형변환 시도
    intValue = -2147483648;

기존 범위를 초과하여 표현하게 된다면 전혀 다른 숫자가 표현된다.
사이트를 들어가면 casting을 잘 못해서 -값이 발생하면 오버플로우가 발생했다 생각하면 된다.

계산과 형변환

형변환은 대입과 별개로 계산을 할 때 사용된다.

1) 같은 타입끼리의 계산은 같은 타입의 결과를 낸다.

int + int = int , double + double = double의 결과가 나온다.

2) 서로 다른 타입의 계산은 큰 범위로 자동 형변환이 된다.

int + long = long + long으로 자동으로 형변환이 일어난다.
int + double = double + double로 자동 형변환이 일어난다.
double div3 = (double) 3 / 2; //명시적 형변환이 가능하다. (double) int / int

profile
공부 기록

0개의 댓글