Java 변수와 상수/데이터타입

서린·2024년 7월 22일
0

Java

목록 보기
2/4
post-thumbnail

변수(Variable)란?

  • 값을 저장할 수 있는 메모리상의 공간
  • 하나의 변수는 단 하나의 값만을 저장
  • 새로운 값을 저장하면 기존 값은 사라진다.

변수 선언 및 초기화

  • 변수 선언
    • 데이터타입과 변수명으로 선언

      // 변수 선언
      int age;
  • 변수 초기화
    변수를 선언하고 사용하기 전, 처음으로 값을 저장하는 것
  // 변수 선언
  int age;

  // 변수 초기화
  age = 20;

  // 변수 선언과 동시에 초기화
  String name = "홍길동";

변수 명명 규칙

  • 변수명은 영문 대소문자,숫자,언더바(), 달러($) 사용 가능
    (’
    ’, ‘$’ 이 외의 특수기호 사용 불가능 / 한글은 사용 가능하나 지양)
  • 변수명은 숫자로 시작이 불가능
  • 변수명은 공백이 포함 불가
  • 변수명은 미리 지정되어 있는 예약어를 사용불가
    ex) true, int 등등
  • 변수명은 대소문자를 구분
    ex) Age와 age는 서로 다른 변수로 인식

상수(Constants)와 리터럴(Literal)이란?

  • 상수(Constants)
    • 최초 대입한 값이 절대 변하지 않는 값
    • 변수 선언 시 가장 앞에 final 키워드 추가하여 선언
    • 상수명은 모두 대문자이며, 단어와 단어 사이는 언더바(_)로 연결
    • 상수 선언과 동시에 초기화 필수
  • 리터럴(Literal)
    그 자체로 의미를 가지는 변하지 않는 값
// `USER_NAME`이라는 이름의 상수 선언, 리터럴은 `Java`
final String USER_NAME = "Java";

// 같은 이름의 상수 재할당 : 상수는 변하지 않는 값이므로 에러 발생
USER_NAME = "Change";

underscore 표기법

  • 큰 숫자를 콤마 1000,000,000 로 표현하듯이 프로그래밍에선 언더바(_)로 표현해도 숫자로 인식
int num = 1_000_000;
System.out.println(num); // 1000000

두 변수의 값 스왑(Swap)

  • 스왑할 두 변수(num1, num2)와, 값을 임시로 저장할 임시변수(tmp)를 준비
    - num1의 값을 tmp에 저장
    - num2의 값을 num1에 저장
    - tmp에 저장해둔 num1의 값을 num2에 저장
int num1 = 1;
int num2 = 200;
int tmp;

// num1 = 1, num2 = 200
System.out.printf("num1 = %d, num2 = %d\n", num1, num2);

tmp = num1; // num1의 값을 tmp에 저장
num1 = num2; // num2의 값을 num1에 저장
num2 = tmp; // tmp에 저장해둔 num1의 값을 num2에 저장

// num1 = 200, num2 = 1
System.out.printf("num1 = %d, num2 = %d\n", num1, num2);

데이터 타입(Data Type)이란?

  • 여러 종류의 데이터를 식별하는 분류
  • 저장하려는 값의 특성을 고려하여 데이터 타입을 결정
  • Java 의 경우 크게 기본형(primitive type)참조형(reference type)으로 분류

기본형(primitive type)

  • 저장 공간에 실제 자료 값을 가지는 데이터 타입
  • 비객체 타입이므로 null을 저장할 수 없다.
  • 변수의 선언과 동시에 메모리 생성
  • 모든 값 타입은 메모리의 스택(stack)에 저장
  • 기본형 데이터 타입은 총 8개

참조형(reference type)

  • 기본형 8가지를 제외한 나머지 (Class, Array, Enum 등)
  • 저장 공간에 자료가 저장된 공간의 주소를 저장, 실제값을 저장하지 않는다.
  • null 저장 가능
  • 메모리의 힙(Heap)에 실제 값이 저장되고, 그 참조값을 갖는 변수는 스택(stack)에 저장
  • 할당되는 메모리 크기는 4byte

정수 및 실수의 Overflow와 Underflow

  • 정수형 및 실수형 데이터타입을 사용시, 사용하고자 하는 데이터의 최대/최소 크기를 고려

  • 범위를 벗어난 값을 저장하면 Overflow/Underflow가 발생하여 전혀 다른값이 저장 될 수 있다.

    • Overflow : 최대 표현 범위보다 큰 수를 저장할 때 발생하는 현상

    • Underflow : 최소 표현 범위보다 작은 수를 저장할 때 발생하는 현상

      // byte의 표현 범위는 -128 ~ 127
      byte max = 127;
      byte min = -128;
      
      byte sumMax = max + 1; // Overflow Error
      byte sumMin = min - 1; // Underflow Error
      
      // 실수의 표현 범위는 3.4028235E38 ~ 1.4E-45
      float fMax = 3.4028235E38;
      float fMin = 1.4E-45;
      
      float sumFMax = fMax + 0.1; // Overflow Error
      float sumFin = fMin - 0.1; // Underflow Error
      		```

실수의 표현 오차

  • 메모리의 한계로 인해 실수의 소숫점 표현에 제한이 존재
  • 실수 표현의 범위와 정확성을 위해 부동 소수점 방식을 이용
  • 어디까지나 근사치를 저장하므로, 필연적으로 오차가 발생
profile
개발 일기 ( •̀ ω •́ )✧

0개의 댓글

관련 채용 정보