본문 바로가기

개발자 이야기/JAVA

자바 변수, 그리고 상수란 무엇인가 1편

기존에 공부하고 있던 Git/GitHub 공부와 더불어 전에 읽었던 자바의 정석을 가볍게 읽고 정리하면서 같이 공부하려고 한다. 지난 금, 토, 일은 여행을 다녀오느라 공부를 하지 못했는데 오늘부터 다시 열심히 공부를 해야겠다. 이번에 자바의 정석을 읽는건 3회짼데, 처음 읽었을 때와 2회독을 할 때, 그리고 이번에 읽는 것까지 매번 느낌이 다르다. 처음에 읽을 때는 아무것도 모르는 상태에서 책을 읽느라 마냥 어렵기만 했고, 그래서 공부하기가 싫었다. 그런데 취업을 준비하면서 2번째 읽을때는 처음 읽을때와는 다르게 잘 읽혀졌고, 이번에 읽을 때는 그 때보다 더 잘 읽힌다. 이제는 뭘 알고 있고 어떤 점이 부족한지를 알기 때문에 이전에 읽을 때보다는 좀 더 빠르게 읽을 수 있지 않을까 싶다. 그리고 공부가 더 재밌어진다. 회사 일만 좀 한가하다면 더 열심히 공부하고 싶다.


첫 장에서는 자바가 무엇이고 개발 환경을 어떻게 구축하는지에 대해서 나와있다. 하지만 나는 그냥 가볍게 읽고 넘어갔다. 아직도 쉽사리 이해되지 않는 부분들이 있다. 다른 것보다 내가 가장 잘 느끼고 있는 자바의 특징은 운영체제에 독립적인 것(JVM)과 객체지향언어라는 것. 이 점은 개발하면서 정말 편리하다고 느끼고 있다. 그 외에 나오는 JDK 설치하는 방법이나 Hello World! 를 찍는 부분은 후다닥 넘어가버렸다. 


그 다음 맞이하는 2장은 바로 변수(Variable)과 상수이다. 이 변수와 상수가 없으면 간단한 프로그램조차도 만들기 매우 어려워진다. 아니 거의 만들지 못할 것이다. 그렇기 때문에 간단한 개념이지만서도 매우 중요한 내용이다. 우선 변수와 상수에 대해서 먼저 간략하게 정리해보았다.


* 변수 : 단 하나의 값을 저장할 수 있는 메모리 공간(나중에 값을 변경하게 되면 기존에 저장되어 있던 값이 지워지고 가장 마지막에 수정한 값이 변수의 값이 된다.)

* 상수 : 처음에 정해놓은 값이 바뀌지 않고 끝까지 가는 값(중간에 수정 불가. 물론 선언할 때 초기화하지 않았다면 단 한번 정할 수 있다.)


변수와 상수는 간략하게 이렇게 정리해 볼 수 있는데, 이 변수와 상수를 사용하기 위해서는 별도의 과정을 거쳐야 한다. 바로 선언과 초기화이다. 이 두 용어는 처음에 굉장히 많이 헷갈렸다. 하지만 지금은 헷갈리지 않고 잘 구별해서 사용할 수 있다. 역시 공부만이 살 길인가 보다.



▶︎ 변수의 선언


변수를 사용하려면 우선 선언을 해야한다. 이 변수를 어떻게 쓸지를 말이다. 



변수의 선언은 이런 형태로 이루어진다. 앞에는 변수타입을 적어주는데, 지금 선언할 변수타입을 적어준다. 변수타입의 종류는 실수형(float, long), 정수형(byte, short, int, long), 문자형(char) 등이 있다. 그리고 뒤에는 변수명을 적어주는데, 변수명을 정하는 데는 각 유형별로 암묵적으로 정해진 규칙들이 있지만 이 포스팅 맨 마지막에서 정리해야겠다. 변수명은 나중에 보더라도, 혹은 다른 사람이 보더라도 쉽게 어떤 역할을 하는 변수인지 알기 쉽게 해당 role에 알맞는 변수명으로 네이밍을 해주는 것이 좋다. 아니면 주석을 달아 표시해두는 것도 좋다. 팀 프로젝트를 진행하다보면 변수명 때문에 헷갈리는 경우가 있는데, 정리를 잘 해두면 이런 일이 없어도 된다. 


변수타입이 잘 이해가 가지 않는 경우가 있는데, 쉽게 말해서 분리수거함을 생각하면 된다. 우리가 분리수거를 할 때 병은 병이라고 적힌 곳에 버리고, 플라스틱은 플라스틱이라고 적힌 곳에 버린다. 그것 처럼 변수타입에 따라 들어가는 값이 달라지는 것이다. 이렇게 이해하면 좀 쉽다. 이처럼 변수타입에 따라 실수형, 정수형, 문자형 등의 값을 넣을 수 있다.



▶︎ 변수의 초기화


변수의 선언을 앞에서 정리해봤는데, 이번엔 변수의 초기화이다. 변수의 초기화는 선언된 변수에 사용할 수 있도록 값을 넣어주는 것을 말한다. 변수의 선언과 초기화의 차이점을 살펴보면,


* 변수의 선언

   int a; char b; float c;


* 변수의 초기화

   a = 1;

   b = 'c';

   c = 1.23


차이점은 이렇다. 저렇게 등호표시를 기준으로 우측에 있는 값을 좌측에 있는 변수에 집어넣겠다는 것이 바로 초기화이다. 이렇게 초기화를 해주면 변수만으로 해당 값을 쓸 수 있다. 한번 간단한 예를 들어보겠다.


1
2
3
4
5
6
7
8
9
10
11
package test;
public class Test {
    public static void main(String[] args) {
        int year;      //변수의 선언, 초기화하지 않음
        int month = 1//변수 선언, 초기화
        
        System.out.println(year);  //year 출력, 에러
        System.out.println(month); //month 출력
    }
}
 
cs


이렇게 입력을 하면 에러가 난다. 변수를 사용하려면 초기화를 해주어야 한다. 물론 나중에 클래스 멤버변수는 상관없는데, 일단 기본적으로 이렇다고 알아둔다. 책 순서대로 차근차근 공부할 테니 말이다. 



▶︎ 변수의 명명규칙


변수를 선언하는데에 있어서 변수명을 명명하는데 규칙이 있다. 이런 규칙은 정말 지켜야하는, 지키지 않으면 변수가 선언되지 않은 규칙과 암묵적인 규칙들이 있는데 나누어서 정리했다.


* 변수의 명명규칙

  1. 대소문자 구분, 길이 제한 없다.    -> basic과 Basic은 서로 다른 변수이다.

   2. 예약어를 사용할 수 없다.            -> 예약어라 함은 기존에 자바에서 쓰는 단어?를 말한다. 아까 본 변수타입(long, int 등)이나 if, for, enum과 같이 자바에서 쓰이는 단어들은 사용할 수 없다.

   3. 숫자로 시작할 수 없다.                -> num1은 되지만 1num은 사용할 수 없다.

   4. 특수문자는 '_'와 '$'만 사용 가능   -> ba$ic 가능, ba#ic은 불가능하다.


* 변수의 명명규칙(암묵적인 규칙)

   1. 클래스 이름의 첫 글자는 대문자로, 변수나 메서드 이름의 첫 글자는 소문자로 한다.   -> Class Test, public void test(), int test

   2. 여러 단어로 이루어져 있는 이름은 단어의 첫 글자를 대문자로 한다.                         -> selectTest, lastTime

   3. 상수의 이름은 모두 대문자, 여러 단어가 합쳐진 경우는 '_'로 구분                             -> MAX_RECORD, APPLE




이런 식이다. 이런건 조금 이것저것 만들다보면 금방 손에 익숙해질테니 굳이 외우려고 머리를 싸맬 필요는 없을 것 같다. 생각보다 포스팅이 길어져서 2편으로 나눠서 정리해야겠다. Git/GitHub도 공부해야하니 여기서 이번 포스팅은 이만.