본문 바로가기
카테고리 없음

변수1 (기본자료형)

by 낭만 코딩 2024. 7. 22.
  1. 변수란
  2. 변수 선언 방법
  3. 기본자료형 종류
  4. 논리자료형
  5. 정수형
  6. 실수형

 

이번 시간에는 변수란 무엇인지, 변수의 선언하고 사용방법과 자료형 중 기본자료형의 종류에 대해 알아보겠습니다.

 

 

변수란

변수(變數, Variable)
변수란 글자 그대로 해석해보면 변하는 수, 변할 수 있는 수로 이해할 수 있습니다. 여기서 ‘수’라는 글자는 숫자의 수가 아니라 셈하다라는 뜻으로, 바둑에서 “두 수까지 내다 본다” 할 때 ‘수’자를 의미합니다.
프로그래밍에서는 “값을 담아두는 공간”으로 값이 변하거나 변할 가능성이 있으면 변수를 사용합니다. 자바에서는 반드시 변수를 사용하려면 먼저 선언을 해야 합니다. 자바 컴파일러에게 이 변수를 쓸 것이다 라고 미리 알려줘야 합니다.

 

변수 선언 방법

자바에서 변수를 선언하는 방법은

자료형 변수명;

 

변수를 선언할 때는 반드시 변수의 자료형(타입)과 변수명(이름)을 같이 써주어야 합니다. 변수의 자료형은 변수에 담을 값의 종류와 범위를 잘 고려해서 결정한 후 정의합니다. 위와 같이 변수를 선언한 후에만 사용할 수 있으며, 변수를 사용하려면 먼저 값을 저장(대입)해 주어야 합니다. 변수에 값을 대입하는 방법은 '=' 기호를 사용하여 값을 대입합니다. 변수에 처음 값을 대입하는 것을 초기화라고 한다.

변수명 = 초기값;

 

변수 선언과 초기화를 동시에 할 수도 있습니다.

자료형 변수명 = 초기값;


초기값은 변수에 담을 초기 기본값으로 프로그램 실행 중에 다른 값으로 변경될 수 있습니다. 위와 같이 변수를 선언하고, 초기화하는 코드를 작성해 봅시다.

int a;       // 변수 선언 
a = 10 ;     // 변수 초기화 

int b = 10 ; // 변수 선언과 초기화 동시에

 

위 예제 코드는 정수 자료형(int)의 a라는 변수를 선언하고, 이 변수에 초기값 10을 대입한 코드입니다. 그리고 b라는 변수는 선언과 초기화를 동시에 수행한 코드입니다.

 

변수 이름을 짓는 규칙은 아래와 같습니다.

 

  • 변수명은 알파벳(대/소문자), 숫자, 특수문자(_,$), 한글 사용 가능
  • 숫자로 시작할 수 없음
  • 공백 사용 불가
  • 대/소문자를 구분 (변수 a와 변수 A는 다른 변수)
  • 예약어(자바에서 사용주인 단어) 사용 불가
  • 의미를 부여

변수명은 숫자로 시작할 수 없으며, 알파벳과, 숫자, 그리고 특수문자는 ‘_’와 ‘$’만 사용할 수 있고, 공백이나, 예약어는 사용 못합니다. 처음에는 복잡하게 느껴지겠지만 이부분은 외우려고 하지말고, 잘못된 변수명 규칙을 사용하면 이클립스에서 바로 빨갛게 표기해주니, 걱정하지 말고 그냥 영문으로 의미를 부여해서 작성하면 됩니다. 오히려 더 중요한 부분은 변수의 이름을 만들 때 의미를 부여하라는 것입니다. 변수를 a,b,c라고만 짓게 되면 프로그램 실행 중의 코드를 보면 이 변수가 무슨 용도의 변수인지 알 수가 없습니다. 변수명은 name, email, tel 과 같이 이름만 봐도 알 수 있도록 지어주면 코드를 이해하는데 많은 도움이 된다는 것을 꼭 기억하세요.
사실 한글명도 변수명으로 사용 가능합니다. 하지만 한글은 여러 시스템의 환경에 따라 잘못 인식되는 경우가 많으니 위에서 얘기한 것처럼 영문으로 작성합시다.
자바 문법상 필수 규칙은 아니지만 개발자들 간의 암묵적인 규칙들이 몇 가지 있습니다. 자바 API(라이브러리)나, 다른 개발자들도 대부분 아래와 같은 규칙으로 이름을 짓고 있으니, 여러분들도 참고하도록 하세요.

 

1. 클래스명은 첫자를 대문자로
- String, Math...
- 변수나 메서드는 첫자를 소문자로
2. 여러 단어로 이루어진 경우 단어의 첫 글자를 대문자로(또는 ‘_’)
- lastIndexOf, parseInt, studentNumber ... : (Camel 표기법)
- 변수는 단어 사이에 ‘_’ 추가 (student_number) : (snake 표기법)
3. 상수(변하지 않는 수)는 모두 대문자로
- PI, MAX_NUMBER...

 

기본자료형 종류

자료형은 데이터 타입(Data Type)이라고도 하며, 데이터형, 자료타입 또는 그냥 타입이라고도 부릅니다. 하나의 의미를 다양한 용어로 표현하는 경우가 많으니 의미가 혼동되지 않도록 기억해 두세요.
자료형은 변수에 담을 값의 종류(형태)를 뜻하며 변수를 선언할 때 이 변수가 어떤 값이 담겨질지를 미리 판단해서 선언해야 합니다. 위 예제처럼 a라는 변수는 정수가 담겨질 것을 예상하고 int라는 자료형으로 선언한 것입니다.

자료형은 크게 기본자료형(Primitive Type)과 참조자료형(Reference Type)으로 나눠지는데, 기본자료형은 변수가 값을 직접 가지고 있는 자료형을 말하며, 변수 선언 예제에서 봤던 int가 정수를 의미하는 기본자료형 중 하나로 정수외에 실수, 문자, 논리형이 있습니다. 참조자료형은 기본자료형이 아닌 모든 자료형들은 전부 참조자료형에 해당됩니다. 배열, 클래스, 인터페이스가 참조자료형에 속합니다.

 

기본자료형 

종류 타입명 크기 범위 기본값
정수 byte 1 byte -128 ~ 127 0
short 2 byte -32768 ~ 32767 0
int 4 byte -2147483648 ~ 2147483647 0
long 8 byte -9223372036854775808
~ 9223372036854775807
0
char 2 byte 0 ~ 65,535 \u0000
실수 float 4 byte -3.4028235E38 ~ 3.4028235E38 0.0
double 8 byte -1.7976931348623157E308
~1.7976931348623157E308
0.0
논리 boolean 1 byte true 또는 false false

 

기본 자료형은 위 표에서 보듯이 총 8가지가 존재합니다. 크게 정수/실수/논리형으로 나눠지는데 각 종류별로 크기에 따라 여러 타입으로 나눠지는 것을 볼 수 있습니다. 처음부터 모든 자료형을 다 외우면 좋겠지만, 우선은 4가지만 기억해 두시면 됩니다.

 

값이 정수면 일단 int 타입으로,
값이 21억이 넘으면 더 긴 자료형이 필요하니까 long 타입으로,
소수점이 있으면 double 타입,
true/false
boolean 타입

 

기본자료형에 대해 한마디로 정리한 것입니다. 물론 모든 자료형이 필요할 때가 있고, 값의 크기에 맞는 자료형을 사용하는 것이 맞지만, 요즘은 메모리 크기가 워낙 커져서 예전처럼 저장공간 크기에 크게 민감하게 생각하지 않아도 됩니다. 또한, 프로그램 운영 중에 값의 변화로 예상치 못한 큰 값이 들어오는 경우 에러가 발생하는 것보다 약간은 넉넉하게 지정하는 것이 좋습니다. 실제 실무에서도 0이나 1을 저장하는 경우라도 byte 타입을 쓰지 않고, int를 사용하는 경우가 많습니다. 즉 사용빈도 면에서도 위 4가지가 월등히 높으니 우선 4가지만이라도 확실히 기억하세요.

 

논리자료형

논리형 자료형에 해당하는 타입은 boolean인데, boolean 자료형 변수에는 true 아니면 false 둘 중 하나만 대입할 수 있고, 기본값은 false입니다, 기본값이란 초기값을 대입하지 않으면 기본적으로 갖게 되는 값입니다. 값의 종류는 true/false 밖에 없으며 메모리 크기는 1바이트 입니다. boolean 변수를 선언할 때는 아래와 같이 선언합니다.

boolean run = true ;

 

위 코드는 boolean 자료형의 run이라는 변수를 선언하고, true라는 값으로 초기화한 것입니. 주의할 점은 true 가 모두 소문자라는 것입니다. TRUE, True라고 적으면 에러가 나게 됩니다.

 

정수형

정수형 중 byte, short, int, long에 대해 알아보고 char 자료형은 뒤에서 다시 알아보도록 하겠습니다. 정수형 중 byte, short, int, long 자료형은 값의 범위가 나열한 순서대로 2배씩 증가하는데, byte는 이름 그대로 1byte, short2byte, int4byte, long8byte의 범위를 갖습니다. 앞에서도 얘기했지만, 작은 범위의 자료형을 사용하면 메모리를 절약할 수 있는 장점은 있지만, 대부분 int로 사용하기 때문에 int의 범위 21억이 넘어가는 값을 담아야하는 경우에만 long으로 선언하고 그렇지 않으면 int로만 사용하면 됩니다. 자바는 내부적으로 연산을 처리할 때 4 byte단위로 처리하기 때문에 byteshort 자료형의 값도 저장공간은 작지만 연산할 때, 4 byte로 변환되기 때문에 int로 선언하는 것이 별도의 변환이 필요없어져 더 효율적인 부분이 있습니다. 하지만 무엇보다 처음 배울 때 많은 것들을 한번에 학습하기 어려우니 정수형 타입 중 int만 확실히 기억하고, 더 긴(long)게 필요하다 그러면 long 타입을 사용하면 됩니다.

정수형 타입의 변수를 선언하고 초기화하는 방법은 아래와 같습니다.

byte b = 1;
short s = 10;
int i = 100;
long l = 1000;
long l2 = 1000L;

 

위 코드 중 l2라는 long타입의 변수는 1000이라는 값 뒤에 ‘L’이 붙어 있는데 이것은 long자료형이다라고 표시해둔 것입니다. 이렇게 리터럴 값 뒤에 ‘L’ 또는 ‘l’ 을 붙이면 long자료형이라는 것을 알 수 있긴 하지만, 붙여도 되고, 붙이지 않아도 상관없습니다. 주의할 부분은 소문자 ‘l’로 쓰게 되면 숫자 1로 혼동 되는 경우가 있으니, 대문자 ‘L’로 쓰거나 차라리 쓰지 않는 편이 나을 수도 있습니다.

 

char 자료형

char 자료형을 정수형으로 분류하긴 했지만, 문자형으로 분류하는 경우도 있습니다. 정수형처럼 연산이 가능한데, 이유는 내부적으로 문자에 해당하는 코드를 정수로 저장하고 있기 때문입니다. 겉으로 보면 문자를 저장하는 것처럼 보이지만, 실제로는 정수값이 저장됩니다. 그래서 char자료형을 문자형으로 나누기도하고, 정수형으로 나누기도 하는 것입니다. 여기서는 뒤에서 배울 문자열 자료형과 혼동되는 것을 방지하기 위해 정수형으로 분류했습니다.

char 자료형 변수는 홑따옴표(’)를 사용해서 값을 대입하거나 문자에 해당하는 코드 값을 대입합니다. , 대문자 A65, 소문자 a97 그리고 다음 문자들은 이 정수값에서 1씩 증가시키면 됩니다.

다음 예제를 실행해보면서 char 자료형을 살펴보겠습니다.

public class CharType {

	public static void main(String[] args) {
		
		char a = 'A';
		
		System.out.println("a:"+a);
		
		int b = a;
		System.out.println("b:"+b);
		
		char c = 66;
		System.out.println("c:"+c);
		
		int d = a+b; // 65 + 65
		System.out.println("d:"+d);

	}

}

 

실행결

a:A
b:65
c:B
d:130

 

char 자료형 변수는 하나의 문자만 대입할 수 있고, 만약 여러 문자를 대입하려면 String이라는 클래스를 사용해야 합니다.

char c = ‘Hello’; // 에러
String str = “Hello”; // 가능

 

문자열(여러 문자)에 대한 부분은 뒤에서 참조자료형 부분에서 다시 다뤄 보겠습니다.

 

실수형

실수 자료형은 floatdouble 두 가지가 있는데, 소수점이 있는 수를 저장할 때 사용합니다. float의 크기는 4byte, double은 이름 그대로 두 배이기 때문에 8byte를 사용합니다.

public class FloatDoubleEx {

	public static void main(String[] args) {
		
		float f = 3.141592653589793f;
		double d = 3.141592653589793d;
		
		System.out.println("float : "+f);
		System.out.println("double : "+d);
		
		double d2 = 3.141592653589793; // d 생략가능
		System.out.println("double : "+d2);
	}

}

 

실행결과

float : 3.1415927
double : 3.141592653589793
double : 3.141592653589793

 

floatdouble 변수의 값 뒤에 fdFD를 사용해도 되고, 변수 d2처럼 double 자료형은 dD를 생략할 수 있습니다. 정수형 int가 연산 시 기본적으로 처리되는 자료형이었던 것과 마찬가지로 실수형에서는 double 자료형이 기본으로 처리되는 자료형입니다. 그래서 실수값에 기호를 넣지 않으면 double 자료형으로 처리 됩니다. 따라서 소수점이 있다 그러면 double로 선언하는 것이 편합니다.