반응형
변수
- 하나의 값을 저장할 수 있는 메모리 번지에 붙여진 이름
- 메모리 값 저장
- 변수 선언(메모리 할당X) 후, 변수에 값을 지정(메모리 할당O)
- 저장 위치 또는 어떤 방식으로 저장할지는 JVM이 정함
변수이름 작성 규칙
- 첫 번째 글자는 문자 또는’$’,’_’ 이어야 하고, 숫자로 시작할 수 없음(필수)
- 영어 대소문자를 구분(필수)
- 첫 문자는 영어 소문자로 시작하되, 다른 단어가 붙을 경우 첫 문자를 대문자로 한다(관례, 캐멀스타일)
- 자바 예약어는 사용할 수 없음
분류
|
예약어
|
기본 타입
|
boolean, byte, char, short, int, long, float. double
|
접근 제한자
|
private, protected, public
|
클래스와 관련된 것
|
class, abstract, interface, extends, implements, enum
|
객체와 관련된 것
|
new, instanceof, this, super, null
|
메소드와 관련된 것
|
void, return
|
제어문과 관련된 것
|
if, else, switch, case, default, for, do, while, break, continue
|
논리값
|
true, false
|
예외 처리와 관련된 것
|
try, catch, finally, throw, throws
|
기타
|
package, import, synchronized, final, static
|
값 저장
- 대입 연산자(=) : 변수에 값 저장
- 변수 초기화 : 변수에 최초로 값을 저장, 사용된 값을 초기값이라고 함
정수 타입
타입 메모리 사용크기 저장되는 값을 허용 범위 (1byte = 8bit), bit는 0과 1이 저장되는 단위
타입
|
메모리 사용크기
|
저장되는 값을 허용 범위
|
byte
|
1byte
|
-128~127
|
short
|
2byte
|
-32,768~32,767
|
char
|
2byte
|
0~65535(유니코드)
|
int
|
4byte
|
-2^31 ~(2^31-1)
|
long
|
8byte
|
-2^63~(2^63-1)
|
- 2진수
- 0b또는 0B로 시작하고 0과 1로 구성
- 0b1011 → 11
- 8진수
- 0으로 시작하고 0~7 숫자로 구성
- 013 → 11
- 16진수
- 0x 또는 0X로 시작하고 0~9 숫자와 A~F 또는 a~f로 구성
- 0xB3 → 179
long 타입
- 기본적으로 컴파일러는 정수 리터럴을 int 타입으로 간주함
- 정수 리터럴이 int 타입의 허용범위를 초과할 경우, 컴파일러에게 ‘L’을 붙여 long 타입임을 알려주어야함
- long 타입이더라도 리터럴이 int 타입의 허용범위 이내라면 L을 붙이지 않아도됨
char 타입
- 유니코드로 변환되어 저장됨 (0~65535)
- int var = ‘A’ → 65(유니코드) 출력됨
- 어떤 문자도 대입하지 않고 초기화 할 시, 공백(유니코드:32) 하나를 포함해서 초기화 해야함 (char c = ' ';)
문자열 타입 (String)
- 클래스 타입 → 기본타입 아님
- 문자열(””)을 변수에 저장할때 사용
- 이스케이프 문자를 사용하여 문자열 내부에 특정 문자를 포함 시킬 수 있음
- (윈도우)키보드 엔터키 → \r\n (캐리지리턴 → 라인피드)
이스케이프 문자 | 출력 용도 |
\t (tap) | 탭만큼 띄움 |
\n (line feed) | 줄 바꿈 |
\r (carriage return) | 캐리지리턴 (앞으로 끌어옴) |
\” | “ 출력 |
\’ | ‘ 출력 |
\\ | \ 출력 |
\u16진수 | 16진수 유니코드에 해당하는 문자 출력 |
실수 타입
- 자바는 실수 리터럴을 기본적으로 double 타입으로 해석함
- float 타입으로 저장하고 싶다면 리터럴 뒤에 f 또는 F를 붙여줌
- 10의 거듭제곱 리터럴 작성 방법 → e또는 E로 작성→ double x = 5e2; //5.0 * 10^2 = 500.0
타입
|
메모리 사용 크기
|
정밀도 (소수점이하)
|
float
|
4byte
|
7자리
|
double
|
8byte
|
15자리
|
논리 타입 (boolean)
- 리터럴로 true와 false를 사용
- 조건문과 제어문의 실행 흐름을 변경하는데 사용
- == → 같은가
- != → 같지 않은가
- x > y → x가 y보다 큰가
- x && y → x 이면서 y 인가 (논리 AND)
- x || y → x 이거나 y 인가 (논리 OR)
자동 타입 변환 (promotion)
- 값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 저장될 때 발생
- byte < short, char < int < long < float < double
- byte - char 자동타입변환 불가 : byte 타입은 char 타입보다 허용 범위가 작지만, char 타입은 음수 값을 포함하지 않으므로 자동타입변환 될 수 없음
강제 타입 변환 (casting)
- 큰 허용 범위 타입을 작은 허용 범위 타입으로 강제 변환하여 저장하는것
- ex) int 타입(4byte)를 byte 타입으로 캐스팅 하면 앞 3byte는 삭제되고 끝 1byte값만 저장됨
따라서 2byte 이상 필요한 int 값(-128~127 범위를 넘어가는 값)은 보존되지 않음
나머지 타입들의 강제타입 변환도 같은 원리로 이루어짐
- ex) int 타입(4byte)를 byte 타입으로 캐스팅 하면 앞 3byte는 삭제되고 끝 1byte값만 저장됨
- 캐스팅 연산자 괄호() 를 사용
- 실수 타입을 정수 타입으로 강제 타입 변환하면 소수점 이하 부분은 버려지고, 정수 부분만 저장됨
정수 연산에서의 자동 타입 변환
- int 타입보다 작은 변수(byte, char, short)가 산술 연산식에서 피연산자로 사용되면 기본적으로 int 타입으로 자동 변환됨
- ex1 ) byte x = 10; byte y = 20; byte result = x + y // 컴파일 에러 → 피연산자 변수로 사용되어 int 타입으로 자동변환됨
- ex2 ) byte result = 10+20 ; // 피연산자가 변수가 아니고 정수 리터럴 이므로 int 타입으로 자동변환되지 않음
- 허용 범위가 더 큰 long 타입이 피연산자로 사용되면 다른 피연산자는 무조건 long 타입으로 변환하여 연산을 수행해야함
실수 연산에서의 자동 타입 변환
- 피연산자 중 하나가 double 타입이라면 다른 피연산자도 double로 자동 타입 변환이 됨
- 자바에서는 f 또는 F가 없는 실수 리터럴을 double 타입으로 해석함
- ex ) float result = 1.5 + 2.3; // 컴파일 에러 → 피연산자에 float표기(f 또는 F)가 없으므로 double 타입으로 간주하여 컴파일 에러 발생
컴파일 하려면 result를 double 타입으로 받거나, 피연산자에 f 또는 F를 표기해줘야함
- ex ) float result = 1.5 + 2.3; // 컴파일 에러 → 피연산자에 float표기(f 또는 F)가 없으므로 double 타입으로 간주하여 컴파일 에러 발생
- 정수타입과 double타입의 연산에서도 정수타입 피연산자가 double 타입으로 자동 변환되고 연산을 수행함
- int x = 1; int y = 2; double result = x / y; → result 값은 0.5???
- 자바에서 정수 연산의 결과는 항상 정수이기 때문에 x / y의 결과는 0이 되고 그 값이 result 에 double 타입으로 저장되므로 result 값은 0.0이 됨
- 컴파일 하려면 x 또는 y 앞에(또는 x , y 둘다) double을 붙여 타입변환을 시켜줘야함
연산에서의 문자열 자동 타입 변환
- 피연산자 중 하나가 문자열일 경우 나머지 피연산자도 문자열로 자동 변환됨
- 연산식에서 + 연산자가 연이어 나오면, 앞에서부터 순차적으로 + 연산을 수행
- ex ) String str = 1 + 2 + “3”; → String str = 3 + “3”; → String str = “33”;
문자열을 기본 타입으로 강제 타입 변환
변환타입
|
사용 예 (String str = “1”;)
|
byte
|
byte value =Byte.parseByte(str);
|
short
|
short value =Short.parseShort(str);
|
int
|
int value =Integer.parseInt(str);
|
long
|
long value =Long.parseLong(str);
|
float
|
float value =Float.parseFloat(str);
|
double
|
double value =Double.parseDouble(str);
|
boolean
|
String str = “true”; boolean value =Boolean.parseBoolean(str);
|
기본 타입을 문자열로 변경
- String str = String.valueOf(기본타입값); → 정적 메소드
로컬 변수 (지역 변수)
- 메소드 블록 내에서 선언된 변수
- 메소드 블록 내부에서만 사용
- 메소드 실행이 끝나면 메모리에서 자동으로 없어짐
- System.out → 시스템의 표준 출력 장치 (모니터)
- System.in → 시스템의 표준 입력 장치 (키보드)
System.out.println(리터럴 또는 변수);
- System : 시스템이 가지고 있는
- out : 출력장치로
- println(리터럴 또는 변수); : 괄호 안의 내용을 출력하고 행을 바꿔라
메소드 | 의미 |
println(내용); | 괄호 안의 내용을 출력하고 행을 바꿔라 |
print(내용); | 괄호 안의 내용을 출력해라 |
printf(”형식문자열”, 값1, 값2, …) | 괄호 안의 첫 번째 문자열 형식대로 내용을 출력해라 |
printf() 메소드의 형식문자열
%[argument_index$][flags][width][.precision]conversion
- % : 형식문자열 시작
- argument_index$ : 값의 순번 → 값의 순번을 써주지 않아도 순번대로 자동 지정되어 출력됨, 순번을 지정해야할 때 사용하면 되는것 같음
- flags : -(공백) 또는 0(숫자'0')
- width : 전체 자릿수(점포함)
- .percision : 소수 자릿수
- conversion : 변환문자(d(정수), f(실수), s(문자열))
System.out.printf("이름: %1$s, 나이: %2$d", "김자바", 25);
키보드에서 입력된 내용을 변수에 저장하기
-
int keyCode = System.in.read(); // 'a'입력+엔터 했을 경우 → a(65)와 엔터(13,10) 둘다 읽음
- System.in.read()의 단점은 키코드를 하나씩 읽기 때문에 2개 이상의 키가 조합된 한글을 읽을 수 없다는 것
Scanner 클래스
- 입력된 내용을 통 문자열로 읽음
Scanner scanner = new Scanner(System.in);
String inputData = scanner.nextLine();
- import java.util.Scanner : import문, Scanner가 java.util 패키지에 있다는 것을 컴파일러에게 알려주는 역할
equals() 메소드
- String타입에서는 문자열 자체가 동일한지 비교
- boolean result = data. equals("문자열"); → data의 문자열과 괄호안의 문자열이 동일한지 비교함
반응형
댓글