[Java] Chapter 2. 변수와 타입

SeungWoo Cha·2025년 9월 5일

Chapter 2. 변수와 타입

2.1. 변수 선언

  • RAM: 변수가 저장되는 공간
  • 변수 선언은 타입과 이름만 결정하며, 실제 메모리 할당은 최초로 값이 대입될 때 이루어진다.
  • 초기화되지 않은 변수는 메모리에 할당되지 않으며, 사용 시 컴파일 에러가 발생한다.
  • 변수는 다른 변수에 대입되어 메모리 간 값을 복사할 수 있다.

2.2. 정수 타입

  • 리터럴: 코드에서 프로그래머가 직접 입력한 값

  • 표현 방식:

    • 2진수: 0b
    • 8진수: 0
    • 16진수: 0x (알파벳 대소문자 구분 없음)
  • 기본적으로 정수 리터럴은 int로 간주된다.

  • int 범위를 초과하는 값은 뒤에 l 또는 L을 붙여 long 타입임을 표시해야 한다.


2.3. 문자 타입 (char)

  • char 타입은 **유니코드 문자(2바이트)**를 저장한다.
  • 문자 리터럴은 작은따옴표('A')로 표현한다.

2.4. 실수 타입

  • 실수는 부동소수점 방식으로 메모리에 저장된다.

  • 기본적으로 실수 리터럴은 double로 간주된다.

  • float로 저장하려면 리터럴 뒤에 f 또는 F를 붙인다.

  • e 또는 E를 사용하여 지수 표기법으로 표현할 수 있다.

    • 예: 3.14e2314.0

2.5. 논리 타입

  • boolean 타입은 true / false 두 값만 가진다.

2.6. 문자열 타입 (String)

  • String은 기본 타입이 아닌 참조 타입이다.

  • 문자열 리터럴은 큰따옴표("Hello")로 표현한다.

  • 이스케이프 코드 예시:

    • \n (줄바꿈), \t (탭), \" (큰따옴표 출력)
  • Java 13부터는 텍스트 블록(""" ... """)을 지원하여 여러 줄 문자열 작성이 가능하다.


2.7. 자동 타입 변환 (Promotion)

  • 작은 허용 범위 타입 → 큰 허용 범위 타입으로 자동 변환된다.

    int num = 10;
    double d = num; // int → double 자동 변환
  • 단, char → byte 변환은 불가능하다. (char는 음수 표현 불가)


2.8. 강제 타입 변환 (Casting)

  • 큰 범위 타입 → 작은 범위 타입 변환 시 (타입)을 명시해야 한다.

    int num = 100;
    byte b = (byte) num; // 강제 변환
  • 범위를 초과하는 경우 값이 손실될 수 있다.

  • 예시:

    1. int → char
    2. 실수 타입 → 정수 타입 (소수점 이하 버려짐)

2.9. 연산식에서 자동 타입 변환

  • 컴파일 타임 상수(constant) 연산은 컴파일 단계에서 수행된다.
  • 변수 연산은 런타임에서 수행된다.
  • int보다 작은 타입(byte, short, char)은 연산 시 자동으로 int로 변환된다.
  • 정수 연산 결과는 항상 정수로 계산된다.

2.10. 문자열 ↔ 기본 타입 변환

(1) 문자열 → 기본 타입

byte b = Byte.parseByte("10");
short s = Short.parseShort("10");
int i = Integer.parseInt("10");
long l = Long.parseLong("10");
float f = Float.parseFloat("3.14");
double d = Double.parseDouble("3.14");
boolean bool = Boolean.parseBoolean("true");

(2) 기본 타입 → 문자열

String str = String.valueOf(100);

2.11. 변수 사용 범위 (Scope)

  • 변수는 선언된 블록 내부에서만 사용 가능하다.
  • 블록을 벗어나면 변수는 소멸된다.

2.12. 콘솔 출력

  1. println() : 출력 후 줄바꿈

  2. print() : 출력 후 줄바꿈 없음

  3. printf() : 형식(format)을 지정하여 출력

    System.out.printf("%4d %6.2f %s%n", 10, 3.14, "Hello");
    • [값의 순번$] : 인자 순번 지정
    • [flags] : 부호/채움 등
    • [width] : 전체 자릿수
    • [.precision] : 소수 자릿수
    • conversion : 변환 문자(d, f, s 등)

2.13. 키보드 입력과 변수 저장

  • Scanner 클래스를 사용하여 입력받는다.

    Scanner scanner = new Scanner(System.in);
    String input = scanner.nextLine();
  • scanner.nextLine()은 Enter 입력 전까지 대기 상태가 되며, 입력된 내용을 문자열로 읽는다.

  • 문자열 비교 시 == 대신 .equals()를 사용해야 한다.

profile
한 발자국씩

0개의 댓글