[이것이자바다] Chapter 02. 변수와 타입

kims·2023년 11월 15일
0

이것이자바다

목록 보기
2/9

2.1 변수 선언

  • 변수는 하나의 값을 저장할 수 있는 메모리 번지에 붙여진 이름으로, 프로그램은 메모리 번지에 값을 저장하고 읽을 수 있다.
  • 변수 선언은 어떤 타입의 데이터를 저장할 것인지와 변수 이름이 무엇인지를 결정한다.
  • 변수 이름은 첫 문자를 소문자로 시작하되 캐멀 스타일로 작성하는 것이 관례이다.
  • 대입 연산자(=)를 사용해 선언된 변수에 값을 저장할 수 있다.
  • 변수에 최초로 값(=초기값)이 대입될 때 메모리에 할당되고, 해당 메모리에 값이 저장되며 이를 변수 초기화라 한다.
  • 변수는 또 다른 변수에 대입되어 메모리 간에 값을 복사할 수 있다.

2.2 정수 타입

  • 자바는 정수, 실수, 논리값을 저장할 수 있는 기본(privitive)타입 8개를 제공한다.
  • 기본적으로 컴파일러는 정수 리터럴(=프로그래머가 직접 입력한 값)을 int 타입으로 간주한다. 따라서, long 타입 값을 사용하고 싶다면 소문자 'l' 또는 대문자 'L'을 붙여 컴파일러에게 알려줘야 한다.
데이터형메모리크기
byte1byte(8bit)
short2byte(16bit)
char2byte(16bit)
int4byte(32bit)
long8byte(64bit)

2.3 문자 타입

  • 하나의 문자를 작은 따옴표' '로 감싼 것을 문자 리터럴이라고 하며, 유니코드로 변환되어 저장된다. 따라서, char 변수에 유니코드 숫자를 직접 대입할 수도 있다.
  • char 변수는 공백 하나(유니코드:32)를 포함해서 초기화해야 한다.

    유니코드(Unicode)는 전 세계의 모든 문자를 다루도록 설계된 표준 문자 전산 처리 방식이다.
    👉🏻나무위키 - 유니코드

2.4 실수 타입

  • 기본적으로 컴파일러는 실수 리터럴(=프로그래머가 직접 입력한 값)을 double 타입으로 간주한다. 따라서, float 타입 값을 사용하고 싶다면 소문자 'f' 또는 대문자 'F'을 붙여 컴파일러에게 알려줘야 한다.
데이터형메모리크기
float4byte(32bit)
double8byte(64bit)

2.5 논리 타입

  • 참과 거짓을 의미하는 논리 리터럴은 true와 false이다.
데이터형메모리크기
boolean1byte(8bit)

2.6 문자열 타입

  • 여러 개의 문자열을 큰 따옴표" "로 감싼 것으로, 유니코드로 변환되지 않는다.
  • String 타입은 기본 타입에 속하지 않는 참조 타입이다.
  • 문자열 내부에 이스케이프 문자(=역슬래쉬가 붙은 문자)를 사용해 특정 문자를 포함하거나 출력 방식을 수정할 수 있다.
  • 자바 13부터는 텍스트 블록 문법을 제공한다. 큰따옴표 3개""" """로 감싸면 이스케이프하거나 라인피드할 필요 없이 작성된 그대로 문자열로 저장된다.
public class StringExample {

    public static void main(String []args) {
        System.out.println("----------");
        System.out.println("받아들이면 된다");
        System.out.println("\"지는 해\"를 깨우며 노력하지 말거라");
        System.out.print("너는\t달빛에\t더\t아름답다\n");
        String name = "서혜진";
        String title = "너에게";
        System.out.print(name);
        System.out.print("\\");
        System.out.println(title);

        System.out.println("----------");
        System.out.println("Java 13 이후");
        String poem = """
                받아들이면 된다
                "지는 해"를 깨우며 노력하지 말거라
                너는 달빛에  더  아름답다
                서혜진\\너에게
                """;
        System.out.println(poem);
    }
}

2.7 자동 타입 변환

  • 값의 허용 범위가 작은 타입이 큰 타입으로 대입될 때 발생
  • 단, byte 타입은 char 타입으로 자동 타입 변환이 될 수 없다. 왜냐하면 char 타입의 허용 범위는 음수를 포함하지 않는데, byte 타입은 음수를 포함하기 때문이다. (자동 타입 변환 예외)

2.8 강제 타입 변환

  • 값의 허용 범위가 큰 타입을 작은 타입으로 쪼개어 저장하는 것을 강제 타입 변환(casting)이라고 한다.
  • 강제 타입의 목적은 원래 값이 유지되면서 타입만 바꾸는 것이므로, 작은 허용 범위 타입에 저장될 수 있는 값을 가지고 강제 타입 변환을 해야 한다.
public class Example {

    public static void main(String []args) {
        int intValue = 10;
        char charValue = 'A';
        double doubleValue = 5.7;
        String strValue = "A";

        System.out.println((byte) intValue);     // 10 출력
        System.out.println((int) doubleValue);   // 5 출력
        System.out.println((char) strValue);     // 컴파일 에러 발생 : Inconvertible types; cannot cast 'java.lang.String' to 'char'
    }
}

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

  • 자바는 컴파일 단계에서 연산을 수행한다.
    단, 정수 리터럴이 아닌 피연산자로 사용되면 실행 단계에서 연산을 수행한다.
  • byte, short 타입의 변수는 int 타입으로 자동 타입 변환되어 연산을 수행한다.
  • 피연산자 중 하나가 double 타입이면 다른 연산자도 double 타입으로 변환되어 연산된다.
  • 피연산자 중 하나가 문자열 타입이면 나머지 연산자도 문자열로 자동 변환되어 문자열 결합 연산을 수행한다.

2.10 문자열을 기본 타입으로 변환

public class Example {

    public static void main(String []args) {
        String str = "5";

        System.out.println(Byte.parseByte(str));       // 5 출력
        System.out.println(Integer.parseInt(str));     // 5 출력
        System.out.println(Float.parseFloat(str));     // 5.0 출력
        System.out.println(Double.parseDouble(str));   // 5.0 출력
    }
}

2.11 변수 사용 범위

  • 중괄호{ } 블록 내에서 선언된 변수는 해당 블록 내에서만 사용 가능하고 밖에서는 사용할 수 없다.
  • 블록 전체에서 사용하고 싶다면 메소드 블록 첫머리에 선언하는 것이 좋다.

profile
기술로 세상을 이롭게

0개의 댓글