Updated:

변수 시작

 src에서 new, Package를 클릭해 새 디렉터리를 만들 수 있다.

package variable;

public class Var1 {

    public static void main(String[] args) {
        System.out.println(10);
        System.out.println(10);
        System.out.println(10);
    }
}

 위 코드를 살펴보자.

  • 패키지(package)
    • variable이라는 패키지를 만들었다면, 해당 패키지에 들어가는 자바 파일 첫줄에 package variable;과 같이 소속된 패키지를 선언해주어야 한다.
    • 자바 파일이 위치하는 패키지와 package variable 선언 위치가 같아야 한다.

 모든 프로그래밍 언어는 어딘가에 값을 보관해두고 필요할 때 값을 꺼내서 읽을 수 있는 저장소가 필요해 변수(variable)라는 기능을 제공한다. 다음 코드를 분석해보자.

package variable;

public class Var2 {

    public static void main(String[] args) {
        int a; // 변수 선언
        a = 10; // 변수 초기화

        System.out.println(a);
        System.out.println(a);
        System.out.println(a);
    }
}
  • 변수 선언: int a
    • 숫자 정수(integer)를 보관할 수 있는 이름이 a라는 데이터 저장소를 만든다. 이것을 변수라 한다.
  • 변수에 값 대입: a = 10
    • =는 오른쪽에 있는 값을 왼쪽에 저장한다는 뜻이다.
    • 숫자를 보관할 수 있는 데이터 저장소인 변수 a에 값 10을 저장한다.
    • 변수에 처음으로 값을 대입해서 저장하는 것을 변수 초기화라 한다.
  • 변수 값 읽기: System.out.println(a)
    • 변수에 저장되어 있는 값을 읽어서 사용하는 방법은 변수 이름을 적어주기만 하면 된다.

변수 값 변경

 변수는 이름 그대로 변할 수 있는 수이다. 다음과 같이 중간에 변수 값을 변경해보자.

package variable;

public class Var3 {

    public static void main(String[] args) {
        int a;
        a = 10;
        System.out.println(a);
        a = 50;
        System.out.println(a);
    }
}

 변수의 값이 변경된 이후에는 10 대신에 50이 출력된 것을 확인할 수 있다.

변수 선언과 초기화

변수 선언

 변수를 선언하면 컴퓨터의 메모리 공간을 확보해서 그곳에 데이터를 저장할 수 있다. 그리고 변수의 이름을 통해서 해당 메모리 공간에 접근할 수 있다. 변수는 다음과 같이 하나씩 선언할 수도 있고, 한번에 여러 변수를 선언할 수도 있다.

package variable;

public class Var4 {

    public static void main(String[] args) {
        int a;
        int b;
        
        int c, d;
    }
}

변수 초기화

 변수를 선언하고, 선언한 변수에 처음으로 값을 저장하는 것을 변수 초기화라 한다.

package variable;

public class Var5 {

    public static void main(String[] args) {
        int a;  // 변수 선언, 초기화 각각 따로
        a = 1;
        System.out.println(a);

        int b = 2;  // 변수 선언과 초기화를 한번에
        System.out.println(b);

        int c = 3, d = 4; // 여러 변수 선언과 초기화를 한번에
        System.out.println(c);
        System.out.println(d);
    }
}

 변수는 초기화 해야한다. 다음 코드를 보면 java: variable a might not have been initialized 같이 컴파일 에러가 발행한다.

package variable;

public class Var6 {

    public static void main(String[] args) {
        int a;
        System.out.println(a);
    }
}

 컴퓨터에서 메모리는 여러 시스템이 함께 사용하는 공간이다. 그래서 어떠한 값들이 계속 저장도니다. 변수를 선언하면 메모리상의 어떤 공간을 차지하고 사용한다. 그런데 그 공간에 기존에 어떤 값이 있었는지 아무도 모른다. 따라서 초기화를 하지 않으면 이상한 값이 출력될 수 있다. 이런 문제를 예방하기 위해 자바는 변수 초기화를 하도록 강제한다.

변수 타입

 변수는 데이터를 다루는 종류에 따라 다양한 형식이 존재한다. 다음 코드를 실행해보자.

package variable;

public class Var7 {

    public static void main(String[] args) {
        int a = 100; // 정수
        double b = 10.5; // 실수
        boolean c = true; // 불리언(boolean) true, false 입력 가능
        char d = 'A'; // 문자 하나
        String e = "Hello Java"; // 문자열, 문자열을 다루기 위한 특별한 타입

        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
        System.out.println(e);
    }
}

 변수는 데이터를 다루는 종류에 따라 다양한 형식이 존재한다. 이러한 형식을 타입(type), 형식, 형이라 한다.(e.g., int 타입, int 형식, int 형 )
 변수 타입은 다음과 같다.

  • int: 정수를 다룬다.
  • double: 실수를 다룬다.
  • boolean: 불리언 타입이라 한다. true, false 값만 사용할 수 있다. 주로 참과 거짓을 판단하는 곳에서 사용한다.
  • char: 문자 하나를 다룰 때 사용한다. 작은따옴표를 사용해서 감싸야 한다.
  • String: 문자열을 다룬다. 큰따옴표를 사용해야 한다.

 각 변수는 지정한 타입에 맞는 값을 사용해야 한다.

리터럴

 코드에서 개발자가 직접 적은 100, 10.5, true, ‘A’, “Hello Java”와 같은 고정된 값을 프로그래밍 언어로 리터럴(literal)이라 한다.

int a = 100; // 정수 리터럴
double b = 10.5; // 실수 리터럴
boolean c = true; // 불리언 리터럴
char d = 'A'; // 문자 하나 리터럴
String e = "Hello Java"; // 문자열 리터럴

 변수의 값은 변할 수 있지만, 리터럴은 개발자가 직접 입력한 고정된 값이다. 따라서 리터럴 자체는 변하지 않는다.

숫자 타입

package variable;

public class Var8 {

    public static void main(String[] args) {
        byte b = 127; // -128 ~ 127
        short s = 32767; // -32,768 ~ 32,767
        int i = 2147483647; // -2,147,483,648 ~ 2,147,483,647 (약 20억)
        
        long l = 9223372036854775807L; // -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
        
        // 실수
        float f = 10.0f; // -3.4E38 ~ 3.4E38, 7자리 정밀도
        double d = 10.0; // -1.7E308 ~ 1.7E308, 15자리 정밀도
    }
}

 메모리를 적게 사용하면 작은 숫자를 표현할 수 있고, 메모리를 많이 사용하면 큰 숫자를 표현할 수 있다. 변수를 선언하면 표현 범위에 따라 메모리 공간을 차지한다. 그래서 필요에 맞도록 다양한 타입을 제공한다. 표현할 수 있는 숫자의 범위와 차지하는 메모리 공간은 다음과 같다.

  • 정수형
    • byte: -128 ~ 127 (1byte, $2^8$)
    • short: -32,768 ~ 32,767 (2byte, $2^16$)
    • int: -2,147,483,648 ~ 2,147,483,647 (약 20억) (4byte, $2^32$)
    • long: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 (8byte, $2^64$)
  • 실수형
    • float: -3.4E38 ~ 3.4E38, 7자리 정밀도 (4byte, $2^32$)
    • double: -1.7E308 ~ 1.7E308, 15자리 정밀도 (8byte, $2^64$)
  • 기타
    • boolean: true, false (1byte)
    • char: 문자 하나 (2byte)
    • String: 문자열을 표현한다. 메모리 사용량은 문자 길이에 따라 동적으로 달라진다.

 정수 리터럴은 int를 기본으로 사용한다. 따라서 int 범위 까지 표현할 수 있다. 숫자가 int 범위인 약 20억을 넘어가면 L을 붙여서 정수리터럴을 long으로 변경해야한다. (대문자 L, 소문자 l 모두 가능) 실수 리터럴은 기본이 double형을 사용한다. float형을 사용하려면 f를 붙여서 float형으로 지정해야 한다.

변수 타입 정리

 다음 타입은 실무에서 거의 사용하지 않는다.

  • byte
    • 표현 길이가 너무 작다. 또 자바는 기본적으로 4byte(int)를 효율적으로 계산하도록 설계되어 있다.
    • byte 타입을 직접 선언하고 여기에 숙자 값을 대입해서 계산하는 일은 거의 없다.
    • 대신에 파일을 바이트 단위로 다루기 때문에 파일 전송, 파일 복사 등에 주로 사용된다.
  • short
    • 표현 길이가 너무 작다. int를 사용한다.
  • float
    • 표현 길이와 정밀도가 낮다. 실수형은 double를 사용한다.
  • char
    • 문자 하나를 표현하는 일은 거의 없다. 문자 하나를 표현할 때도 문자열을 사용할 수 있다.

 실무에서 자주 사용하는 타입은 다음과 같다.

  • 정수 - int, long
    • 자바는 기본적으로 int를 사용한다. 만약 20억이 넘을 것 같으면 long을 사용한다.
    • 파일을 다룰 때는 byte를 사용한다.
  • 실수 - double
    • 실수는 고민하지 말고 double을 사용한다.
  • 불린형 - boolean
    • true, false 참, 거짓을 표현한다. 조건문에서 자주 사용된다.
  • 문자열 - String
    • 문자를 다룰 때는 문자 하나든 문자열이든 모두 String을 사용하는 것이 편리한다.

변수 명명 규칙

 자바에서 변수의 이름을 짓는데는 규칙과 관례가 있다. 규칙은 필수이다. 규칙을 지키지 않으면 컴파일 오류가 발생한다. 관례는 필수는 아니지만 전세계 개발자가 해당 관례를 따르기 떄문에 사실상 규칙이라고 생각해도 된다.

  • 규칙
    • 변수 이름은 숫자로 시작할 수 없다.
    • 이름에는 공백이 들어갈 수 없다.
    • 자바의 예약어를 변수 이름으로 사용할 수 없다.
    • 변수 이름에는 영문자, 숫자, 달러 기호($), 밑줄(_)만 사용할 수 있다.
  • 관례
    • 소문자로 사용하는 낙타 표기법
      • 변수 이름은 소문자로 시작하는 것이 일반적이다. 여러 단어로 이루어진 변수 이름의 경우, 첫 번째 단어는 소문자로 시작하고, 그 이후의 각 단어는 대문자로 시작하는 낙타 표기법(camel case)를 사용한다.(e.g., orderDetail, myAccount)

 자바 언어의 관례는 클래스는 대문자로 시작, 나머지는 소문자로 시작이다.

  • 자바에서 클래스 이름의 첫 글자는 대문자로 시작한다. 그리고 나머지는 모두 첫 글자를 소문자로 시작한다. 여기에 낙타 표기법을 사용하면 된다.
    • 클래스: Person, OrderDetail
    • 변수를 포함한 나머지: firstName, userAccount
  • 예외
    • 상수는 모두 대문자를 사용하고 언더바로 구분한다. (e.g., USER_LIMIT)
    • 패키지는 모두 소문자를 사용한다. (e.g., org.spring.boot)

 변수 이름은 의미있고, 그 용도를 명확하게 성명해야 한다.

댓글남기기