자바의 정석 2장 - 정리

박병준·2022년 2월 8일
0

자바의 정석

목록 보기
2/16

2. 변수


1. 변수

변수란

단 하나의 값을 저장할 수 있는 메모리 공간

변수의 명명 규칙

  1. 대소문자가 구별되며 길이에 제약이 없다.
    True와 true는 서로 다른 것으로 간주된다.

  2. 예약어를 사용하면 안 된다.
    true는 예약어라서 사용할 수 없지만, True는 가능하다.

  3. 숫자로 시작해서는 안 된다.
    top10은 허용되지만, 7up은 허용되지 않는다.

  4. 특수문자는 '_'와 '$'만 허용한다.
    $harp은 허용되지만, S#arp은 허용되지 않는다.

권장하는 규칙

  1. 클래스 이름의 첫 글자는 항상 대문자로 한다.
    변수와 메서드의 이름의 첫 글자는 항상 소문자로 한다.

  2. 여러 단어로 이루어진 이름은 단어의 첫 글자를 대문자로 한다.
    ex) lastIndexOf, StringBuffer

  3. 상수의 이름은 모두 대문자로 한다. 여러 단어로 이루어진 경우 '_'로 구분한다.
    ex) PI, MAX_NUMBER


2. 변수의 타입

기본형(primitive type)
- 논리형(boolean), 문자형(cahr), 정수형(byte, short, int, long), 실수형(float, double) 계산을 위해 실제 값을 저장한다. 모두 8개
참조형(reference type)
- 객체의 주소를 저장한다. 8개의 기본형을 제외한 나머지 타입

참조형 변수를 선언할 때 변수의 타입으로 클래스의 이름을 사용하므로 클래스의 이름이 참조변수의 타입이 된다.

ex) Date클래스

Date today = new Date();

기본형(primitive type)

1byte2byte4byte8byte
논리형boolean
문자형char
정수형byteshortintlong
실수형floatdouble

*boolean을 제외한 나머지 7개의 기본형은 서로 연산과 변환이 가능하다.

기본형 범위

자료형저장 가능한 값의 범위크기(byte)
booleanfalse, true1
char'\u0000'~'\uffff' (0~216-1, 0~65535)2
byte-128~127 (-27~27-1)1
short-32,768~32,767 (-215~215-1)2
int-2,147,483,648~2,147,483,647 (-231~231-1)4
long-9,223,372,036,854,775,808~9,223,372,036,854,775,807 (-263~263-1)8
float1.4E-45~3.4E38 (1.4x10-45~3.4x1038)4
double4.9E-324~1.8E308 (4.9x10-324~1.8x10308)8

실수형은 정수형과 저장형식이 달라서 같은 크기라도 훨씬 큰갑을 표현할 수 있으나 오차가 발생할 수 있다. 따라서 실수형에서는 범위 뿐만 아니라 정밀도도 타입 선택의 중요한 기준이 된다.

정밀도

  • float : 7자리
  • double : 15자리

상수와 리터럴

상수

final int MAX_SPEED = 10;
  • 변수의 타입 앞에 키워드'final'을 붙여준다.
  • 반드시 선언과 동시에 초기화해야 한다.
  • 상수의 값을 변경하는것이 허용되지 않는다.

리터럴

int year = 2022;
final int MAX_SPEED = 10;
  • 위의 초록색 부분을 리터럴이라 한다.

프로그래밍에서는 상수를 '값을 한 번 저장하면 변경할 수 없는 저장공간'으로 정의했기 때문에 이와 구분하기 위해 상수를 리터럴이라는 다른 이름으로 불러야만 했다.

리터럴의 타입과 접미사

종류리터럴접미사
논리형false, true없음
정수형123, 0b0101, 077, 0xFF, 100LL
실수형3.14, 3.0e8, 1.4f, ox1.op-1f, d
문자형'A', '1', '\n'없음
문자열"ABC", "123", "A", "true"없음
int small = 100;
long big = 100_000_000_000L;

float pi = 3.14f;
double rate = 1.618d;

float pi = 3.14;		//에러. float타입 변수에 double타입 리터럴 지정 불가
double rate = 1.618;	//OK

타입이 달라도 저장범위가 넓은 타입에서 좁은 타입의 값을 저장하는 것은 허용된다.

int		i = 'A';	// OK. 유니코드인 65가 변수 i에 저장된다.
long	l = 123;	// OK.
double	d = 3.14f;	// OK.

문자 리터열과 문자열 리터열

  • 문자열 리터럴은 ""안에 아무런 문자도 넣지 않는 것을 허용하지만 문자 리터럴은 반드시 ''안에 하나의 문자가 있어야 한다.
String	str = "";	// OK.
char	ch = '';	// 에러.
char	ch = ' ';	// OK. 공백 문자(blank)로 변수 초기화
  • 덧셈 연산자(+)는 어느 한 쪽이 String이면 나머지 한쪽을 String으로 변환한 다음 결합한다.
    따라서 기본형 타입 값을 문자로 변환할 때 빈 문자열("")을 더해주면 된다.
    ex)
    7 + " " -> "7 "
    " " + 7 -> " 7"
    7 + "7" -> "77"

형식화된 출력 - printf()

지시자설명
%bboolean 형식으로 출력
%d정수 형식으로 출력
%o8진수 정수의 형식으로 출력
%x 또는 %X16진수 정수의 형식으로 출력
%f소수점 형식으로 출력
%c문자형식으로 출력
%s문자열 형식으로 출력
%n줄바꿈 기능
%e 또는 %E지수 표현식의 형식으로 출력

'%n' 대신 '\n'을 대신 사용해도 되지만, OS마다 줄바꿈 문자가 다를 수 있기 떄문에 '%n'을 사용하는 것이 더 안전하다.


3. 형변환

기본형과 참조형간의 형변환은 불가능하다.

자동 형변환

표현범위가 좁은 타입에서 넓은 타입으로 형변환하는 경우에는 값 손실이 없으므로 두 타입 중에 표현범위가 더 넓은 쪽으로 형변환된다.

charshort는 둘 다 2byte의 크기 이지만 범위가 서로 달라서 자동 형변환이 수행될 수 없다.

profile
뿌셔뿌셔

0개의 댓글