본문 바로가기

내일배움캠프/Today I Learned

[내배캠] 나의 스물두번째 회고록

2. 변수, 변수의 Type

* 변수란?

- 변수는 하나의 값을 저장할 수 있는 메모리 번지에 붙여진 이름이며, 변수를 통해 프로그램은 메모리 번지에 값을 저장하고 읽을 수 있다. 

 

* 변수 명명규칙 

- 변수 이름은 첫번째 글자가 문자여야 하며, 중간부터는 문자, 숫자, $, _를 포함할 수 있다. 

- 첫번째 문자를 소문자로 시작하되 캐멀 스타일로 작성하는 것이 관례이다. 

 

* Camel스타일

- 코드를 작성할 때 여러단어를 혼합하여 명명하는 경우, 낙타의 등 처럼 대소문자가 섞여있도록 작성하는 스타일

- 자바 소스 파일명(클래스명)은 대문자로 시작하는 것이 관례

- 변수명은 소문자로 시작하는 것이 관례

 

* 변수의 선언

- 변수의 선언은 저장되는 값의 타입과 이름만 결정한 것 -> 메모리에 할당 된 것은 아니다. 

- 변수에 값이 최초로 대입될 때 메모리에 할당되고, 해당 메모리 값에 저장이 된다. 

- 초기화되지 않은 변수는 메모리에 할당되지 않기 때문에 변수를 통해 메모리 값을 읽을 수 없다. 

- 초기화 되지 않은 변수를 연산식에 사용할 경우 컴파일에러(The local variable value may not have been initialized)가 발생한다. 

 

* 정수Type

값의 분류 기본타입
정수 byte, char, short, int, long
실수 float, double
논리(true/false) boolean
Type 메모리크기 저장되는 값의 허용 범위
byte 1byte 8bit -128~127
short 2byte 16bit -32,768~32,767
char 2byte 16bit 0~65535
int 4byte 32bit -2,147,483,648~2,147,483,647
long 8byte 64bit -9,223,372,036,854~-9,223,372,036,854  

* 실수 Type

Type 메모리 크기 유효 소수 이하 자리
float 4byte(32bit) 7자리
double 8byte(68bit) 15자리

 

* 자동 타입 변환(promotion)

- 자동 타입 변환은 값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 대입 될때 발생한다. 

- 기본 타입을 허용 범위 순으로 나열하면 다음과 같다. 

byte < short,   char < int < long < float < double

 

* 강제 타입변환(Casting)

- 큰 허용 범위 타입을 작은 허용 타입으로 쪼개어서 저장하는 것을 강제 형변환이라고 한다. 

 

* 문자열을 기본 타입으로 변환

Type 예시
String -> byte  Byte.parseByte();
String -> short Short.parseShort();
String -> int Integer.parseInt();
String -> long Long.parseLong();
String -> float Float.parseFloat();
String -> double Double.parseDouble();
String -> boolean Boolean.parseBoolean();

 

* 기본 타입을 문자열로 변환할 경우 

- String.valueOf(기본타입값);

 

* printf() 형식의 문자열 포맷

- printf("형식문자열", 값1, 값2,...)

- 형식 문자열에서 %는 형식 문자열의 시작을 뜻한다. 

- 변환 문자의 type에 따라서 d(정수), f(실수), s(문자)가 온다. 

- 형식 문자열에 값이 두개 이상일 경우에는 순번을 포함 시켜야 한다. 

System.out.printf("이름 : %1$s, 나이 : %2$d", "김나나", 23);

- 값에 공백을 만들어주고 싶을 경우, %-2d(두자리 정수 오른쪽 빈자리 공백) / %2d(두자리 정수 왼쪽 빈자리 공백)으로 표현된다. 

 

 

* 키보드 입력 데이터를 변수에 저장하기 

- Scanner객체를 사용하여 키보드 입력 값을 받을 수 있다. 

- scanner.nextLine()은 enter키가 입력되기 전까지 블로킹(대기) 상태가 되며, enter키가 입력 되면 지금까지 입력된 모든 내용을 문자열로 읽는다.