본문 바로가기
[JAVA]

[처음부터 다시 하는 JAVA] 변수 타입

by 북방바다코끼리표범 2024. 1. 6.

처음부터 다시 하는 자바 공부는 인프런의 김영한 강사님의 강의를 참고해서 공부했다.

 

변수 타입1


변수는 데이터를 다루는 종류에 따라 다양한 형식이 존재한다. 

package variable; 

public class Var7 {

	public static void main(String[] args) { 
        int a = 100; //정수
        double b = 10.5; //실수
        boolean c = true; //불리언(boolean) true, false 입력 가능 
        char d = 'A'; //문자 하나
        String e = "Hello Java"; //문자열, 문자열을 다루기 위한 특별한 타입
        
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
        System.out.println(e);
	}
}

실행 결과
100
10.5
true
A
Hello Java

변수는 데이터를 다루는 종류에 따라 다양한 형식이 존재한다. 

이러한 형식을 영어로는 타입(type)이라 하고, 우리말로는 형식또는 형이라 한다. 

예를 들어서 int 타입, int 형식, int 형 등으로 부른다. 특별히 구분하지 않고 섞어서 부르기 때문에 모두 같은 말로 이해하면 된다.

 

 

  • int : 정수를 다룬다. 예) 1 , 100 , 1000
  • double : 실수를 다룬다. 예) 0.2 , 1.5 , 100.121
  • boolean : 불리언 타입이라 한다. true , false 값만 사용할 수 있다. 주로 참과 거짓을 판단하는 곳에서 사용한다.
  • char : 문자 하나를 다룰 때 사용한다. 작은따옴표( ' )를 사용해서 감싸야 한다. 예) 'A' , '가' 
  • String : 문자열을 다룬다. 큰따옴표를 사용해야 한다. 예) "hello java"
참고: String 은 첫 글자가 대문자로 시작하는 특별한 타입이다. 이 부분은 뒤에 클래스를 배워야 자세히 이해할 수 있다. 지금은 문자열을 다루는 특별한 타입이라고 이해하면 된다. String 에 대한 자세한 내용은 별도로 다룬다.

 

자신의 타입에 맞는 데이터 사용

각 변수는 지정한 타입에 맞는 값을 사용해야 한다. 예를 들어서 다음의 앞의 두 코드는 컴파일 오류가 발생한다

  • int a = "백원" : 정수 타입에 문자열(X)
  • int a = "100" : 정수 타입에 문자열(X), 이것은 숫자 100이 아니라 문자열 "100" 이다.
                       문자를 나타내는  쌍따옴표( " )로 감싸져 있다.
  • int a = 100 : 정수 타입에 정수 100(O)

리터럴

코드에서 개발자가 직접 적은 100 , 10.5 , true , 'A' , "Hello Java" 와 같은 고정된 값을 프로그래밍 용어로 
리터럴(literal)이라 한다.

int a = 100; //정수 리터럴
double b = 10.5; //실수 리터럴
boolean c = true; //불리언 리터럴
char d = 'A'; //문자 하나 리터럴
String e = "Hello Java"; //문자열 리터럴

변수의 값은 변할 수 있지만 리터럴은 개발자가 직접 입력한 고정된 값이다. 따라서 리터럴 자체는 변하지 않는다.

참고: 리터럴(literal)이라는 단어의 어원이 문자 또는 글자를 의미한다.

 

변수 타입2 


숫자 타입
이번에는 다양한 숫자 타입을 자세히 알아보자. 
바로 다음 코드를 작성해보자.

package variable;

public class Var8 {
  	public static void main(String[] args) { 
    //정수 byte b = 127; //-128 ~ 127 
    short s = 32767; // -32,768 ~ 32,767 
    int i = 2147483647; //-2,147,483,648 ~ 2,147,483,647 (약 20억) 
    
    //-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 
    long l = 9223372036854775807L; 
    
    //실수 
    float f = 10.0f; 
    double d = 10.0;
	}
}

 

메모리를 적게 사용하면 작은 숫자를 표현할 수 있고, 메모리를 많이 사용하면 큰 숫자를 표현할 수 있다. 
변수를 선언하면 표현 범위에 따라 메모리 공간을 차지한다. 그래서 필요에 맞도록 다양한 타입을 제공한다.

 

 

표현할 수 있는 숫자의 범위와 차지하는 메모리 공간은 다음과 같다. 기타 타입도 함께 정리해두었다.

  • 정수형
    • byte : -128 ~ 127 (1byte, 2⁸) 
    • short : -32,768 ~ 32,767 (2byte, 2¹⁶)
    • int : -2,147,483,648 ~ 2,147,483,647 (약 20억) (4byte, 2³²)
    • long :  -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 (8byte, 2⁶⁴)
  • 실수형
    • float : 대략 -3.4E38 ~ 3.4E38, 7자리 정밀도 (4byte, 2³²) 
    • double : 대략 -1.7E308 ~ 1.7E308, 15자리 정밀도 (8byte, 2⁶⁴)
  • 기타
    • boolean : true , false  (1byte) 
    • char : 문자 하나(2byte)
    • String : 문자열을 표현한다. 메모리 사용량은 문자 길이에 따라 동적으로 달라진다. (특별한 타입이다. 자 
      세한 내용은 뒤에서 학습한다)

리터럴 타입 지정

  • 정수 리터럴은 int 를 기본으로 사용한다. 따라서 int 범위까지 표현할 수 있다. 
    숫자가 int 범위인 약 20억을 넘어가면 L 을 붙여서 정수 리터럴을 long 으로 변경해야 한다. 
    (대문자 L , 소문자 l 모두 가능하다 그런데 소문자 l 은 숫자 1과 착각할 수 있어서 권장하지 않는다.)
  • 실수 리터럴은 기본이 double 형을 사용한다. float 형을 사용하려면 f 를 붙여서 float 형으로 지정해야 한 
    다.

변수 타입 정리

다음 타입은 실무에서 거의 사용하지 않는다.

  • byte : 표현 길이가 너무 작다. 또 자바는 기본으로 4byte( int )를 효율적으로 계산하도록 설계되어 있다.
    int 를 사용하자.
    • byte 타입을 직접 선언하고 여기에 숫자 값을 대입해서 계산하는 일은 거의 없다. 
    • 대신에 파일을 바이트 단위로 다루기 때문에 파일 전송, 파일 복사 등에 주로 사용된다.
  • short : 표현 길이가 너무 작다. 또 자바는 기본으로 4byte( int )를 효율적으로 계산하도록 설계되어 있다. 
    int 를 사용하자
  • float : 표현 길이와 정밀도가 낮다. 실수형은 double 을 사용하자.
  • char : 문자 하나를 표현하는 일은 거의 없다. 문자 하나를 표현할 때도 문자열을 사용할 수 있다. 
    • 예를 들어 String a = "b" 와 같이 사용하면 된다.
참고: 메모리 용량은 매우 저렴하다. 따라서 메모리 용량을 약간 절약하기 보다는 개발 속도나 효율에 초첨을 맞추는 것이 더 효과적이다.

 

자주 사용하는 타입

실무에서 자주 사용하는 타입은 다음과 같다

  • 정수 - int , long : 자바는 정수에 기본으로 int 를 사용한다. 만약 20억이 넘을 것 같으면 long 을 쓰면 된 
    다.
    • 파일을 다룰 때는 byte 를 사용한다.
  • 실수 - double : 실수는 고민하지 말고 double 을 쓰면 된다.
  • 불린형 - boolean : true , false 참 거짓을 표현한다. 이후 조건문에서 자주 사용된다.
  • 문자열 - String : 문자를 다룰 때는 문자 하나든 문자열이든 모두 String 을 사용하는 것이 편리하다.

 

자주 사용하는 타입을 제외하고 실무에서 나머지를 사용하는 경우는 거의 없다. 
그나마 파일 전송시에 byte 를 사용하는 것 정도이다.
따라서 자주 사용하는 타입만 이해하고 나머지는 이런게 있구나 하고 넘어가도 충분하다.

 

변수 명명 규칙

자바에서 변수의 이름을 짓는데는 규칙과 관례가 있다. 
규칙은 필수이다. 규칙을 지키지 않으면 컴파일 오류가 발생한다.
관례는 필수는 아니지만 전세계 개발자가 해당 관례를 따르기 때문에 사실상 규칙이라고 생각해도 된다.

 

규칙

  • 변수 이름은 숫자로 시작할 수 없다. (예: 1num , 1st )
    • 그러나 숫자를 이름에 포함하는 것은 가능하다 (예: myVar1 , num1 ). 
  • 이름에는 공백이 들어갈 수 없다.
  • 자바의 예약어를 변수 이름으로 사용할 수 없다. (예: int , class , public )
  • 변수 이름에는 영문자( a-z , A-Z ), 숫자( 0-9 ), 달러 기호( $ ) 또는 밑줄( _ )만 사용할 수 있다.

 

관례

  • 소문자로 시작하는 낙타 표기법
    • 변수 이름은 소문자로 시작하는 것이 일반적이다. 여러 단어로 이루어진 변수 이름의 경우, 첫 번째 단어는 
      소문자로 시작하고 그 이후의 각 단어는 대문자로 시작하는 낙타 표기법(camel case)를 사용한다. (예: 
      orderDetail , myAccount )
낙타표기법
낙타표기법(Camel Case)은 프로그래밍에서 변수, 함수, 클래스 등의 이름을 지을 때 많이 사용하는 표기법 중 하나이다. 이 표기법의 이름은 작성한 이름이 여러 단어로 구성되어 있을 때, 각 단어의 첫 글자가 대문자로 시작 하고, 이 대문자들이 낙타의 등봉처럼 보이는 것에서 유래했다. 낙타표기법을 사용하면 이름에 공백을 넣지 않고 도 여러 단어를 쉽게 구분할 수 있으므로, 변수의 이름을 이해하기 쉽게 만들어준다. 또한, 대부분의 프로그래밍 언어에서는 이름에 공백을 포함할 수 없기 때문에, 낙타표기법은 이런 제한을 우회하는 좋은 방법이다.

 

자바 언어의 관례 한번에 정리
클래스는 대문자로 시작, 나머지는 소문자로 시작

  • 자바에서 클래스 이름의 첫 글자는 대문자로 시작한다. 그리고 나머지는 모두 첫 글자를 소문자로 시작한다. 여기 
     낙타 표기법을 적용하면 된다. 이렇게 하면 모든 자바 관례를 다 외울 수 있다!
  • 예시: 클래스는 첫 글자 대문자나머지는 모두 첫 글자 소문자로 시작 + 낙타 표기법
    • 클래스: Person , OrderDetail
    • 변수를 포함한 나머지: firstName , userAccount 
  • 여기에 예외가 딱 2개 있다.
    • 상수는 모두 대문자를 사용하고 언더바로 구분한다. (상수는 뒤에서 학습)
      • USER_LIMIT
    • 패키지는 모두 소문자를 사용한다. (패키지는 뒤에서 학습)
      • org.spring.boot

 

참고: 변수 이름은 의미있고, 그 용도를 명확하게 설명해야 한다.

  • a , b : 이런 변수는 용도를 설명하지 않는다. 단순한 예제에서만 사용하는 것이 좋다. 
  • studentCount , maxScore , userAccount , orderCount : 용도를 명확하게 설명한다.