식별자(identifier)
클래스, 변수, 상수, 메소드 등에 붙이는 이름
식별자 이름 규칙
- 특수분자, 공백 사용 불가('_', '$' 예외로 사용 가능)
- 한글 사용 가능
- 자바 언어의 키워드 사용 불가
- 첫번째 문자로 숫자 사용 불가
- true, false, null 사용 불가
- '_', '$'는 첫번째 문자로 사용 가능하지만 대체로 사용하지 않음
- 대소문자 구분
- 길이 제한 없음
자바 키워드 : 예약어(reserved word)
이미 용도가 정해져 식별자의 이름으로 사용 불가한 단어
abstract | continue | for | new | switch |
assert | defalut | if | package | synchronized |
boolean | do | goto | private | this |
break | double | implements | protected | throw |
byte | else | import | public | throws |
case | enum | instanceof | return | transient |
catch | extends | int | short | try |
char | final | interface | static | void |
class | finally | long | strictfp | volatile |
const | float | native | super | while |
자바 언어 이름 붙이는 관습
// 클래스 이름
// 각 단어의 첫글자를 대문자로 표기
public class HelloWorld {}
class AutoVendingMachine {}
// 변수, 메소드 이름
// 첫단어는 소문자로 이후 각 단어의 첫글자를 대문자로 표기
int myAge;
boolean isSingle;
public int getAge() {return 20;}
// 상수 이름
// 전체 대문자 표기
final double PI = 3.14;
데이터 타입(data type)
기본 타입(basic type)
구분 | 데이터 타입 | 크기 | 범위 | 기본값 |
논리 | boolean | 1bit | true or false | false |
문자 | char | 2byte | Unicode | '\u0000'(NULL) |
정수 | byte | 1byte | -128 ~ 127 | 0 |
short | 2byte | -32768 ~ 32767 | 0 | |
int | 4byte | -231 ~ 231-1 | 0 | |
long | 8byte | -263 ~ 263-1 | 0L | |
실수 | float | 4byte | -3.4E38 ~ 3.4E38 | 0.0f |
double | 8byte | -1.7E308 ~ 1.7E308 | 0.0d, 0.0 |
레퍼런스 타입(reference type)
기본값: NULL
C의 포인터와 유사한 개념
용도
- 배열에 대한 레퍼런스: 배열에 대한 주소값
- 클래스(class)에 대한 레퍼런스: 객체에 대한 주소값
- 인터페이스(interface)에 대한 레퍼런스
문자열(String)
기본값: NULL
자바에서 문자열은 기본 타입에 속하지 않음
문자열과 기본 타입의 + 연산이 실행될 경우,
기본 타입의 값이 문자열로 바뀌고 두 문자열이 연결된 새로운 문자열 생성
변수 선언
// 변수 선언
데이터타입 변수이름;
int price;
char c1, c2, c3;
// 변수 선언과 동시에 초기화
데이터타입 변수이름 = 초깃값;
int radius = 10;
char c1 = 'a', c2 = 'b', c3 = 'c';
double weight = 75.56;
리터럴(literal)
프로그램에 직접 표현한 값
정수 리터럴
int 타입으로 자동 컴파일
// 10진수: 0으로 시작하지 않는수
int n = 15; -> 10진수 15
// 8진수: 0으로 시작하는 수
int m = 015; -> 10진수 13
// 16진수: 0x로 시작하는 수
int k = 0x15; -> 10진수 21
// 2진수: 0b로 시작하는 수
int b = 0b0101; -> 10진수 5
// long타입 지정
long g = 24L;
실수 리터럴
double 타입으로 자동 컴파일
// 소수점 형태
double d = 0.1234;
double c = 12.;
// 지수(exponent) 형태
double e = 1234E-4;
// 타입 강제 변환
float f = 0.1234f;
double w = .1234D;
문자 리터럴
// 단일 인용부호(' ') 사용
char a = 'A';
char b = '글';
// 유니코드 값 사용
char c = \u0041; -> 'A'의 유니코드
char d = \uae00; -> '글'의 유니코드
특수문자 리터럴 : 이스케이프 시퀀스(escape sequence)
'\b': 백스페이스(backspace)
'\t': 탭(tab)
'\n': 라인피드(line feed)
'\f': 폼피드(form feed)
'\r': 캐리지 리턴(carriage return)
'\"': 이중 인용부호(double quote)
'\'': 단일 인용부호(single quote)
'\\': 백슬래시(backslash)
논리 리터럴 | boolean 타입
논리 리터럴은 true, false 두 개밖에 없으며, boolean 타입의 변수에 직접 치환하거나 조건문에 사용
boolean a = true;
boolean b = 10 > 0; // b = true
// 타입 불일치 오류
boolean c = 1;
// 무한루프
while(true) {
...
}
이외의 리터럴
// null 리터럴
// 기본 타입에 사용될 수 없고, 객체 레퍼런스에 대입됨
String str = null;
// 문자열 리터럴
// String 클래스의 객체
// 이중 인용부호로 표현하며, 문자열 이라고 함
String str = "Good";
상수
변수와 달리 실행중에 값이 바뀌지 않음
한 번 값을 초기화하면 더 이상 변경 불가
final 데이터타입 상수이름 = 초깃값;
final double PI = 3.141592;
타입 변환
자동 타입 변환
치환문(=)이나 수식 내에서 타입이 일치하지 않을 경우, 컴파일러가 오류 대신 작은 타입을 큰 타입으로 자동 변환
long m = 25;
double d = 3.14*10;
강제 타입 변환 : 캐스팅(casting)
큰 타입의 값을 작은 타입의 값으로 변환해야 할 경우, 컴파일러는 자동 변환 대신 오류를 발생시킴
이때 타입 변환을 원한다면 강제 타입변환 지시
강제 변환을 하면 컴파일 오류가 발생하지 않을 뿐 데이터 손실 발생
(변환할타입)변수
int n = 300;
byte b = (byte)n;
double d = 1.9;
int n = (int)d;