본문 바로가기

Studying/JAVA

[JAVA]_Variable(변수)

1. 변수

package variable;

public class Var1 {
    public static void main(String[] args) {
        System.out.println(20); // 변경 10 -> 20
        System.out.println(20); // 변경 10 -> 20
        System.out.println(20); // 변경 10 -> 20
    }
}

 

[Var1]

 

숫자 10이라고 적혀 있는 곳을 모두 찾아 20으로 변경하면 총 3번의 코드 변경이 발생하는 것을 알 수 있음.

만약 예제처럼 간단하게 3개가 아닌 100개 이상의 코드라면 모두 변경해야 하는 번거로움이 발생할 수 있음.

따라서 어딘가에 값을 보관해 두고 필요할 때 값을 꺼내서 읽을 수 있는 저장소가 필요함. 쉽게 비유하면 데이터를 담을 수 있는 그릇이 필요하므로 모든 프로그래밍 언어는 이런 문제를 해결하기 위해 변수(Variable)라는 기능을 제공함.


package variable;

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

        System.out.println(a);
        System.out.println(a);
        System.out.println(a);
    }
}

 

[Var2]

 

a라는 변수를 생성하고 출력을 해보자. 만약 a라는 값을 변경하고 싶으면 변수를 초기화 한 곳에 숫자만 변경하면 되므로 불필요한 동작을 줄일 수 있음.

 

자바에서 =은 오른쪽에 있는 값을 왼쪽에 저장한다는 뜻임.

수학에서 이야기하는 두 값이 같다(equals)와는 다른 뜻이라는 것을 알아두자.

a = 10에서 숫자를 보관할 수 있는 데이터 저장소인 변수 a에 값 10을 저장하고, 선언한 변수에 처음으로 값을 대입해서 저장하는 것을 변수 초기화라고 함.


package variable;

public class Var3 {
    public static void main(String[] args) {

        int a;  // 변수 선언
        a = 10; // 변수 초기화
        System.out.println(a);
        a = 50; // 변수 값 변경  a(10 -> 50)
        System.out.println(a);
    }
}

 

[Var3]

 

변수는 이름 그대로 변할 수 있는 수. 즉 a에 저장된 값을 언제든지 바꿀 수 있다는 뜻임.

처음에 a에 10을 저장하고 출력한 뒤, a의 값을 50으로 변경하고 출력된 것을 확인할 수 있음.

변수의 값을 변경하면 변수에 들어있던 기존 값은 삭제됨.


package variable;

public class Var4 {
    public static void main(String[] args) {
        
        int a;
        int b;
        
        int c, d;   // 한번에 작성 가능
    }
}

 

[Var4]

 

변수를 선언하면 컴퓨터의 메모리 공간을 확보해 그곳에 데이터를 저장 가능.

그리고 변수의 이름을 통해서 해당 메모리 공간에 접근 가능함.

쉽게 이야기하면 데이터를 보관할 수 있는 공간을 만들고, 그곳에 이름을 부여함.

변수는 하나씩 선언할 수 있고, 한 번에 여러 변수 선언 할 수 있음.


package variable;

public class Var5 {
    public static void main(String[] args) {

        // 1. 변수 선언, 초기화 각각 따로
        int a;
        a = 1;
        System.out.println(a);

        // 2. 변수 선언, 초기화 같이
        int b = 2;
        System.out.println(b);

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

 

[Var5]

 

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

1. 변수의 선언과 초기화를 각각 따로 할 수 있음.

2. 변수를 선언하면서 동시에 초기화할 수 있음.

3. 여러 변수를 선언하면서 초기화도 동시에 진행할 수 있음.


package variable;

public class Var6 {
    public static void main(String[] args) {

        // 변수를 초기화하지 않고 출력하면 출력이 되지 않으므로 변수 선언하면 초기화해야 함.

        int a;
        // System.out.println(a);

    }
}

 

[Var6]

 

변수를 초기화하지 않고 사용하면 컴파일 에러가 발생.

 

java: variable a might not have been initialized

해석하면 변수가 초기화되지 않았다는 오류임.

 

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


package variable;

public class Var7 {
    public static void main(String[] args) {

        int a = 10;     // 정수
        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);
    }
}

 

[Var7]

 

변수는 데이터를 다루는 종류에 따라 다양한 형식이 존재하는데 이러한 형식을 영어로는 타입(type)이라고 함.

우리말로는 형식 또는 형이라고 함. (int 타입, int 형식, int 형 등으로 불림 => 특별히 구분하지 않고 섞어서 부르기 때문에 다 같은 말로 이해.)

 

- int : 정수

- double : 실수

- boolean : 불리언 (true, false값만 사용가능하고, 주로 참과 거짓을 판단하는 곳에서 사용.)

- char : 문자 하나를 다룰 때 사용. 작은따옴표(')를 사용해서 감싸야함. ex) 'A', '가'

- String : 문자열을 다룰 때 사용. 큰따옴표(")를 사용. ex) "hello java"

참고로 String은 첫 글자가 대문자로 시작하는 특별한 타입. 추후에 클래스를 배워야 자세히 이해 가능하므로 지금은 문자열을 다루는 특별한 타입이라고만 이해하자.

 

각 변수는 지정한 타입에 맞는 값을 사용해야 함. 맞지 않으면 컴파일 오류가 발생함.

 

*리터럴*

- 코드에서 개발자가 직접 적은 10, 10.5, true, 'A', "hello java"와 같은 고정된 값을 프로그래밍 용어로 리터럴(literal)이라고 함.

변수의 값은 변할 수 있지만 리터럴은 개발자가 직접 입력한 고정된 값이므로 리터럴 자체는 변하지 않음.


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
        long l = 9223372036854775807L;  // -9,223,372,.36,854,775,808 ~ 9,223,372,036,854,775,807

        // 실수
        /* float보다는 double이 더 큰 범위 표현 가능(정밀도 높음)
         * 실수 리터럴은 기본이 double형 사용.
         */

        float f = 10.0f;
        double d = 10.0;

    }
}

 

[Var8]

 

메모리를 적게 사용하면 작은 숫자를 표현할 수 있고, 메모리를 많이 사용하면 큰 숫자를 표현할 수 있음.

변수를 선언하면 표현 범위에 따라 메모리 공간을 차지함. 그래서 필요에 맞도록 다양한 타입을 제공함.

 

정수 리터럴은 int를 기본으로 사용함. 따라서 int 범위까지 표현 가능.

실수 리터럴은 double을 기본으로 사용.


1-1. 변수 예제

[VarEx1Question]

 

다음 코드에서 반복해서 나오는 숫자 4, 3을 다른 숫자로 한 번에 변경할 수 있도록 다음을 변수 num1, num2를 사용해 변경해 보자.

package variable.ex;

public class VarEx1Question {
    public static void main(String[] args) {
        System.out.println(4 + 3);
        System.out.println(4 - 3);
        System.out.println(4 * 3);
    }
}
package variable.ex;

public class VarEx1Question {
    public static void main(String[] args) {
        int num1 = 4;
        int num2 = 3;

        System.out.println(num1 + num2);
        System.out.println(num1 - num2);
        System.out.println(num1 * num2);
    }
}
7
1
12

[VarEx2Question]

 

1. 변수 num1을 선언하고, 이에 10을 할당.

2. 변수 num2을 선언하고, 이에 20을 할당.

3. 두 변수의 합을 구하고, 그 결과를 새로운 변수 sum에 저장.

4. sum변수의 값을 출력.

package variable.ex;

public class VarEx2Question {
    public static void main(String[] args) {

        int num1 = 10;
        int num2 = 20;
        int sum = num1 + num2;

        System.out.println(sum);
    }
}
30

[VarEx3Question]

 

long 타입 변수 선언하고, 그 변수를 1000000000(백억)으로 초기화한 후 출력하는 프로그램 작성.

boolean 타입의 변수 선언하고, 그 변수를 true로 초기화한 후 출력하는 프로그램 작성.

package variable.ex;

public class VarEx3Question {
    public static void main(String[] args) {

        long l = 10000000000L;
        System.out.println("l = " + l);

        boolean b = true;
        System.out.println("b = " + b);
    }
}
l = 10000000000
b = true

2. 정리

 

○ 자주 사용하는 타입 ○

 

1. 정수 : int, long → 자바는 정수를 기본으로 int 사용. 만약 20억이 넘을 것 같으면 long을 쓰면 됨.

(파일을 다룰 때는 byte를 사용.)

2. 실수 : double → 실수는 고민하지 않고 double을 사용하면 됨.

3. 불린형 : boolean → true, false인 참, 거짓을 표현하는데 조건문에서 자주 사용.

4. 문자열 : String → 문자를 다룰 때는 문자 하나든 문자열이든 모두 String을 사용하는 것이 편리.

 

 변수 명명 규칙

 

자바에서 변수의 이름을 짓는 데는 규칙과 관례가 있음.

규칙은 필수이고, 관례는 필수는 아니지만 전 세계 개발자가 해당 관례를 따르기 때문에 사실상 규칙이라고 생각해도 됨.

 

▶ 규칙

1. 변수 이름은 숫자로 시작할 수 없음. 숫자를 포함하는 것은 가능. ex) myVal1, num1

2. 이름에는 공백이 들어갈 수 없음.

3. 자바의 예약어로 변수 이름 설정 불가능. ex) int, class, public

4. 변수 이름에는 영문자(a-z / A-Z), 숫자(0-9), 달러기호($), 밑줄(_)만 사용 가능.

 

▶ 관례

- 소문자로 시작하는 낙타 표기법. ex) orderDetail1, myAccount

- 클래스는 대문자로 시작하고, 나머지는 소문자로 시작.

     ▷ 예외

          - 상수는 모두 대문자를 사용하고 언더바로 구문. ex) UESE_LIMIT

          - 패키지는 모두 소문자를 사용. ex) org.spring.boot

 

변수 이름은 의미 있고, 그 용도를 명확하게 설명할 수 있는 걸로 작성하는 것이 좋음.

ex) studentCount, maxScore, userAccount, orderCount 등

'Studying > JAVA' 카테고리의 다른 글

[JAVA]_Casting(형변환)  (0) 2024.12.03
[JAVA]_Scope(스코프)  (0) 2024.12.03
[JAVA]_Loop Statement(반복문)  (0) 2024.12.03
[JAVA]_Conditional Statement(조건문)  (2) 2024.11.29
[JAVA]_Operator(연산자)  (1) 2024.11.26