Stay Hungry Stay Foolish

자바/자바 입문

[자바 기초] 01. 변수(Variable)

dev스카이 2024. 3. 18. 20:47

package(패키지)

  • 패키지는 자바 파일을 구분하기 위한 폴더이다.
  • 해당 패키지에 들어가는 자바 파일 첫줄에는 'package 패키지명;' 과 같이 소속된 패키지를 선언해주어야 한다. (보통은 자동으로 추가돼 있다.)
예제 1 - variable 이라는 패키지를 만든다.
  • src(오른쪽 마우스 클릭) > New > Package 를 클릭하면 패키지명을 적으라는 창이 나온다. 
  • variable을 입력하고 엔터를 누르면 src 디렉터리에 variable 패키지가 생긴 것을 볼 수 있다.
예제 2 - variable 패키지에서 Var1 이라는 자바 클래스를 생성한다.
  • src (오른쪽 마우스 클릭) > variable > New > Java Class를 클릭하면 클래스명을 적으라는 창이 나온다.
  • Var1을 입력하고 엔터를 누르면 variable 패키지 안에 Var1 클래스가 생성된 것을 볼 수 있다.

변수의 필요성

Var1

package variable;

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

 

만일 숫자 10을 100으로 변경하고 싶을 때 위 코드에서는 사용자가 일일이 10을 지우고 100으로 변경해줘야 한다. Var1에서는 3번만 변경면 되지만, 100개를 출력하고 싶은 사용자는 100번을 변경해줘야 하는 번거로움이 발생한다. 

 

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

 

💡Tip

<psvm + Enter(혹은 Tab)>을 하면 아래 코드가 자동 완성 된다.
public static void main(String[] args) {
}​

 

Var2

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);
    }

a라는 이름을 가진 변수를 선언하고, 10이라고 초기화해주자. Var1에서는 10을 100으로 변경하려면 10이 적혀있던 곳을 지우고 100이라고 다시 적어줬어야 했는데 Var2에서는 a = 100; 이렇게만 변경해주면 된다.

 

💡Tip

한 줄을 복사 붙여넣기를 하고 싶을 때 커서를 두고 <Ctrl + D>를 해주면 다음줄에 복사 붙여넣기가 된다.

변수 값 변경

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

예제 3 - 변수 a를 선언하고 10으로 초기화한 후 출력한다. 그 다음 변수 a의 값을 50으로 변경한 후 다시 출력해본다.

 

Var3

package variable;

public class Var3 {
    public static void main(String[] args) {
        int a; //변수 선언
        a = 10; //변수 초기화 a(10)
        System.out.println(a);
        a = 50; //변수 값 변경 : a(10 -> 50)
        System.out.println(a);
    }
}

 

 

실행 결과

10
50

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

 

※ 프로그램은 한 줄 씩 순서대로 실행된다.

a = 10; //변수 초기화: a(10) //1. 변수 a에 10을 저장한다.
System.out.println(a);       //2. 변수 a의 값을 읽는다. a에는 10이 들어있다. 10을 출력한다.
a = 50; //변수 값 변경:      //3. 변수 a의 값을 50으로 변경한다. a(10 -> 50)
System.out.println(a);       //4. 변수 a의 값을 읽는다. a에는 50이 들어있다. 50을 출력한다

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

 

💡Tip

sout + Enter(혹은 Tab)을 해주면 아래 코드가 자동 완성 된다.
System.out.println();

변수 선언과 초기화

변수를 선언하면 컴퓨터의 메모리 공간을 확보해서 그곳에 데이터를 저장할 수 있다. 변수의 이름을 통해서 해당 메모리 공간에 접근할 수 있다. 즉, 데이터를 보관할 수 있는 공간을 만들고, 그곳에 이름을 부여한다.

 

변수는 다음과 같이 하나씩 선언할 수 있다.

int a;
int b;

 

한번에 여러 변수를 선언할 수 있다.

int c, d;

 

혹은 변수를 선언과 동시에 초기화를 할 수 있다.

int e = 2;

 

 

예제 4 - 변수 선언과 초기화를 따로, 변수 선언과 초기화를 한번에, 여러 변수 선언과 초기화를 한번에 하는 코드를 작성
  • a라는 변수를 선언하고, 다음 줄에 1로 초기화하고 출력한다.
  • b라는 변수를 선언과 동시에 2로 초기화하고 출력한다.
  • c와 d라는 변수를 선언과 동시에 모두 4로 초기화하고 출력한다.

Var 5

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 = 4, d = 4;
        System.out.println(c);
        System.out.println(d);
    }
}

 

실행 결과

1
2
4
4

위와 같이 변수를 선언하고 초기화하는 방법이 다양하다.

 

💡Tip

만일 자동 완성된 System.out.println(); 에서 괄호 안에 값을 넣고 다음줄로 넘어가려면 ';'(세미콜론) 를 거쳐서 가야 하는데 그 과정이 번거롭다.
<Shift + Enter>를 해주면 바로 다음줄로(들여쓰기 포함) 넘어가게 된다. 

변수 초기화 필요성

변수를 선언만 하고 초기화를 하지 않으면 컴파일 에러가 발생하여 아래와 같은 문구가 출력된다. 

java: variable a might not have been initialized

변수를 선언하면 메모리상의 어떤 공간을 차지하고 사용하는데, 그 공간에 기존에 어떤 값이 있었는지는 아무도 모른다. 따라서 초기화를 하지 않으면 이상한 값이 출력될 수 있다. 이런 문제를 예방하기 위해 자바는 변수를 초기화 하도록 강제한다.


변수 타입

변수는 데이터를 다루는 종류에 따라 다양한 형식이 존재한다. 이러한 형식을 영어로는 타입(Type)이라 하고, 우리말로는 형식 또는 형이라고 한다. 아래에 있는 여러 타입과 크기를 살펴보자.

 

숫자 타입 

  • 정수형 
    • byte : -128 ~ 127 (1byte, 2⁸)
    • short : -32,768 ~ 32,767 (2byte, 2¹⁶)
    • int : -2,147,483,648 ~ 2,147,483,647 (약 20억) (4byte, 2³²)
    • long : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 (8byte, 2⁶⁴)
  • 실수형
    • float : 대략 -3.4E38 ~ 3.4E38, 7자리 정밀도 (4byte, 2³²)
    • double : 대략 -1.7E308 ~ 1.7E308, 15자리 정밀도 (8byte, 2⁶⁴)

문자 타입

  • char : 문자 하나(2byte)
  • String : 문자열을 표현한다. 메모리 사용량은 문자 길이에 따라 동적으로 달라진다.

논리 타입

  • boolean : true , false (1byte) (기본값은 false)

 

Var7

package variable;

public class Var7 {
    public static void main(String[] args) {
    	//정수
        byte b = 127; 
        short s = 32767;
        int a = 10000; 

        long l = 9223372036854775807L;

        //실수
        float f = 10.0f;
        double d = 10.0;
        
        //문자
        char d = 'A'; //문자 하나
        String e = "Hello Java"; //문자열, 문자열을 다루기 위한 특별한 타입
        
       	//논리
        boolean c = true; //불리언(boolean) true, false 입력 가능
    }
}
  • 정수형 중에서 long 타입이 메모리 공간이 가장 크다. 변수 값 맨 뒤에 반드시 'L' 혹은 'l'(소문자 L)을 붙여줘야 한다.
    • 소문자 l을 사용하면 1과 헷갈리기 때문에 'L'을 사용하는 것을 권장한다.
  • 실수형 중에서 float 타입도 마찬가지로 변수 값 맨 뒤에 반드시 'f'를 붙여줘야 한다.
  • 문자형 중에서 char 타입은 반드시 작은 따옴표(' ')를 써야 하고, 문자 하나만 쓸 수 있다. 'AB'라고 하면 에러가 난다.
  • 문자형 중에서 String 타입은 첫 글자가 대문자로 시작하는 특별한 타입이다.
  • 논리형은 true 혹은 false만 입력이 가능하다. 참과 거짓을 판단하는 곳에서 사용한다.

 

그러나 위의 모든 타입들을 다 사용하지는 않는다. 자주 사용하는 타입들이 몇 가지 있다.

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

리터럴

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

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

 


변수 명명 규칙

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

 

규칙

  • 변수 이름은 숫자로 시작할 수 없다. (예: 1num , 1st )
    • 그러나 숫자를 이름에 포함하는 것은 가능하다 (예: myVar1 , num1 ).
  • 이름에는 공백이 들어갈 수 없다.
  • 자바의 예약어를 변수 이름으로 사용할 수 없다. (예: int , class , public )
  • 변수 이름에는 영문자( a-z , A-Z ), 숫자( 0-9 ), 달러 기호( $ ) 또는 밑줄( _ )만 사용할 수 있다.

관례

  • 소문자로 시작하는 낙타 표기법
    • 변수 이름은 소문자로 시작하는 것이 일반적이다. 여러 단어로 이루어진 변수 이름의 경우, 첫 번째 단어는 소문자로 시작하고 그 이후의 각 단어는 대문자로 시작하는 낙타 표기법(camel case)를 사용한다. 
    • 예 : orderDetail , myAccount 
  • 클래스 이름의 첫 글자는 대문자로 시작
    • 예 : Person, OrderDetail
더보기

낙타표기법
낙타표기법(Camel Case)은 프로그래밍에서 변수, 함수, 클래스 등의 이름을 지을 때 많이 사용하는 표기법 중 하나이다. 이 표기법의 이름은 작성한 이름이 여러 단어로 구성되어 있을 때, 각 단어의 첫 글자가 대문자로 시작하고, 이 대문자들이 낙타의 등봉처럼 보이는 것에서 유래했다. 낙타표기법을 사용하면 이름에 공백을 넣지 않고도 여러 단어를 쉽게 구분 할 수 있으므로, 변수의 이름을 이해하기 쉽게 만들어준다. 또한, 대부분의 프로그래밍 언어에서는 이름에 공백을 포함할 수 없기 때문에, 낙타표기법은 이런 제한을 우회하는 좋은 방법이다.

  • 상수는 모두 대문자를 사용하고 언더바로 구분한다.
    • 예 : MAX_LIMIT
  • 패키지는 모두 소문자를 사용한다.
    • 예 : org.variable

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