이번 글에서부터 본격적으로 자바 문법에 대해서 공부해보도록 합시다.
변수? 상수?
프로그래밍 언어에는 변수와 상수라는 것이 존재합니다.
이 둘은 데이터를 저장할 수 있는 메모리상의 공간을 의미합니다.
예를 들자면 물건을 넣을 수 있는 상자라고 이야기할 수 있을 것입니다.
둘 사이에는 극명한 차이점이 존재하는데, 변수의 경우 내용물을 언제든지 바꿀 수 있습니다.
하지만 상수의 경우엔 내용물을 한 번 정하면 다시는 바꿀 수 없습니다.
예를 들어 변수는 내부의 값을 10, 20, 60등으로 계속해서 바꾸면서 사용할 수 있습니다.
하지만 상수의 경우 값을 10으로 한 번 정하면 이후는 값을 바꿀 수 없고 10만을 사용해야 합니다.
이러한 변수와 상수를 사용하기 위해선 이들에게 의미 있는 이름을 붙여주어야 합니다.
어떤 물건을 지칭하기 위해선 그 물건의 이름을 이야기해야 하는 것처럼 말이죠.
변수의 선언 방법
먼저 변수의 선언 방법은 다음과 같습니다.
자료형 변수명
int num;
'선언'이라는 것은 어떠한 변수 하나를 만드는 것을 이야기합니다.
나는 이 변수의 이름을 num이라고 정하고, 사용하겠다.라고 선언하는 것이죠.
자료형이 무엇인가에 대해선 추후에 설명하도록 하고, 위처럼 변수를 선언하면
int라는 자료형의 num변수를 만들게 되는 것입니다.
변수를 만들었으면 실제로 데이터를 입력해봐야 할 텐데, 변수를 만들고
최초로 이 변수에 데이터를 집어넣는 것을 '초기화'라고 합니다.
int num = 10;
int num;
num = 10;
위와 같이 변수의 선언과 동시에 데이터를 입력하거나, 선언 이후에 값을 입력합니다.
이렇게 하면 이제 num이라는 이름을 통해서 10이라는 데이터를 언제든 사용할 수 있습니다.
상수의 선언 방법
다음엔 상수의 선언 방법을 알아보도록 하겠습니다.
final int NUM = 10;
위에서 보이는 final이라는 것이 상수를 선언하기 위한 '예약어'입니다.
여기서 예약어라는 것은 자바 내에서 이미 정의되어있는 특정한 단어들을 이야기합니다.
상수의 경우에는 변수와 달리 선언을 함과 동시에 초기화를 해주셔야 합니다.
이 이후에는 상수의 값을 변경할 수 없기 때문이죠.
다만, 값을 변경하지 못할 뿐이지 언제든지 사용할 수 있는 것은 변수와 동일합니다.
여기서 상수는 다시 두가지 분류로 나뉘게되는데요,
바로 리터럴 상수와 심볼릭 상수입니다.
리터럴 상수란 "글자 그대로 의미가 있어 이름이 없는 상수"입니다.
예를 들어 23은 리터럴 상수인데, 글자 그대로 23이란 값을 의미하고 있는 상수입니다.
심볼릭 상수란 "리터럴 상수에 이름을 붙여 기호화 한 것" 입니다.
우리가 위에서 알아보앗던 상수가 바로 심볼릭 상수였던 것입니다.
저는 보통 심볼릭 상수를 상수, 리터럴 상수를 리터럴이라고 부른다고 배웟었습니다.
상수의 사용 이유, 변수와 상수를 구분하는 이유
그런데 굳이 이렇게 리터럴을 상수에 저장해서 사용하지 않고,
그냥 리터럴을 사용하면 되는 것 아닐까요?
그런데 왜 이렇게 저장해서 사용하며, 상수와 변수는 왜 구분해서 사용하는걸까요?
예를 들어 여러분이 어떠한 프로그램을 만들 때, 원의 둘레를 구하는 코드를 구현한다고 생각해봅시다.
원의 둘레를 구하는 공식은 다들 아시다시피 2
또한 상수명을 사용하지 않으면, 위의 계산식을 2 * 3.14 * r이라고 적을 수 있을 것입니다.
그런데 이 코드를 다른 사람이나 프로그래머 본인이 다시 본다고 생각해볼까요?
그때 매우 긴 코드 안에서 저 계산식이 어떠한 식이며 3.14가 어떤 의미인지 바로 알 수 있을까요?
물론, 위에서 말하는 3.14라는 원주율은 매우 유명하기 때문에 바로 알 수도 있을 것입니다.
하지만 여러분이 임의로 정해놓은 값이라면 이 값을 바로 이해하기는 힘들겠죠.
때문에 3.14라는 값을 PI라는 상수명으로 기호화해서 사용하면,
계산식을 2 * PI * r이라고 적음으로써 보다 가독성이 높은 코드를 작성할 수 있게 됩니다.
이번엔 다른 극단적인 예를 하나 들어보겠습니다.
여러분이 프로그램에서 하나의 특정한 고정값, 예를 들어 10을 사용한다고 생각해봅시다.
이 10을 상수명을 사용하지 않고 사용하면 어떤 일이 발생할 수 있을까요?
여러분이 10이란 값을 프로그램 내에서 10번 사용한다고 생각해봅시다.
그런데 어떤 이유가 생겨서 이 10이란 값을 15로 바꿔야 한다면?
단순한 코드라면 어렵지 않게 바꿀 수 있을 것입니다.
하지만 이 10을 100번 사용하고 있었다면? 혹은 1000번, 10000번이라면?
또는 코드가 매우 복잡해서 10을 정확히 어디서 사용했는지 알 수 없다면 어떨까요?
사람이 위와 같은 경우에 값을 제대로 변경하기란 사실상 불가능하겠죠.
때문에 10이라는 값을 특정한 상수명으로 기호화하면, 위와같은 불상사를 막을 수 있을 것입니다.
물론, 위와 같은 경우는 극단적인 예라고 말해놓았으니, 실제로 이런 일이 일어날지는 저도 모릅니다.
하지만 적절히 사용하면 코드를 더 편하게 작성할 수 있지않을까요?
마지막으로, 이런 상수와 변수의 이름을 짓는법에 대해서 알아봅시다.
변수와 상수의 명명법
여러분이 변수와 상수에 이름을 지어서 사용할 때, 자바에서 정해진 규칙을 따라주셔야 합니다.
위에서 이야기했던 예약어를 사용하면 안 된다는 부분이 이에 해당합니다.
자바에서 정해진 필수적인 명명규칙은 다음과 같습니다. (메서드, 클래스도 동일)
1. 대소문자가 구분되며 길이에 제한이 없다.
-Num과 num은 서로 다른 이름으로 간주됩니다.
2. 예약어를 사용해서는 안된다.
-위에서 말했던 대로 자바 내에서의 예약어는 사용할 수 없습니다.
3. 숫자로 시작해서는 안된다.
-int 3num과 같은 형태로는 만들 수 없습니다. num3은 가능
4. 특수문자는 '_'와 '$'만을 허용한다.
-$와 _이외의 특수문자는 사용할 수 없습니다. 또한 둘은 변수명의 첫 글자로 사용 가능합니다.
이상이 자바의 필수 명명규칙이며, 필수는 아니지만 자바에서 권장하는 명명규칙도 존재합니다.
1. 클래스 이름의 첫 글자는 항상 대문자로 한다.
-class Example과 같은 형태로 작성합니다.
2. 변수와 메서드의 이름의 첫 글자는 항상 소문자로 한다.
-변수의 경우 int num, 메서드의 경우 void main과 같은 형태로 사용합니다.
3. 여러 단어로 이루어진 이름은 단어의 첫 글자를 대문자로 한다.
-변수의 첫 글자를 제외한 이후 단어들의 첫 글자입니다. int studentNumber
4. 상수의 이름은 모두 대문자로 한다. 여러 단어로 이루어진 경우 '_'로 구분한다.
-PI, MAX_NUMBER
위의 네 가지 규칙들은 꼭 지켜야 하는 것은 아니지만, 코드를 쉽게 이해하도록 정해놓은
개발자들 사이의 암묵적인 약속입니다. 때문에 가능하면 지켜서 코드를 작성하시는걸 추천합니다.
이상으로 변수와 상수 대한 설명은 마치도록 하고, 다음글은 자료형에 대해 이야기해보겠습니다.
감사합니다.
'프로그래밍 언어 > 자바' 카테고리의 다른 글
자바 5. 형변환 (0) | 2020.08.07 |
---|---|
자바 4. 자료형-2 (0) | 2020.08.06 |
자바 3. 자료형-1 (0) | 2020.08.05 |
자바 1. 개발 툴 설치 (0) | 2020.07.30 |
자바 개요 (0) | 2020.07.29 |