[Java 기초] 3. 자바의 변수와 명명법 (기본편)

Kyung Jae, Cheong·2024년 8월 11일
1
post-thumbnail
  • 최대한 기초가 거의 없는 분들의 입장에서 정리해본 내용이므로, 어려운 개념들은 가급적 포함시키지 않거나 최대한 간단하게만 표현하였습니다.
  • Java 세팅 및 실습은 Windows 환경에서 IntelliJ를 통해 진행되었습니다.
  • (참고) IntelliJ 코드 실행 단축키
    • Windows, Linux : Shift+F10
    • MacOS : Ctrl+R

3. Java 변수(Variables)

3-1. 변수(Variables)

  • 변수 : 말그대로 "변할 수 있는 수"를 의미하며, 정해지지 않은 임의의 값이나 함수 등을 표현하기 위해 사용되는 일종의 저장소입니다.
    • 쉽게 말해 데이터를 담을 수 있는 메모리 그릇을 의미합니다.
  • 변수 사용 예시

VariablePractice1.java

package variables;

public class VariablePractice1 {
    public static void main(String[] args) {
        // 변수를 활용하지 않은 경우
        System.out.println(20);
        System.out.println(40);

        System.out.println("-----------------------");

        // 변수를 활용하는 예시
        int v;      // 변수 선언
        v = 20;   // 변수 초기화
        System.out.println(v);
        System.out.println(v + v);

        System.out.println("-----------------------");
        v = 30;   // 변수 변경
        System.out.println(v);
        System.out.println(v + v);
    }
}

VariablePractice1.class

20
40
-----------------------
20
40
-----------------------
30
60
  • 위 예시처럼 변수를 활용하면 값을 하나하나 수정 할 필요 없이 변수 값만 수정할 수 있어 보다 효율적인 프로그래밍이 가능합니다.
  • 이처럼 어딘가(컴퓨터 메모리)에 값을 보관해두고 필요할 때 값을 꺼내서 읽을 수 있는 저장소를 변수라 합니다.

변수의 선언과 초기화

  • Java에서 변수를 활용하기 위해선 변수의 타입(형태)를 지정하여 컴퓨터의 메모리 공간을 확보해야합니다. 또한 변수의 이름을 지정함으로써 해당 메모리 공간에 접근할 수 있도록 해줘야합니다. 이러한 과정을 변수를 선언한다라고 표현하게 됩니다.
  • 이렇게 선언하여 메모리 공간을 확보한 변수에 적어도 한번은 값을 저장해야 다른 곳에서 이러한 변수를 활용을 할 수 있게 됩니다. 이처럼 선언한 변수에 처음으로 값을 저장하는 것을 변수를 초기화한다라고 표현하게 됩니다.
    • 변수 = 값; : 연산자 =를 통해서 오른쪽의 값을 왼쪽의 변수에 저장(혹은 덮어쓰기)한다는 뜻이고 값을 대입한다라고 표현하기도 합니다. 연산자를 다룰때 다시 정리할 예정입니다.
  • 변수를 선언하고 초기화하는 방법은 크게 두가지 방법이 있습니다.
    • 방법1. 변수를 선언 -> 변수를 초기화
    • 방법2. 변수 선언과 초기화를 한번에 수행

VariablePractice2.java

package variables;

public class VariablePractice2 {
    public static void main(String[] args) {
        
        // 1. 변수 선언 -> 변수 초기화
        
        int a; // 변수 선언
        double b, c; // 여러 변수 선언

        a = 100;  // 변수 초기화
        b = 10.5; // 변수 초기화
        c = 15.3; // 변수 초기화
        
        System.out.println("a = " + a);
        System.out.println("b = " + b);
        System.out.println("c = " + c);
        
        // 2. 변수 선언 & 초기화
        
        int d = 200;
        double e = 22.2, f = 33.3;

        System.out.println("d = " + d);
        System.out.println("e = " + e);
        System.out.println("f = " + f);
    }
}

VariablePractice2.class

a = 100
b = 10.5
c = 15.3
d = 200
e = 22.2
f = 33.3
  • 위 코드처럼 변수를 먼저 선언하고 초기화를 나중에 할 수 있습니다.
    • 선언은 두개 이상의 변수를 콤마,로 구분하여 한번에 선언할 수 있지만, 초기화는 같은 방법으로는 한번에 할 순 없습니다.
    • 이때 주의할 점은 선언을 하고서 초기화를 해주지 않은채로 변수를 불러오는 경우 에러가 발생하게 됩니다. 어떠한 값이 저장되어 있는지 알수 없기 때문에 이런 문제를 예방하기위해서 Java에서는 변수를 반드시 초기화하도록 강제합니다.
  • 또한 변수의 선언과 초기화를 동시에 수행 할 수 있습니다.
    • 두개 이상의 변수를 콤마,로 구분하여 한번에 선언하고 초기화 할 수 있습니다.

변수 타입(형식)의 종류

  • Java, C계열, Swift, Kotlin, 등의 정적 타입 언어(Statically Typed Language)에서는 변수를 정의할 때 반드시 변수의 타입을 명시해주어야합니다. 이는 변수의 타입을 명시함으로써 변수에 맞는 메모리를 확보하여 최적화를 실시하는 과정이라서 상당히 중요합니다.
    • JavaScript, Python, 등의 동적 타입 언어(Dynamically Typed Language)에서는 이러한 변수 지정이 필요하진 않고 변수가 할당(초기화) 될때 타입이 결정됩니다. 이런 방식은 프로그래밍을 더 유연하게 할 수 있게 하지만, 메모리 관리나 성능 면에서는 상대적으로 비효율적입니다.
  • 변수 타입의 종류로는 기본 데이터 타입 (Primitive Data Types)과 참조 데이터 타입 (Reference Data Types) 두가지로 분류됩니다.

기본 데이터 타입(Primitive Data Types)

  • 기본 데이터 타입은 자바에서 가장 단순한 데이터 유형으로, 메모리에 값 자체가 저장됩니다. 자바에는 8가지 기본 데이터 타입이 있습니다.
타입(Type)메모리 크기값의 범위예시설명
byte1 byte (8 bit)-128 ~ 127byte age = 25;작은정수 및 파일크기 표현
short2 byte (16 bit)-32,768 ~ 32,767short year = 2024;byte보다 큰 정수
int4 byte (32 bit)-2^31 ~ 2^31-1int x = 2147483647;일반적인 정수 [정수 기본 단위]
long8 byte (64bit)-2^63 ~ 2^63-1long x = 2147483648L;약 20억 이상의 큰 정수 (뒤에 L 붙음)
float4 byte (32bit)-3.4E38 ~ 3.4E38float pi = 3.14f;낮은 정밀도의 실수 (뒤에 f 붙음)
double8 byte (64bit)-1.7E308 ~ 1.7E308double price = 19.99;일반적인 실수 [실수 기본 단위]
char2 byte (16bit)0 ~ 65,535(문자 하나)char grade = 'A'단일 문자를 표현 (16bit 유니코드)
boolean1 bit or 1 bytetrue(1) 또는 false(0)boolean isFun = true;참/거짓을 표현할때 사용

참조형 데이터 타입(Reference Data Types)

  • 참조 데이터 타입은 객체에 대한 참조(레퍼런스)를 저장합니다. 참조 타입 변수는 객체의 메모리 주소를 저장하며, 실제 데이터는 힙(Heap)이라는 영역에 저장됩니다.
  • 지금은 이런게 있구나 정도로 넘어가시길...
타입(Type)설명예시
클래스클래스 객체의 청사진(blueprint)String name = "Alice";
배열동일한 타입의 데이터를 순차적으로 저장하는 자료 구조int[] scores = {90,85,100}
인터페이스클래스가 구현해야 하는 메서드의 집합을 정의
열거형열거된 상수의 집합을 정의
  • 참조형 변수에서 중요하게 알아야할 것은 클래스 타입 중 String, Scanner, 그리고 배열(array)이고, Scanner는 이후에 따로 포스팅 예정입니다.
    • String은 문자열을 담을 때 주로 쓰입니다. 기본형 데이터 타입의 char는 단일문자만 담을 수 있어서 거의 쓰이진 않기 때문에, 어떻게 보면 문자열의 기본타입은 String이라 보시면 됩니다.
      • 주의할 점은 String의 문자열은 반드시 큰따옴표"로 묶여야합니다. 참고로 char는 작은 따옴표 '로 묶어서 사용합니다.
      • 또한 단일 문자를 쓰더라도 String oneChar = "A"이런 식으로 쓰시는 것이 더 났습니다.

저 많은걸 다 외우고 써야하나요?

  • 솔직히 실무에서는 저렇게 다양하고 많은 타입들을 모두 활용하지는 않습니다. 최근들어서는 컴퓨팅 성능이 워낙 좋아지고 고용량 메모리 가격도 상당히 싸졌기 때문에, 메모리를 조금 더 차지한다고해서 성능에 유의미한 차이가 나타나진 않기 때문입니다.
    • 즉, 자료 타입을 고민할 시간에 다른 구조적인 문제를 개선하는 편이 훨씬 효율적입니다.
  • 따라서 자료 형태에 따라 다음과 같이 쓰는 것을 추천드립니다.
자료 형태추천 데이터 Type주의사항
정수(20억 이하)int
정수(20억 이상)long반드시 뒤에 L을 붙이기(l은 1과 햇갈리므로 비추)
실수double
논리형booleantrue, false는 반드시 소문자로!
문자String반드시 큰따옴표(") 사용!

VariablePractice3.java

package variables;

public class VariablePractice3 {
    public static void main(String[] args) {
        // 1. 정수형
        byte age = 25; // byte : -128 ~ 127
        short year = 2024; // short : -32,768 ~ 32,767
        int i = 2147483647; // int : -2,147,483,648 ~ 2,147,483,647
        long l = 2147483648L; // long : -2^63 ~ 2^63-1

        // 2. 실수형
        float pi = 3.14f; // float : 1.4E-45 ~ 3.4E38
        double d_pi = 3.14159265358979323846; // double : 4.9E-324 ~ 1.8E308

        // 3. 논리형
        boolean isFun = true; // boolean : true, false

        // 4. 문자형
        char c = 'A'; // char : 0 ~ 65535
        String str = "Hello, World!";

        System.out.println("(byte) age = " + age);
        System.out.println("(short) year = " + year);
        System.out.println("(int) i = " + i);
        System.out.println("(long) l = " + l);

        System.out.println("-----------------------");
        System.out.println("(float) pi = " + pi);
        System.out.println("(double) d_pi = " + d_pi);

        System.out.println("-----------------------");
        System.out.println("(boolean) isFun = " + isFun);

        System.out.println("-----------------------");
        System.out.println("(char) c = " + c);
        System.out.println("(String) str = " + str);

    }
}

VariablePractice3.class

(byte) age = 25
(short) year = 2024
(int) i = 2147483647
(long) l = 2147483648
-----------------------
(float) pi = 3.14
(double) d_pi = 3.141592653589793
-----------------------
(boolean) isFun = true
-----------------------
(char) c = A
(String) str = Hello, World!

3-2. 명명법(변수, 클래스, 패키지, 상수)

  • Java에서는 변수의 이름을 짓는것에 대한 규칙과 관례가 있습니다.
    • 규칙은 반드시 지켜야하고, 지키지 않으면 오류가 발생합니다.
    • 관례는 오류가 발생하는 것은 아니지만 전세계 모든 개발자가 따르는 일종의 규칙입니다.

명명법 규칙

  1. 시작을 숫자로 할 수 없다.
    • 1var처럼 숫자로 시작하면 오류가 발생합니다.
    • var1처럼 뒤에 붙는 것은 가능합니다.
  2. 공백이 들어갈 수 없다.
    • 이름 중간에 공백이 들어가면 오류가 발생합니다.
  3. 자바의 예약어를 변수 이름으로 쓸 수 없다.
    • int, class 와 같이 특별한 기능을 가진 문자들은 사용할 수 없습니다.
    • 앞이나 뒤에 문자를 추가하는 것은 가능합니다.
  4. 영문자(a-z, A-Z), 숫자(0-9), 달러기호($), 밑줄(_)만 사용가능하다.

명명법 관례(권고사항)

  • 먼저 여러단어가 조합되는 경우에 주로 쓰이는 표기법에 관해 정리해볼 필요가 있습니다. 대표적인 표기법은 두가지 정도가 있습니다.
    • 카멜 표기법 : 낙타 모양을 의미하고, 각 단어의 첫문자를 대문자로 구분짓는 방법입니다.
    • 스네이크 표기법 : 뱀 모양을 의미하고, 각 단어 사이에 언더바_로 구분짓는 방법입니다.
  • 모든 경우에 표기법에 관한 관례가 있진 않고, 쉽게 세가지 정도의 예외 사항만 알아두시고 나머지 경우에 대해서만 알고 넘어가시면 될 듯합니다.
    • 클래스(Class) : 첫글자는 대문자로 시작한다.
      • 앞서 만든 파일을 의미한다 보시면 되고, 첫글자는 대문자로 시작하고 그뒤론 소문자를 쓰는 것이 관례입니다.
      • 카멜 표기법으로 단어들을 구분합니다. (첫글자가 대문자로 시작하는 카멜 표기법을 파스칼 표기법이라 부르기도 합니다.)
      • 예시 : Person, AccountDetail
      • (참고) 인터페이스 명도 이러한 관례를 따릅니다.
    • 패키지(package) : 전부 소문자를 사용한다.
      • 앞서 만든 폴더를 의미한다 보시면 되고, 모든 문자를 소문자로 쓰는 것이 관례입니다.
      • 카멜 표기법 및 스네이크 표기법이 쓰이지 않는 것이 특징입니다.
      • 예시 : variables, projectname
      • (참고) 일부 파일명이나 데이터베이스 필드명에서는 소문자 스네이크 표기법이 사용되기도 합니다.
    • 상수(constant) : 전부 대문자를 사용한다.
      • 변하지 않는 고정된 수를 의미하는 상수입니다. 모든 문자를 대문자로 사용하는 것이 관례입니다.
      • 스네이크 표기법으로 단어들을 구분합니다.
      • 예시 : MAX_SIZE, DEFAULT_TIMEOUT
    • 그외 (변수, 메서드, 등) : 첫글자는 소문자로 시작하고, 그 뒤론 카멜 표기법을 따른다.
      • 클래스 표기법에서 앞글자만 소문자로 만든다고 이해하시면 편합니다.
      • 예시 : studentName, calulateSum()
  • 표로 정리하면 다음과 같습니다.
사용 위치명명 규칙표기법예시
상수모두 "대문자"스네이크 [ _ ]MAX_SIZE, DEFAULT_TIMEOUT
패키지모두 "소문자"해당없음com.example.projectname
클래스, 인터페이스첫글자 "대문자"카멜 [대문자]StudentDetails, Runnable
그외(변수,메서드,등)첫글자 "소문자"카멜 [대문자]studentName, calculateSum()

마무리

  • 본 포스팅에서는 자바에서 쓰이는 주요 변수들과 명명법에 대해서 다루어 보았습니다.
  • 이후엔 자바에서 많이 쓰이는 연산자에 대해 정리해보도록 하겠습니다 !
profile
일 때문에 포스팅은 잠시 쉬어요 ㅠ 바쁘다 바빠 모두들 화이팅! // Machine Learning (AI) Engineer & BackEnd Engineer (Entry)

0개의 댓글