Language/Java

[JAVA] 2. 변수(Variable)

리져니 2021. 6. 29. 18:48

변수

데이터(자료)를 임시로 담을 수 있는 상자(메모리 공간)

 

변수선언

변수를 사용하려면 먼저 변수를 선언해야 한다

변수 선언 방법

- 변수 타입: 변수에 저장될 값이 어떤 '타입(type)'인지 지정

- 변수 이름: 변수에 붙인 이름 (메모리 공간에 이름을 붙여 주는것)

- 변수의 초기화: 변수를 선언한 이후로 변수를사용할수 있지만 그 전에 반드시 초기화를 해야한다(다른 프로그램에 의해 알 수없는 쓰레기값이 남아있을 수 있기 때문)

 

변수 명명 규칙

1. 대소문자가 구분되며 길이에 제한이 없다.

2. 예약어를 사용해서는 안된다.

3. 숫자로 시작해서는 안된다.

4. 특수 문자는 '_'와 '$'만 허룔한다.

 

변수의 타입

기본형과 참조형

기본형 변수: 실제 값을 저장

  1 byte 2 byte 4 byte 8 byte
논리형 boolean      
문자형   char    
정수형 byte short int long
실수형     float double

   * 문자형인 char는 문자를 내부적으로 정수(유니코드) 저장한다, 떄문에 정수형/실수형과 연산 가능함 

         만약 어떤 문자의 유니코드를 알고 싶으면, char형 변 수에 저장된 값을 정수형(int)으로 반환 하면 된다.

         ex) int code = (int)ch;

   * 정수형(byte, short, int, long)의 경우 -2^(n1-) ~ 2^(n-2)-1 (n=bit수)의 범위를 갖는다

   * int는 CPU가 가장 효율적으로 처리할 수 있는 타입이다  

   * 메모리를 절약하려면 int 보단 byte나 short 사용

   

참조형 변수: 어떤 값이 저장되어 있는 주소를 값으로 가짐  

- 객체의 주소를 저장한다

- Java는 참조형 변수 간의 연산을 할 수 없음으로 실제 연산에 사용되는 것은 모두 기본형 변수

- 참조형 변수를 선언할 때 변수의 타입으로 클래스의 이름을 사용함으로 클래스의 이름이 참조변수의 타입이됨

  ( 변수의 타입이 기본형이 아닌 것들은 모두 참조 변수)

- 객체를 생성하는 new 연산자의 결과는 생성된 객체의 주소이다

 

Date today = new Date();  //Date 객체를 생성해서, 그 주소를 today에 저장

 

상수와 리터럴

상수(constant)는 변수와 마찬가지로 '값'을 저장할 수 있는 공간'이지만 변수와 달리 한번 값을 저장하면 다른 값으로 변경할 수 없다.

상수 선언 방법은 변수의 타입 앞에 키워드 'final'만 붙여주면 된다. 또한, 반드시 선언과 동시에 초기화 해야한다.

ex) final int MAX_SPEED = 10;

 

원래 값(123, 'A', '3.14)들은 '상수'라고 하는데, 상수를 위와같이 정의했기 때문에, 다른 이름인 '리터럴(literal)'이라는 용어를 사용한다.

 

리터럴의 타입과 접미사

종류 접미사
논리형 없음
정수형 L
실수형 f, d
문자형 없음
문자열 없음

정수형과  실수형에는 여러 타입이 존재하므로, 리터럴에 접미사를 붙여서 타입을 구분한다.

long big =100_000_000_000L; // 1000000000000L;
float pi = 3.14f;
double rate = 1.618d;
float 3.14; // error, float타입 변수에 double타입 리터럴 저장 불가
double 1.68; // ok, 접미사 d 생략 가능

 * 3.14에 접미사가 붙지 않았으므로 double타입으로 간주된다. 그래서 3.14가 float타입의 범위에 속한 값임에도 불구하고 컴파일 시에 애러가 발생한다.

 * 리터럴의 값이 변수 타입의 범위를 넘어서거나, 리터럴의 타입이 변수 타입보다 저장범위가 넓으면 컴파일 애러가 발생한다.

 

출력문(printf())

* 줄바꿈을 사용하려면 println()함수 사용, printf()에서의 줄바꿈 사용은 출력할 문장의 마지막에 %n을 붙여주면 된다.

  ex) System.out.printf("age: %d%n", age);

지시자 설명
%b boolean 형식으로 출력
%d 10진(decimal)정수의 형식으로 출력
%o 8진(octal) 정수의 형식으로 출력
%x, %X 16진(hexa) 정수의 형식으로 출력
%f 부동 소수점(floating point) 형식으로 출력
%e, %E 지수(exponent) 표현식의 형식으로 출력
%c 문자(character)로 출력
%s 문자열(string)로 출력

* 지시자 %x와 %o앞에 "#"를 붙이면 접두사 '0x'와 '0'이 각각 붙는다. 그리고 '%X'는 16진수에 사용되는 접두사와 영문자를 대문자로 출력한다. 

System.out.printf("hex = %x%n", hex); // hex = ffffffff
System.out.printf("hex = %#x%n", hex); // hex = 0xffffffff
System.out.printf("hex = %#X%n", hex); // hex = 0Xffffffff

 

10진수를 2진수로 출력해주는 지시자는 없기 때문에, 정수를 2진 문자열로 변환해주는 Integer.toBinaryString(int i)를 사용해야 한다.

Sytem.out.print("binNum = %s%n", Integer.toBinaryString(binNum);

 

'%f'는 전체 자리수와 소수점 아래의 자리수를 지정할 수 있다.

System.out.printf("d = %14.10f%n", d); // 전체 14자리 중 소수점 아래 10자리

 

'%s'에도 숫자를 추가하면 원하는 만큼의 출력공간을 확보하거나 문자열의 일부만 출력할 수 있다.

System.out.printf("%20s%n", url);  //최소 20글자 출력공간 확보 (우측 정렬)
System.out.printf("%-20s%n", url); //최소 20글자 출력공간 확보 (좌측 정렬)
System.out.printf("%.8s%n", url);  //왼쪽에서 8글자만 출력

 

 

728x90

'Language > Java' 카테고리의 다른 글

4.1 객체 지향 프로그래밍 (클래스와 객체)  (0) 2021.07.06
문자열 함수 종류  (0) 2021.07.05
3. 연산자  (1) 2021.07.01
[JAVA] 1. 자바 프로그램 작성  (0) 2021.06.29
[JAVA] 0. 자바 기초 ( OOP, JDK, JRE, JVM)  (0) 2021.06.29