[Java] 변수

배창민·2025년 9월 4일
post-thumbnail

자바 : 변수


1) 리터럴 (Literal)

정의

  • 리터럴: 변하지 않는 “값 자체”.
  • 상수는 값을 담는 메모리 공간(식별자), 리터럴은 그 공간에 들어가는 “고정 값”.
int age = 20;            // 20 → 리터럴
final int MAX = 100;     // 100 → 리터럴 (MAX는 상수)
String s = "java";       // "java" → 리터럴

종류 한눈에

분류예시메모
논리true, false-
정수100, 0b0011, 077, 0xFF, 12LL(long), 0(8진), 0x(16진)
실수3.14, 12.0e8, 7.7ff(float), d(double, 생략 가능)
문자'A', '1', '\n'홑따옴표
문자열"Hello"쌍따옴표

연산 요약

  • 숫자: 정수±정수=정수, 정수±실수=실수
  • 문자: 내부적으로 정수(유니코드)로 계산 가능
    System.out.println('a' + 1); // 98
  • 문자열: +(이어붙이기)만 가능
  • 논리: 연산 불가(문자열과 +는 가능)

실수는 부동소수점 오차 유의: 1.23 % 1.0 → 0.229999999999...


2) 변수 (Variable)

정의 & 사용

  • 메모리에 값을 저장하는 “이름 있는 공간”.
  • 선언 → 대입(초기화) → 사용
int age;     // 선언
age = 20;    // 대입(초기화)
int point = 100; // 동시 초기화

기본 자료형 정리

타입크기범위(개략)
byte1B-128 ~ 127
short2B-2^15 ~ 2^15-1
int4B-2^31 ~ 2^31-1
long8B-2^63 ~ 2^63-1 (L 필요)
float4B약 3.4e±38 (f 필요)
double8B약 1.7e±308
char2B0 ~ 65535(유니코드)
boolean1Btrue / false
String참조형문자열

네이밍 규칙

(컴파일 에러)

  • 같은 범위에서 중복 이름 불가
  • 키워드 금지(int, for, …)
  • 대소문자 구분
  • 숫자로 시작 불가
  • 특수문자는 _$ 허용

(권장 컨벤션)

  • lowerCamelCase 사용: memberAddress
  • _로 단어 연결 지양(타 언어 스타일)
  • 의미 있는 이름, 명사형 권장
  • boolean은 긍정형 의문문: isAlive

변수를 쓰는 이유

  • 의미 부여로 가독성↑
  • 재사용/일괄 변경 용이
  • 변하는 값을 단계적으로 저장

3) 상수 (Constant)

정의 & 목적

  • 한 번 대입하면 변경 불가한 저장공간
  • 바뀌지 않는 값(설정값, 공식의 상수 등) 보호

사용

final int AGE = 20;
// AGE = 30;  // 컴파일 에러
System.out.println(AGE);

네이밍 컨벤션

  • 대문자 + 언더스코어: MAX_AGE, DEFAULT_TIMEOUT

4) 오버플로우 (Overflow)

개념

  • 타입의 표현 범위를 넘으면 값이 순환됨(캐리 버림, 부호 반전)
byte n = 127; // 최댓값
n++;          // → -128 (오버플로우)

자주 맞닥뜨리는 사례

int a = 1_000_000;
int b = 700_000;
long wrong = a * b;        // 이미 int에서 오버플로우 발생
long ok    = (long)a * b;  // 피연산자부터 long으로

5) 형변환 (Casting)

왜 필요?

  • 자바는 같은 타입끼리만 연산 가능 → 타입 맞추기 필요

자동 형변환(묵시)

  • 작은 → 큰: byte → short → int → long → float → double
  • 정수 → 실수
  • char → int
  • boolean 제외
int i = 10; long l = 20;
long sum = i + l; // OK

char c = 'A';
int n = c;        // 65

강제 형변환(명시)

  • 데이터 손실을 감수하고 바꿈
long l = 8;
int  i = (int) l;

double d = 8.5;
int    x = (int) d;   // 8 (소수 절삭)

연산 시 주의점

  1. 서로 다른 타입 → 큰 타입으로 맞춰 계산
    (필요하면 결과를 명시적 캐스팅)
int i = 10; long l = 100;
int a = (int)(i + l);
long b = i + l;
  1. int 미만의 연산 결과는 int
byte b1 = 1, b2 = 2;
int r = b1 + b2;   // 결과는 int
  1. 의도치 않은 손실
int  big = 290;
byte small = (byte) big; // 34 (상위 비트 손실)
  1. 의도한 절삭
double h = 175.5;
int    f = (int) h; // 175

빠른 예제 모음

// 문자열 이어붙이기
System.out.println("9" + 9);        // 99
System.out.println(9 + "9");        // 99
System.out.println("9" + (9 + 9));  // 918

// 문자 산술 (유니코드)
System.out.println('a' + 1);        // 98
System.out.println('A' + 'B');      // 131

// 불리언은 산술 불가(문자열 + 는 가능)
System.out.println(true + "a");     // truea
profile
개발자 희망자

0개의 댓글