2장 - 변수

·2022년 11월 28일
0

자바의 정석

목록 보기
2/12
post-thumbnail

1. 변수

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

int number;

int = 변수의 타입
number = 변수의 이름

-> int 타입의 number라는 변수명을 가진 변수를 선언했다!

변수 타입 : 변수에 저장될 값이 지닌 타입을 지정함.
변수명 : 변수에 이름을 붙여준 것이다.

변수는 앞서 말했듯, 메모리상의 공간이다.
이 공간에 이름을 붙여 구분을 지어준 후에 '이 이름에 값을 저장해줘, 혹은 이 이름의 값을 가져와 줘' 를 통해 메모리 공간을 사용할 수 있다!

선언된 number를 이용해 과정을 살펴보자면
1) int age; 변수 선언
2) type 크기(여기서는 int만큼의)에 따른 메모리 공간이 확보된다.
3) 메모리 공간에 변수 이름을 짓고(number), 이를 호출해 접근하거나 이용한다!

1-1 변수의 초기화

변수를 선언한 후에는 꼭 초기화를 해줘야 한다.
메모리는 여러 프로그램이 공유하는 자원이므로, 전에 다른 프로그램에 의해 저장된 '알 수 없는 값(쓰레기 값)' 이 남아있을 수 있기 때문이다.
변수를 사용하기 전 처음으로 값을 꼭 저장해주자!

int number; // 선언 완
int a;
int b;

number = 0; //0이라는 값을 대입해 number를 초기화 해줬다
a = 0;
b = 0;
int age = 99; // 선언과 동시에 초기화도 가능하다.

같은 타입의 여러 변수를 선언하거나 초기화 할 때, 콤마','를 통해 한 줄에 선언이 가능하다!

int a, b;
int a = 0, b = 0;

초기화를 할 때 사용한 '='(대입연산자)는 우변의 모든 계산이 끝난 후에 제일 마지막에 수행된다.

1-2 두 변수의 값 교환하기

int x = 10;
int y = 20;

x와 y의 값을 서로 바꿔보자!
-> 값을 임시 저장할 변수를 선언하고, 바꿔주면 된다.

덧셈 연산자 '+'

1) 두 값을 더해준다.
2) 문자열과 숫자를 하나로 결합해준다.

문자열을 나타내는 큰따옴표("")와 같이 이용 시, 왼쪽에서 오른쪽으로 연산 순서가 진행된다는 것만 기억하면 된다.

1-3 변수의 명명규칙

  1. 대소문자가 구분되며, 길이 제한은 없다.
  2. 예약어 사용 금지
  3. 숫자로 시작 금지
  4. 특수문자는 '_', '$'만을 사용한다.

추가적인 권장규칙

  1. 클래스명의 첫글자는 대문자로
  2. 카멜케이스를 이용한다
  3. 상수명은 모두 대문자로, 여러 단어로 이루어진 경우 '_'로 구분.

2. 변수의 타입

크게 문자와 숫자로, 숫자는 정수와 실수로 나뉜다.

2-1 기본형과 참조형

기본형 - 실제 값을 저장한다. 연산 가능, 8개 타입
참조형 - 어떤 값이 저장되어 있는 주소를 값으로 가진다. 참조형 변수끼리의 연산 불가, 기본형 빼고 다

참조형 예시

Date today = new Date();

연산자 new를 통해 Date 객체 주소를 생성하고, 
그 주소를 today 변수에 저장한다.
-> 참조변수 today를 통해 생성된 객체 Date를 사용할 수 있게 되었다.

기본형(primitive type)

논리형, 문자형, 정수형, 실수형으로 이루어져 있다.

1) 논리형(boolean)

  • true, false 둘 중 하나를 값으로 가짐.
  • 그르니까 연산, 변환 불가
  • 1byte, 8bit

2) 문자형(char)

  • 문자 하나 ('A', '1', 'b' ...)만을 저장한다.
  • 내부적으로 저장 시 정수(유니코드)로 저장된다.
  • 2byte, 16bit

3) 정수형(byte, short, int, long)

  • 정수 저장 변수, 기본 자료형은 int를 사용한다.
  • byte - 1byte, 8bit
  • short - 2byte, 16bit
  • int - 4byte, 32bit
  • long - 8byte, 64bit

4) 실수형(float, double)

  • 실수 저장 변수, 기본 자료형은 double
  • float - 4byte, 32bit
  • double - 8byte, 64bit

각 타입 변수가 표현할 수 있는 값의 개수: 2^n개
부호 없는 정수 범위 : 0 ~ 2^n - 1
부호 있는 정수 범위 : -2^(n-1) ~ 2^(n-1)-1
n은 비트의 수

int -> 2^31 10진수 기준 10자리(약 21억)
long -> 2^63 10진수 기준 19자리

실수형은 정밀도를 고려해야한다.
float : 10진수 기준 7자리까지 정밀하게 표현
double : 10진수 기준 15자리까지 정밀하게 표현
이 이상은 오차가 발생한다.

2-2 상수와 리터럴

상수
값을 저장할 수 있는 공간, 저장 시 다른 값으로 변경 불가

final int MAX_SPEED = 10; // 선언, 초기화. final로 상수 선언 해서 값 변경 불가

리터럴
값 자체, 상수의 다른 이름

리터럴의 타입과 접미사
정수형 - L(long)
실수형 - f(float), d(double, 생략 가능)
안붙어있으면 기본 자료형을 따른다고 생각하면 된다

printf 다양한 표현식

실수형

%전체자리.소수점아래자리f

System.out.printf("d=%14.10f%n", d);
전체 14자리 중 소수점 아래 10자리만 출력

소수점도 한 자리를 차지한다.
소수점 아래의 빈자리는 0으로 채우고, 정수 빈자리는 공백으로 채워 전체 자리수를 만든다.

문자열

System.out.printf("[%20s]%n", "helloWorld");
System.out.printf("[%-20s]%n", "helloWorld");
System.out.printf("[%.8s]%n", "helloWorld";

실수형과 유사하게 표현된다.
20 -> 최소 20글자 출력공간 확보, 우측정렬
-20 -> 위와 동일, 좌측정렬
.8 -> 왼쪽에서 8글자만 출력한다.
profile
어?머지?

1개의 댓글

comment-user-thumbnail
2022년 12월 1일

오타있으세요 고갱님

답글 달기