Java 기초

[Java 기초] (1) 변수란?

kimbh 2024. 9. 8. 20:18

안녕하세요. 

저번 시간에는 JDK 설치 및 환경 변수 설정에 대한 포스팅을 했는데요

 

이번에 공부해 볼 내용은 변수란 무엇인가?입니다.

프로그래밍 언어를 공부하시는 분들이라면 변수가 무엇인지 아시는 분들도 있지만, 저처럼 애매하게 배웠던 사람들 혹은 처음 배워보는 사람들은 이 글을 읽고 공부를 시작하거나, 다시 한번 짚어볼 수 있는 시간을 가지고자 포스팅을 해보려고 합니다.

 

목차

1. 변수

2. 프로젝트 생성

3. 변수 선언

 

 

1. 변수 

- 메모리의 특정 번지를 정해주는 것을 말한다.

예를 들어서 

i라는 변수명에 10이라는 값을 넣었습니다. 이때 이 10이라는 값이 정수인지, 실수인지 모르기 때문에 자료형을 넣게 되는데요.

변수명 앞에 int라고 붙어있는 것을 알 수 있습니다. 이 int라고 적혀있는 것을 자료형(data type)이라고 부르고 있습니다.

int는 Integer의 약자로 정수형을 나타내는 타입으로 알고 계시면 좋겠습니다.

 

이렇게 변수 선언을 하게됩니다.

이때 JVM이라는 자바 가상 머신이 자동적으로 메모리에 저장을 하는데요. 변수 이름만 선언할 경우에는 번지를 지정해주지 않고, 변수의 값을 초기화할 경우에만 JVM에서 자동으로 메모리 저장과 동시에 번지도 지정을 해줍니다.

 

2. 프로젝트 생성 

Intellij를 설치를 완료하고 처음에 실행을 하게 되면

초기 화면에 이렇게 나옵니다.

저희는 프로젝트를 생성할 예정이기 때문에 New Project를 누르겠습니다.

1. 프로젝트 이름을 적는 칸입니다.

2. 프로젝트 생성 시 프로젝트 파일을 어디 경로로 지정할 것인가입니다.

Create Git repositiory 부분은 이 프로젝트 파일을 GitHub에도 만들어서 저장할 것이냐 부분입니다. 저는 따로 깃 허브를 만들지 않을 예정이라 누르지 않겠습니다.

3. 자바 빌드 시스템에 대한 부분입니다. 저희는 맨 앞에 있는 Intellij를 사용하도록 하겠습니다.

4. 어떤 JDK 버전을 사용할지 선택하는 부분입니다. 저희는 앞에서 JDK 21 버전을 설치했기 때문에 JDK 21버전을 선택하겠습니다.

5. 설정 다 하게 되면 Create를 눌러 프로젝트를 생성합니다.

 

 프로젝트를 생성하게 되면 나타나는 화면입니다. 자동적으로 Main 클래스가 생성되고 초기 소스에서 실행하게 되면

해당 사진처럼 출력이 되는 것을 알 수 있습니다.

 

3. 변수 선언

자바에서는 변수를 선언하기 위해서

데이터 타입, 변수명 혹은 데이터 타입, 변수명, 초기값을 선언할 수 있습니다.

데이터 타입 즉 자료형은 다음 시간에 자세하게 알아보도록 하겠습니다.

 

3 - 1 변수명을 지정할 때 조심해야 될 점

변수명을 지정할 때 조심해야 되는 점은 3가지로 알 수 있습니다.

 

(1). 변수명을 지정할 때 특수 문자를 사용하면 안 된다.

package Test;

public class exam1 {
    public static void main(String [] args){
        int !abc = 1; //에러
    }
}

컴파일할 시 오류가 나타나는 것을 알 수 있습니다.

 

하지만 특수문자 중에서도 외에 특수문자 2개가 있는데요.

package Test;

public class exam1 {
    public static void main(String [] args){
        int $abc = 1;
        int _abc = 2;

        System.out.println($abc);
        System.out.println(_abc);
    }
}

바로 $ 와 _(언더스코어)입니다. 

출력 결과로 1과 2가 나온 것을 알 수 있습니다.

 

(2) 변수명을 지정할 때 대소문자 구분을 확실히 해야 한다.

간혹 변수를 선언하고 출력하는 부분에서 변수를 잘못 작성해서 출력이 안 되는 경우도 있습니다. 예시가 이런 경우입니다.

package Test;

public class exam1 {
    public static void main(String [] args){
        int Exam1 = 1;
        System.out.printl(exam1);
    }
}

변수명으로는 Exam1으로 선언했지만, 출력할 때는 exam1로 e가 대문자가 빠진 것을 알 수가 있습니다.

이 상태에서 출력을 하게 되면

exam1을 찾을 수 없다고 나옵니다. 대소문자 구분을 확실하게 해 주시기 바랍니다.

 

(3) 예약어로 변수명을 사용할 수 없다.

예약어란 컴퓨터 프로그래밍 언어에서 이미 문법적인 용도로 사용되고 있기 때문에 식별자로 사용할 수 없는 단어들입니다.

예시로 

package Test;

public class exam1 {
    public static void main(String [] args){
        int double;
        double int;
        int if = 1;
        int for = 10;
    }
}

해당 코드처럼 자료형이나 함수, 연산자 등을 변수명으로 사용할 수 없습니다.

 

3 - 2 변수 사용

변수 사용이란 변수명과 변수 값을 초기화하면 그 변수를 사용할 수 있다.

예를 들어서 다음 코드를 예시로 들겠습니다.

package Test;

public class exam1 {
    public static void main(String [] args){
        int i = 1;
        
        int j = i + 1; // 변수 사용
        
        int z = j; // 변수 사용
    }
}

j는 i의 변수에 1을 더해서 j의 변수에 값을 저장한 것을 알 수 있습니다. 

z는 j의 변수 값을 z 변수에 저장한 코드입니다.

이 두 가지가 변수 사용에 해당되는 코드들입니다.

i, j, z 출력 결과

 

다음으로 조건문에 관련된 예시입니다.

package Test;

public class exam1 {
    public static void main(String [] args){
        int i = 1;

        int j;

        if(i < 2){ // 변수 사용
            j = 2;
            System.out.println(j);
        }
    }
}

if문을 이용해서 i의 변수를 사용한 예시입니다.

 

컴파일하면 2의 값이 나오는 것을 알 수 있습니다.

3 - 3 변수 사용 범위

자바에서는 변수를 선언하기 위해서 중괄호 { } 블록을 사용합니다. 메서드 블록 내에서 변수를 선언하면 그 변수는 로컬 변수라고 부르는데 이 로컬 변수는 메소드 내부에서 변수들만 사용할 수 있습니다. 예시로

package Test;

public class exam1 {
    public static void main(String [] args){
        int i = 10;

        System.out.println(i);
    }
}

해당 코드처럼 main이라는 메소드 안에 로컬변수 i가 존재하고 출력하는 코드입니다. 컴파일하게 되면

10이라는 값이 출력이 되는 것을 알 수 있습니다.

 

반대로 main  바깥에 i라는 변수를 선언하게 되면 어떻게 될까? 에 대해서 예시로 코드를 작성하고 출력해 보겠습니다.

package Test;

public class exam1 {
    int i = 10;
    public static void main(String [] args){

        System.out.println(i);
    }
}

해당 사진처럼 오류가 생기는 것을 알 수 있습니다.

 

그렇다면  main 메서드 안에 변수를 사용해야 로컬 변수인 건 알겠는데. main메서드 내부에 조건문을 작성하고 그 조건문 블록 안에 i변수의 값을 바꾸면 바뀔까? 에 대해서 궁금증이 생기실겁니다. 그렇다면 바로 예시로 코드를 작성하고 출력해 보겠습니다.

package Test;

public class exam1 {
    public static void main(String [] args){
        int i = 10;

        if(i <= 10){
            i = 20;
        }
        System.out.println(i);
    }
}

코드처럼 i가 10보다 작거나 같을 때 i값이 20으로 바뀌는 것을 알 수 있습니다. 이처럼 메서드 내부에 있는 변수를 로컬변수라는 것을 알 수 있었고 조건문이나 반복문을 통해서도 로컬 변수의 값이 바뀌는 것을 알 수 있었습니다.

 

 

 

이상으로 변수에 대해서 알아보는 시간을 가졌습니다.

다음에 포스팅할 내용은 자료형(Data Type)에 대한 내용으로 포스팅해 보도록 하겠습니다.

 

이상 포스팅 마치겠습니다. 감사합니다!

 

 

결론 - 1. 변수 - 메모리의 특정 번지를 정해주는 것을 말한다

2. 변수 선언 - 데이터 타입, 변수명 혹은 데이터 타입, 변수명, 초기값을 선언할 수 있습니다

3. 로컬 변수 - 메서드 내에서 변수를 선언하는데 그 선언한 변수를 로컬 변수라 함