본문 바로가기

CS/Java

Java_02 - 변수(Variable)_01

이번에는 변수에 대해서 알아봅시다

수학과 달리 프로그래밍 언어에서 변수는 데이터를 저장하는 메모리 공간을 의미합니다

 

* 변수 : 데이터를 저장하는 메모리 공간

 

변수는 왜 사용하나요?

 

public class Main {
    public static void main(String[] args) {
        System.out.println(30 * 10 / 2);
    }
}

 

위 코드에서 30 * 10 / 2가 의미하는 바를 알 수 있나요?

삼각형의 높이를 구하는 건가?라고 생각할 수도 있겠네요

하지만 저는 30분의 강의 10개를 2일간 들으려면 하루에 몇 분을 학습해야 하는가를 알고 싶었습니다

이 문제를 해결하기 위해 의미가 모호한 표현에 이름을 붙여줄 수 있다면 좋겠네요

 

public class Main {
    public static void main(String[] args) {
        System.out.println(30 * 10 / 2);
        System.out.println(30 * 10 / 2);
        System.out.println(30 * 10 / 2);
        System.out.println(30 * 10 / 2);
        System.out.println(30 * 10 / 2);
    }
}

 

자 이번에는 학습 가능한 일 수가 2에서 3으로 늘어나는 경우를 생각해봅시다

어떻게 변경해야 할까요? 위의 식에 있는 2를 모두 3으로 바꾸면 되겠네요

이 과정도 귀찮지만 위 식이 엄청나게 많다면 모두 바꾸는 건 더욱 어렵겠습니다

이 문제를 해결하기 위해 같은 의미의 값들을 한번에 관리할 수 있다면 좋겠네요

 

그럼 변수를 사용햐면 어떻게 바뀔 수 있는지 확인해볼까요?

 

public class Main {
    public static void main(String[] args) {
        int lectureMinute = 30;
        int lectureSize = 10;
        int studyDay = 2;

        System.out.println(lectureMinute * lectureSize / studyDay);
        System.out.println(lectureMinute * lectureSize / studyDay);
        System.out.println(lectureMinute * lectureSize / studyDay);
        System.out.println(lectureMinute * lectureSize / studyDay);
        System.out.println(lectureMinute * lectureSize / studyDay);
    }
}

 

이전보다 의미도 명확해졌고 아무리 학습 가능일 수가 많아도 위의 studyDay의 값만 3으로 바꾸면 됩니다

 

* 변수 사용의 이유

 1) 데이터에 명확한 의미 부여

 2) 데이터를 한 번에 관리

 

변수는 어떻게 사용하나요?

 

1. 변수 선언 : 변수타입 변수명;
                       int studyDay;
2. 변수 사용 : 변수명 = 저장할 값;
                       studyDay = 2;
3. 변수의 초기화(1, 2번을 동시에) : 변수타입 변수명 = 저장할 값;
                       int studyDay = 2;

 

 1) 변수타입 : 저장할 값의 타입

 2) 변수명 : 저장할 값을 표현할 수 있는 이름

 3) = : 변수에 값을 저장하는 연산자

 

이전 예시에서 int studyDay = 2;를 확인해 보면

int(정수형)을 저장할 수 있는 studyDay이름의 공간에 2라는 데이터 값을 저장한다는 의미입니다

이제 각 요소들을 하나씩 자세히 알아볼까요?

 

변수명은 어떻게 지어야 하나요?

 

변수명은 그 변수의 의미가 잘 드러나는 것이 가장 중요합니다

int a = 2와 같이 그 의미가 불분명한 변수명은 권장하지 않습니다

이 외에도 변수명의 규칙과 권장사항이 있습니다

 

- 변수명 규칙

 1) 대소문자가 구분된다(age와 Age는 다른 변수)

 2) 숫자로 시작할 수는 없고 특수문자는 '_'와 '$'만을 허용(20age, age&height와 같은 변수명은 사용 불가)

 3) 자바에서 이미 사용하고 있는 예약어는 사용할 수 없다(public, class, static, void, int와 같은 변수명은 사용 불가)

 4) 공백은 허용되지 않는다

 

 - 변수명 권장사항

 1) 변수명의 첫글자는 소문자(메서드와 패키지도 소문자로 시작하며 클래스는 대문자로 시작)

 2) 한글은 권장하지 않는다

 3) 여러 단어의 경우 camelCase(대문자로 구분)를 사용

단, 상수의 경우 모든 글자는 대문자로 하고 여러 단어는 SNAKE_CASE(_로 구분)를 사용

 

상수가 뭐예요?

 

수학에서와 상수와 유사하게 변수 중 초기에 저장한 값을 이후에 변경할 수 없는 저장공간을 상수라고 합니다

 

public class Main {
    public static void main(String[] args) {
        final int STUDY_DAY = 2;
        STUDY_DAY = 3; // 변경 불가 에러 발생
    }
}

 

상수는 변수 선언 방법 앞에 final을 붙여 사용합니다

변수가 코드 진행 중 변경되면 안되는 경우 상수를 사용하여 이를 예방할 수 있습니다

 

= 같다는 의미인가요?

 

수학에서와 달리 =은 같다가 아니라 값을 저장하는 데 이용하는 연산자입니다

같다라는 의미는 ==을 사용하는데 이와 관련해서는 나중에 자세히 알아봅시다

이미 저장된 공간에 =으로 새로운 값을 저장하면 이전에 저장된 값은 사라지고 새로운 값이 저장됩니다

 

* = : 값을 저장하는 연산자

public class Main {
        public static void main(String[] args) {
            boolean isMale = true;
            char bloodType = 'O';
            int age = 30;
            double weight = 63.4;

            age = 40; // 이제 age는 30이 아니라 40입니다.

            System.out.println("isMale : " + isMale);
            System.out.println("bloodType : " + bloodType);
            System.out.println("age : " + age);
            System.out.println("weight : " + weight);
            System.out.println("weight : " + weight);
            System.out.println("weight : " + weight);
        }
}
isMale : true
bloodType : O
age : 40
weight : 63.4
weight : 63.4
weight : 63.4

 

변수를 만들고 거기에 값을 저장한 뒤 사용하는 예시입니다

각 값들의 의미가 변수명에 의해서 더 알기 쉬워졌고

여러번 사용된 weight의 값을 변경하고 싶다면 하나씩 바꿀 필요 없이 weight에 새로운 값을 저장하면 됩니다

추가적으로 +는 덧셈 연산자인데 문자열의 덧셈에도 이용할 수 있다는 것도 알수있네요

문자열에 대한 내용도 다음 기회에 자세히 설명하겠습니다

 

변수와 관련된 많은 것에 대해서 알아보았지만 아직 변수타입에 대해 설명하지 못했습니다

다음 글에서는 자바에서 미리 만들어져서 기본적으로 사용하는 기본형 변수타입들에 대해서 알아보고

그 다음 글에서는 기본형으로 부족할 때 추가적으로 사용하게 되는 참조형 변수타입에 대해서 알아보겠습니다