변수
값을 저장할 수 있는 메모리에의 특정 번지에 붙는 이름이다.
메모리에 값을 저장하고 싶을 시 변수 선언 후 값을 저장하면 되며, 프로그래밍 언어와 운영체제가 어디에 어떤식으로 저장할 지 자동으로 정해주고 JAVA에서는 JVM에서 그 역할을 수행한다. 변수명으로는 *예약어를 사용할 수 없다
*예약어 - 이미 프로그래밍 언어에서 사용되고 있는 단어
값 저장
변수선언 후 값을 저장할 시에는 대입연산자(=)을 사용한다. ex) int num = 9;
변수는 선언만 된다고 해서 생성되는 것이 아니다. 변수에 값이 저장이 되어야 비로소 변수가 생성되었다고 할 수 있으며, 이것을 변수 초기화라고 하고 이때 사용된 값을 초기값이라고 한다.
변수가 초기화가 되면 메모리에 번지 정보르 갖게 되고, 해당 메모리 번지에 값이 저장된다.
따라서 초기화되지 않은 변수는 메모리 정보가 없기 때문에 잘못된 코딩이다.
기본 타입
java는 정수, 실수, 논리값을 저장하는 8개의 기본 타입을 제공한다.
구분 | 타입 | 종류 |
기본 타입 | 정수 타입 | byte, char, short, int, long |
실수 타입 | float, double | |
논리 타입 | boolean |
정수 타입
타입 | 메모리 크기 | |||
byte | 1byte | 8bit | - 2⁷ ~ (2⁷-1) | -128 ~ 127 |
short | 2byte | 16bit | - 2¹⁵ ~ (2¹⁵-1) | -32,768 ~ 32,767 |
char | 2byte | 16bit | 0 ~ (2¹⁶ -1) | 0 ~ 65535(유니코드) |
int | 4byte | 32bit | - 2³¹ ~ (2³¹-1) | -2,147,783,648 ~ 2,147,783,647 |
long | 8byte | 64bit | - 2⁶³ ~ (2⁶³-1) | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
String 타입
String은 문자열을 값으로 저장할 때 사용되며 큰따옴표(")로 감싸서 선언한다.
String은 기본 타입이 아니라 클래스 타입이다.
문자열 내부에 역슬래시(\)가 붙은 문자를 사용하는데 이것을 이스케이프 문자라고 한다
String str = "내 이름은 \"천재\"이다.";
System.out.println(str);
출력시 - 내 이름은 "천재"이다.
이스케이프 문자 | 출력 |
\t | 탭만큼 띄움 |
\n | 줄 비끔 |
\r | 캐리지리턴 |
\" | 큰따옴표(") 출력 |
\' | 작은따옴표(') 출력 |
\\ | 역슬래시(\) 출력 |
\u16진수 | 16진수 유니코드에 해당하는 문자 출력 |
실수 타입
타입 | 메모리 크기 | 정밀도 | |
float | 4byte | 32bit | 7자리 |
double | 8byte | 64bit | 15자리 |
java에서는 실수를 기본적으로 double로 인식하기 때문에 float에 실수를 저장하고 싶다면 뒤에 f를 붙여야 한다.
자동 타입 변환
자동으로 타입이 변경되는 것을 의미이며 작은 타입에서 큰 타입으로 저장될 때 발생한다.
byte < short < int < long < float < double
byte byteNum = 10;
int intNum = byteNum;
강제 타입 변환
큰 허용 범위 타입은 작은 허용 범위 타입으로 자동 타입 변환이 일어나지 않는다.
따라서 큰 허용 범위 타입을 작은 허용 범위 타입으로 강제로 나눠서 저장하는 것을 강제 타입 변환이라고 한다.
int intNum = 10;
byte byteNum = (byte) intNum;
연산으로 인한 자동 타입 변환
정수 타입 변수들이 연산(+,-, X, ÷)에서 피연산자로 사용되면 int보다 작은 타입인 byte, short는 자동으로 int타입으로 변환된다. 만일 int타입으로 값을 저장하지 않을 시 컴파일에러로 이어지게 된다.
byte num1 = 10;
byte num2 = 20;
int calculatednum = num1 + num2;
byte byteNum = num1 + num2; //컴파일 에러
하지만 변수를 선언하지 않은 상태에서 바로 숫자를 연산할 시에는 컴파일 단계에서 연산을 수행하기 때문에 형변환이 이루어지지 않는다.
byte byteNum = 10 + 20;
이 경우는 컴파일 단계에서 10 + 20을 미리 연산하여 byteNum이라는 변수에 연산된 수를 저장하는 바이트 코드를 생성한다.
시스템 입출력
문자열 | 설명 | 출력 형태 | |
정수 | %d | 정수 | 123 |
%6d | 6자리 정수, 왼쪽 빈자리 공백 | ___123 | |
%-6d | 6자리 정수, 오른쪽 빈자리 공백 | 123___ | |
%06d | 6자리 정수, 오른쪽 빈자리 0으로 채움 | 000123 | |
실수 | %10.2f | 소수점 이상 7자리, 소수점 이하 2자리, 왼쪽 빈 자리 공백 | ___123.45 |
%-10.2f | 소수점 이상 7자리, 소수점 이하 2자리, 오른쪽 빈 자리 공백 | 123.45____ | |
%010.2f | 소수점 이상 7자리, 소수점 이하 2자리, 왼쪽 빈 자리 0으로 채움 | 0000123.45 | |
문자열 | %s | 문자열 | abc |
%6s | 6자리 문자열, 왼쪽 빈 자리 공백 | ___abc | |
%-6s | 6자리 문자열, 오른쪽 빈 자리 공백 | abc___ | |
특수문자 | \t | 탭(tab) | |
\n | 줄바꿈 | ||
%% | % | % |
키보드에서 입력된 내용을 변수에 저장
키코드를 읽기 위해서는 System.in의 read()를 이용한다.
System.in.read()는 키코드를 하나씩 읽기 때문에 2개 이상의 키가 조합된 한글을 읽을 수 없다는 단점을 가지고 있다.
이러한 단점을 보완하기 위해 Scanner 클래스를 사용한다.
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
'JAVA' 카테고리의 다른 글
5.객체 지향 프로그래밍(객체 및 Class에 대하여) (0) | 2023.11.07 |
---|---|
4. main mathod (0) | 2023.11.06 |
3. 참조 타입과 참조 변수 (0) | 2023.11.06 |
2. 반복문 (0) | 2023.11.04 |
0.JAVA 시작하기 (0) | 2023.10.30 |