8 min read

<Java> 변수 1

<Java> 변수 1
  • 실제로 개발을 하면서 우리는 수많은 변수들을 아무렇지 않게 사용합니다. 우리에게 너무나 익숙한 변수에 대해 정의를 내리고 포스팅하는게 아이러니하다는 기분도 듭니다.
  • 하지만 글을 쓰기로 맘 먹고 책을 다시 보니 놓치고 간 디테일한 부분들이 가장 많은 부분이 아니였나 생각합니다.
  • 다시는 자바 기본서를 보지 않는다는 다짐으로 디테일한 부분까지 모두 포스팅해보겠습니다.
  • 해당 주제는 총 2편의 포스팅이 예정되어 있습니다.

변수란?

  • 기본적인 변수의 의미라 함은 variable이라는 뜻을 통해 유추가 가능합니다. 하지만 좀더 프로그래밍적인 관점에서 변수를 바라보면 다음과 같은 정의를 내릴 수 있습니다.
단 하나의 값을 저장할 수 있는 메모리 공간
  • 위의 정의는 코드로도 설명이 가능합니다.
  • 아래의 x라는 사용자가 지정한 변수는 현재 5라는 값을 담고 있다라고 볼 수 있습니다. 이 말인 즉슨, 우리가 알고 있는 실제 메모리에 x라는 이름을 붙여 일정 크기의 공간을 할당하였고, 이러한 공간안에 사용자가 원하는 수인 5를 넣어준것입니다.
int x = 5;
  • 여기서 5라는 숫자는 언제든 바뀔 수 있지만, x라는 공간은 할당을 해제하기 전까지는 사라지지 않습니다.
  • 또한 x 앞에 붙는 int라는 keyword는 어떠한 종류의 정보를 담을지 결정하는 그릇이라고 이해하면 됩니다.
  • 실생활에서 국을 담는 그릇, 밥을 담는 그릇, 반찬을 담는 그릇 등 다양한 모양와 크기가 존재합니다. 이처럼 변수를 사용할때도, 사용할 변수의 종류(정수형,소수형,문자형 등등…)에 따라 담는 그릇을 달리 해줘야 한다고 이해하면 좋습니다.
  • 이제 변수가 무엇인지 알았으니, 변수를 어떻게 하면 사용 할 수 있는지 알아봅니다.

변수의 선언와 초기화

  • 앞서 언급되었던 변수를 사용하기 위해서는 두가지 단계를 거쳐야합니다.
  • 우선 변수를 선언하고, 이후 변수를 초기화 하는 단계를 거치면 사용 할 수 있습니다.
  • 위의 보이는 코드는 아래와 처럼 분리 가능합니다.
int x; //x 라는 이름의 변수의 선언
x = 5; //해당 변수의 초기화
  • 변수의 선언 부분은 크게 변수타입변수이름으로 나누어집니다.
  • 변수타입은 앞서 말한 어떤 종류의 데이터를 담을지 결정하는 그릇의 역할을 하고, 변수이름은 우리가 할당한 메모리 공간에 이름을 붙여주는 것입니다.즉, 붙여진 이름을 통해 해당 공간에 값은 load하거나 store합니다.또한 변수이름의 경우 개발자가 본인 또는 협업하는 동료들이 이해하기 쉬운 이름으로 명명하면 됩니다.(자바 문법 규칙과 convention에 따라 명명하면 됩니다.)
  • 변수를 선언한 이후부터는 변수를 사용할 수 있으나, 그 전에 반드시 변수를 초기화해야 합니다. 이러한 동작을 수행하는 이유는 현재 선언한 변수의 메모리 공간은 여러 프로그램이 공유하는 자원이므로 전의 다른 프로그램에 의해 알 수 없는 값(보통 쓰레기값 = garbage라 합니다)이 남아 있을 수 있기 때문입니다.
  • 위의 내용을 시각적으로 설명하겠습니다. 아래 그림처럼 int x가 현재 할당받은 공간은 그 전에 다른 프로그램이 사용한 공간일 것입니다. 그래서 전에 사용하던 값을 없애줘야 현재 프로그램에 영향을 미치지 않기에 우리는 초기화라는 작업을 수행해줘야합니다.
  • 이제 변수를 초기화하는 법을 알아보겠습니다. 우리가 흔히 수학 시간에 많이 사용했던 =연산자를 사용하면 됩니다.다만 수학 수식의 =과 모양만 같을 뿐 의미는 다릅니다. 프로그래밍 언어에서는 해당 연산자의 이름은 대입연산자입니다. 그리고 오른쪽의 값을 왼쪽에 저장하라는 명령어입니다. 즉 x = 5는 5라는 정수를 x라는 이름을 가진 공간에 저장시키는 동작을 수행합니다.
  • 이제 아래 예제 코드를 통해 변수를 직접 선언하고 초기화해보겠습니다.
public class VarEx1 {
    public static void main(String[] args) {
        int year = 0; // 선언과 초기화 동시에 진행
        int age = 14;

        System.out.println(year); //console에 출력
        System.out.println(age);

        year = age + 2000; // 할당한 변수의 값 변경
        age = age + 1;

        System.out.println(year);
        System.out.println(age);
    }
}

두 변수의 값 교환하기(swap)

  • 아마 어떤 언어를 진행하든 가장 처음 접하는 알고리즘이라고 볼 수 있습니다.
  • 아래 예제를 통해 이해해봅시다.
public class VarEx2 {
    public static void main(String[] args) {
        int x = 10, y = 11;
        int tmp = 0;

        System.out.println("x = " + x);
        System.out.println("y = " + y);

        tmp = x;
        x = y;
        y = tmp;

        System.out.println("x = " + x);
        System.out.println("y = " + y);
    }
}
  • tmp라는 하나의 공간을 추가로 생성하고, 해당 공간에 값을 저장시킨뒤, 각각 swap을 진행해주면 됩니다.
  • 실생활에 빗대어 설명하자면 두개의 컵에 있는 물을 옮기고 싶을때, 하나의 여분 컵을 가져와서 옮겨놓은 뒤 원래 옮기려고 한 컵들의 물을 옮기는 것과 동일합니다.

변수의 명명 규칙

  • 앞서 변수의 선언 부분에서 Rule과 Convention에 의해 명명하면 된다고 했는데, 그러한 Rule에 대해 알아보겠습니다.
  1. 대소문자가 구분되며 길이에 제한이 없다.
  2. 예약어를 사용해서는 안 된다.
  3. 숫자로 시작해도 안 된다.
  4. 특수문자는 와 $만 허용된다.
  • 언급된 예약어라 함은 위의 코드에서 사용된 class, public, static, void,String 등 자바 문법 자체를 나타내는 용어들이라고 이해하면 됩니다.
  • 아래의 그림을 Java 예약어 모음이니 참고하시면 됩니다.
  • 두번째로 변수 명명 시의 Convention에 대해 알아보겠습니다.
  1. 클래스의 이름 중 첫 글자는 항상 대문자로 한다.
  2. 여러 단어로 이루어진 이름은 각 단어의 첫번째 문자를 대문자로 표기한다.
  3. 상수의 이름은 모두 대문자로 한다. 여러 단어로 구성될 경우 언더바로 구분한다.
  • 2번째 사항은 흔히 Camel Case라고 부르기도 하는데, 아래와 같이 적용시키면 된다.
int sumOfValue;
String userName;
String customerAddress;
  • 변수는 길이를 짧게 하는것에 초점을 두기 보다는 다른 사람이 내가 만든 변수를 읽었을 때, 이해하기 쉽게 명명하는것이 가장 중요한 포인트입니다.

Ref : 자바의 정석 - 남궁성