1. 변수
1.1 변수란?
💡 “변수란, 단 하나의 값을 저장하 수 있는 메모리 공간”
- 프로그래밍 언어에서 변수란, 값을 저장할 수 있는 메모리상의 공간
- 하나의 변수에 단 하나의 값만 저장할 수 있음, 새로운 값을 저장하면 기존의 값은 사라짐
1.2 변수의 선언과 초기화
int age; // age 라는 이름의 변수 선언
- 변수 타입 - 변수에 저장될 값이 어떤 타입인지 지정
- 정수형, 실수형, 문자형 등
- 변수 이름 - 변수에 붙인 이름
- 같은 이름의 변수가 여러 개 존재해서는 안됨
변수의 초기화
- 변수를 사용하기 전에 처음으로 값을 저장하는 것
int age = 25; // 변수 age를 선언하고 25로 초기화한다.
- 변수를 선언한 이후 초기화하지 않으면 메모리의 낭비가 발생할 수 있다.
int a, b;
int x = 0, y = 0;
- 타입이 같은 경우 콤마로 구분하여 여러 변수를 한줄에 선언하기도 한다.
두 변수의 값 교환하기
int x = 20;
int y = 49;
int tmp
- 변수 x에 저장된 값을 tmp에 저장 / tmp = 20
- 변수 y에 저장된 값을 변수 x에 저장/ x= 49
- 변수 tmp에 저장된 20 값을 y에 저장/ y = 20
- 결과 x = 49, y = 20
예제 2 -2
class main{
public static void main(String[] args)
{
int x = 10, y = 20;
int tmp = 0;
System.out.println("x:" + x + " y:" + y);
tmp = x;
x = y;
y = tmp;
System.out.println("x:" + x + " y:" + y);
}
}
result
→ x:10 y:20 x:20 y:10
- 덧셈 연산자 ‘+’는 두 값을 더하기도 하지만, 문자열과 숫자를 하나로 결합하기도 한다.
1.3 변수의 명명규칙

권장하는 규칙

2. 변수의 타입
기본형과 참조형
- 기본형 변수 - 실제 값을 저장
- 논리형(boolean), 문자형(char), 정수형(byte, short, int, long), 실수형(float, double) 총 8개
- 참조형 변수 - 어떤 값이 저장된 주소를 값을 가짐
- 자바는 C언어와 달리 참조형 변수간의 연산이 불가, 실제 연산은 모두 기본형 변수임
- null 또는 객체의 주소를 값으로 가짐
- 변수의 타입으로 클래스의 이름을 사용/ 선언 방법은 다음과 같음

2.1 기본형(primitive type)
- 논리형(boolean) - true / false
- 문자형(char) - 문자를 저장하는데 사용, 변수 하나에 하나의 문자만 저장가능
- 정수형(byte, short, int, long) - 정수를 저장하는데 사용, 주로 int 사용
- 실수형(float, double) - 실수를 저장하는데 사용, 주로 double 사용

- char은 자바에서 유니코드(2byte) 문자 체계를 사용하므로 2byte이다
- 정수형 자료의 경우 -2^(n-1) ~ 2^(n-1) -1 만큼 표현 가능, n = bit수 8bit = 1byte
- 실수형은 **정밀도(precision)**가 중요, float보다 double이 오차가 더 작다 → 표현할 수 있는 값의 범위가 크기 때문
2.2 상수와 리터럴(constant & literal)
상수
- 변수와 마찬가지로 값을 저장할 수 있는 공간 but 값 변경 불가능
final int MAX_SPEED = 10; // 상수는 선언과 동시에 초기화 해야함
MAX_SPEED = 200 (X) ; // 상수는 값 변경 불가능
- 상수는 모두 대문자로 선언하는 것이 관례, ‘_’로 여러단어 구분
리터럴(literal)
- 원래 12, 123, 3.14와 같은 고정값이 **‘상수’**인데, 프로그래밍에서 상수를 ‘값이 변경불가능한 저장공간’ 으로 정의하여 구분하기 위해 다른 이름 필요 → 리터럴

- 변수에 타입이 있는것처럼, 리터럴에도 타입이 있다

- 진수 표기
int octNum = 010; // 8진수로 10, 10진수로 8
int hexNum = 0x10; // 16진수로 10, 10진수로 16
int binNum = 0b10; // 2진수로 10, 10진수로 2
- _구분자 사용, L 접미사
long big = 100_000_000_000L;
long hex = 0xFFFF_FFFF_FFFF_FFFFL;
- 실수형
float pi = 3.14f;
double rate = 1.618d;
float pi = 3.14; (X) // 에러. float 타입 변수에 double 타입 리터럴 저장 불가
double rate = 1.618; // 접미사 d는 생략 가능하다.
타입의 불일치
int i = 'A'; // 유니코드인 65가 i 변수에 저장
long l = 123; // int보다 long의 범위가 넓음
double d = 3.14f; // float보다 double의 범위가 더 넓다.
문자 리터럴과 문자열 리터럴
char ch = 'J' // ch 타입에 문자열 저장 불가
String name = "Java"
String str = ""; (O) // 내용이 없는 빈 문자열
char ch = ''; (X) // ''안에 반드시 하나의 문자 필요
char ch = ' ' (O) // 공백 문자로 변수 ch 초기화 가능
- 덧셈 연산자를 통한 문자열 결합
String name = "Ja" + "va";
String str = name + 8.0; // "Java8.0"

2.3 형식화된 출력 - printf()
println() - 변수의 값을 그대로 출력
printf() - 지시자를 통해 변수의 값을 여러 가지 형식으로 출력 가능
int age = 14;
System.out.printf("age:%d", age);
//-> age:14가 화면에 출력
- println()과 달리 printf()은 출력 후 줄바꿈을 하지 않는다 → ‘%n’을 통해 줄바꿈
- 자주 사용되는 지시자

- ‘0’과 ‘-’의 역할
int finger = 10;
System.out.printf("finger = [%5d]%n", finger); // [ 10]
System.out.printf("finger = [%-5d]%n", finger); // [10 ]
System.out.printf("finger = [%05d]%n", finger); // finger = [00010]
double d = 1.23456789
System.out.printf("d=%14.10f%n", d); /*앞의 14는 소수점 포함 총 14자리 할당, 뒤의 10은
소수 자리를 10만큼 할당한다는 의미 */
- 총 14자리

- 앞의 빈자리는 공백, 뒤의 빈자리는 0
2.4 화면에서 입력받기 - Scanner
import java.util.*; // Scanner 을 사용하기 위해 추가
class ScannerEx{
public static void main (String[] args){
Scanner scanner = new Scanner(System.in); // Scanner 클래스의 객체를 생성
System.out.print("두자리 정수를 하나 입력해주세요.>");
String input = scanner.nextLine(); //입력받은 내용을 input에 저장
int num = Integer.parseInt(input); // 입력받은 내용을 int 타입 값으로 변환
System.out.println("입력내용 : "+input);
System.out.printf("num=%d%n", num);
}
}
3. 기본형(primitive type)
3.1 논리형 - boolean
- true / false 중 하나만을 저장 가능
- default 값은 false
- 1 bit 만으로도 충분하나, 자바의 최소 데이터 단위가 byte 기 때문에 1byte 할당
boolean power = true;
boolean checked = False; (X) // 대소문자 구분, 소문자로 적어야한다.
3.2 문자형 - char
- 문자형은 ‘char’ 하나의 자료형만 지님
- 단 하나의 문자만 저장 가능
char ch = 'A';
- 실제로는 변수에 문자가 저장되는 것이 아닌 ‘문자의 유니코드’가 저장되는 것이다.
- ch = ‘A’, ch = 65
- 특수문자 표현 방법

char타입의 표현방식
- char 타입의 크기는 2byte이므로 65536($2^{16}$개)
- 문자 ‘A’ = 0000000001000001
- short는 같은 2byte지만 음수의 값을 표현하기 때문에
- short : $-2^{15}$ ~ $+2^{15}$ 까지 표현 가능하다, 맨 앞의 이진코드가 양/음 구별
3.3 정수형 - byte, short, int ,long
byte - 1 byte
short - 2 byte
int - 4 byte
long -8 byte
정수형의 표현형식과 범위

- S : 부호 비트 (양수는 0, 음수는 1)
- n : 타입의 크기 (단위는: bit)
정수형의 선택기준
- JVM의 피연산자 스택(operand stack)이 피여난자를 4byte 단위로 저장하기 때문에 4byte 보다 작은 자료형(byte, short)의 값을 계산할 때 오히려 int를 사용하는게 효율적이다.
정수형의 오버플로우
- 오버 플로우 : 해당 타입이 표현할 수 있는 값이 범위를 넘어서는 것
- ex) 4bit 2진수 ‘1111’ + ‘0001’ = ????
- 오버플로우로 ‘10000’의 첫번째 자리는 저장할 공간이 없어져 ‘0000’으로 저장됨
- ex) 4bit 2진수 ‘0000’ - ‘0001’ = ‘1111’
4. 형변환
4.1 형변환(캐스팅, casting)이란?

- int 타입과 float 타입을 더하는 경우, 두 값을 같은 타입으로 변환(float)한 뒤 더하야 한다.
4.2 형변환 방법

double d = 85.4;
int score = (int)d;
// -> score = 85

4.3 자동 형변환
float f = 1234; //형변환의 생략 float f = (flㅏ
자동 형변환의 규칙


- 화살표 방향으로는 자동으로 형변환이 가능하나, 그 반대방향으로는 반드시 연산자를 사용해야 한다

'Java > Java 스터디' 카테고리의 다른 글
| Chapter 06. 객체지향 프로그래밍 I (part 1~2) (0) | 2023.02.21 |
|---|---|
| Chapter 05. 배열 (0) | 2023.02.15 |
| Chapter 04. 조건문과 반복문 (0) | 2023.02.15 |
| Chapter 03. 연산자 (0) | 2023.01.29 |
| Chapter 01. 자바 스터디 시작 (1) | 2023.01.03 |