2. 변수와 타입/ 연산자/ 조건문과 반복문
1. 변수와 타입
(1) 변수
변수: 하나의 값을 저장할 수 있는 메모리 공간
타입 변수이름;
int age;
double value;
변수를 사용하기 위해서는 위에서 처럼 먼저 변수를 선언해야 한다.
변수이름은 자바언어에서 정한 명명 규칙을 따라야 한다.
*명명 규칙
-첫 번째 글자는 문자이거나 '$', '_'이어야 하고 숫자로 시작할 수 없다. (필수)
-영어 대소문자가 구분된다. (필수)
-첫 문자는 영어 소문자로 시작하되, 다른 단어가 붙을 경우 첫 문자를 대문자로 한다. (관례)
-문자 수(길이)의 제한은 없다.
-자바 예약어는 사용할 수 없다.
변수를 선언한 후 사용하기 위해서는 변수에 값을 저장하고 읽어야 한다.
변수를 읽기 위해서는 변수가 초기화되어 있어야한다.
(변수의 초기화: 변수의 초기값을 주는 행위)
int score; //변수 선언
score = 90; //값 저장
이때 90처럼 소스 코드 내에서 직접 입력된 값을 리터럴(literal)이라 부른다.
*리터럴
|정수 리터럴|
정수 리터럴을 저장할 수 있는 타입: byte, char, short, int, long
소수점이 없는 정수 리터럴 -> 10진수
ex) 0, 75, -100
0으로 시작되는 리터럴 -> 8진수
ex) 02, -04
0x 또는 0X로 시작하고 0~9 숫자나 A, B, C, D, E, F 또는 a, b, c, d, e, f로 구성된 리터럴 -> 16진수
ex) 0x5, 0xA, 0xB3, 0xAC08
|실수 리터럴|
실수 리터럴을 저장할 수 있는 타입: float, doble
소수점이 있는 리터럴 -> 10진수 실수
ex) 0.25, -3.14
대문자 E 또는 소문자 e가 있는 리터럴 -> 10진수 지수와 가수
ex) 5E7(5 x 10^7), 0.12E-5(0.12 x 10^(-5))
|문자 리터럴|
문자 리터럴을 저장할 수 있는 타입 : char
작은 따옴표(')로 묶은 텍스트 -> 하나의 문자 리터럴
ex) 'A', '한', '\t', '\n'
|문자열 리터럴|
문자열 리터럴을 저장할 수 있는 타입: String
큰따옴표(")로 묶은 텍스트 -> 문자열 리터럴
ex) "대한민국", "탭 만큼 이동 \t 합니다."
|논리 리터럴|
논리 리터럴을 저장할 수 있는 타입: boolean
true, false -> 논리 리터럴
(2) 데이터 타입
데이터 타입에는 기본 타입과 참조 타입이 있는데 오늘은 기본타입만 공부할 예정이담..!
*기본타입(primirive)
기본타입이란 정수, 실수, 문자, 논리 리터럴을 직접 저장하는 타입을 말한다.
값의 종류 | 기본 타입 | 메모리 사용 크기 | |
정수 | byte | 1byte | 8bit |
char | 2byte | 16bit | |
short | 2byte | 16bit | |
int | 4byte | 32bit | |
long | 8byte | 64bit | |
실수 | float | 4byte | 32bit |
double | 8byte | 64bit | |
논리 | boolean | 1byte | 8bit |
!!주의할 점!!
-실행 중 저장할 수 있는 값의 범위를 초과하면 최소값부터 다시 반복 저장됨
예) byte일 경우, -128(최소값)부터 시작해서 127(최대값)을 넘으면 다시 -128부터 시작
-char 타입의 변수를 단순히 초기화 할 목적으로 작은 따옴표(') 두 개를 연달아 붙인 빈(empty)문자를 대입하면 컴파일 에러 발생 => 공백하나를 포함해서 초기화 해야함
ex) char c = ''; //컴파일 에러 => char c = ' ';
-int 타입은 자바에서 정수연산을 하기 위한 기본 타입
-long타입의 변수를 초기화할 때, int 타입의 저장 범위를 넘어서는 큰 정수는 반드시 소문자 'l'이나 대문자 'L'을 붙여야 함
ex) long var3 = 1000000000000; //컴파일 에러
long var4 = 1000000000000L;
-자바는 실수 리터럴의 기본 타입을 double로 간주함
=> 실수 리터럴을 float타입 변수에 저장하려면 리터럴 뒤에 소문자 'f'나 대문자 'F'를 붙여야 함
ex) float var2 = 3.14; //컴파일 에러
float var3= 3.14F;
(3) 타입 변환
타입 변환이란 데이터 타입을 다른 데이터 타입으로 변환하는 것을 말한다.
타입변환에는 자동(묵시적)타입변환과 강제(명시적)타입변환이 있다.
*자동타입변환
: 작은 크기를 가지는 타입이 큰 크기를 가지는 타입에 저장될 때 자동적으로 타입 변환이 일어나는 것
byte(1) < short(2) < int(4) < long(8) < float(4) < double(8) |
자동 타입변환이 발생되면 변환 이전의 값과 변환 이후의 값은 동일
!주의할 점!
-byte타입을 char타입으로 자동변환시킬수 없음
(char의 범위는 0~65535이므로 음수가 저장될 수 없기 때문)
*강제타입변환(캐스팅: Casting)
: 강제적으로 큰 데이터 타입을 작은 데이터 타입으로 쪼개어서 저장하는 것
캐스팅 연산자()를 사용하는데, 괄호 안에 들어가는 타입은 쪼개는 단위이다.
예시를 보면 더 이해하기 쉽다.
int intValue = 103029770;
byte byteValue = (byte) intValue; //강제 타입 변환
int타입인 intValue 변수(4byte)는 byte타입 byteValue 변수(1byte)에 저장할 수 없다. 그래서 (byte)캐스팅 연산자를 사용해 int타입 intValue를 1byte씩 쪼개어 끝에 있는 1byte만 byteValue변수에 저장하는 것이다.
실수타입(float, double)은 정수타입(byte, short, int, long)으로 강제 타입변환될 때 소수점 이하 부분은 버려지고, 정수부분만 저장된다.
*연산식에서의 자동 타입 변환
연산은 기본적으로 같은 타입의 피연산자 간에만 수행된다.
때문에 서로 다른 타입의 피연산자가 있을 경우 두 피연산자 중 크기가 큰 타입으로 자동 변환된 후 연산을 수행함.
-크기가 4byte보다 작은 타입(byte, char, short)은 int 타입으로 변환된 후 연산 수행됨
(자바는 피연산자를 4byte 단위로 저장하여 정수 연산의 경우 int타입을 기본으로 하기 때문)
-피연산자 중 하나가 long 타입일 경우, 다른 피연산자도 long타입으로 자동 타입 변환되고 연산의 결과도 long 타입이 됨
-float타입과 float타입의 연산 결과: float타입
-피연산자 중 실수리터럴이나 double타입이 있는 경우, 다른 피연산자도 double타입으로 자동 타입 변환되고 연산의 결과도 double타입이 됨
2. 연산자
연산자 종류 | 연산자 | 피연산자 수 | 산출값 | 기능 설명 |
산술 | +, -, *, /, % | 이항 | 숫자 | 사칙연산 및 나머지 계산 |
부호 | +, - | 단항 | 숫자 | 음수와 양수의 부호 |
문자열 | + | 이항 | 문자열 | 두 문자열을 연결 |
대입 | =, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>= | 이항 | 다양 | 우변의 값을 좌변의 변수에 대입 |
증감 | ++, -- | 단항 | 숫자 | 1만큼 증가/감소 |
비교 | ==, !=, >, <, >=, <=, instanceof | 이항 | boolean | 값의 비교 |
논리 | !, &, |, &&, || | 단항 이항 |
boolean | 논리적 NOT, AND, OR 연산 |
조건 | (조건식)? A : B | 삼항 | 다양 | 조건식에 따라 A 또는 B중 하나를 선택 |
비트 | ~, &, |, ^ | 단항 이항 |
숫자 boolean |
비트 NOT, AND, ORm XOR 연산 |
쉬프트 | >>, <<, >>> | 이항 | 숫자 | 비트를 좌측/우측으로 밀어서 이동 |
연산자 | 연산방향 | 우선순위 |
증감(++, --), 부호(+,-), 비트(~), 논리(!) | <------------------------------ | 높음 낮음 |
산술(*, /, %) | ------------------------------> | |
산술(+, -) | ------------------------------> | |
쉬프트(<<,>>,>>>) | ------------------------------> | |
비교(<, >, <=, >=, instanceof) | ------------------------------> | |
비교(==, !=) | ------------------------------> | |
논리(&) | ------------------------------> | |
논리(^) | ------------------------------> | |
논리(|) | ------------------------------> | |
논리(&&) | ------------------------------> | |
논리(||) | ------------------------------> | |
조건(?:) | ------------------------------> | |
대입(=, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>=) | <------------------------------ |
1. 단항, 이항, 삼항 연산자 순으로 우선순위를 가진다.
2. 산술, 비교, 논리, 대입 연산자 순으로 우선순위를 가진다.
3. 단항과 대입 연산자를 제외한 모든 연산의 방향은 왼쪽에서 오른쪽이다.(->)
4. 복잡한 연산식에는 괄호()를 사용해서 우선순위를 정해준다.
3. 조건문과 반복문
(1)조건문
*if문
:조건식의 결과에 따라 블록의 실행 여부가 결정됨
조건식 true -> 블록 실행
조건식 false -> 블록 실행x
*switch문
:변수가 어떤 값을 갖느냐에 따라 실행문이 선택됨
괄호 안의 값과 동일한 값 갖는 case o -> 그 case로 가서 실행문 실행
괄호 안의 값과 동일한 값 갖는 case x -> default로 가서 실행문 실행
(2)반복문
*for 문
: 주어진 횟수만큼 실행문을 반복 실행할 때
for(초기화식; 조건식; 증감식){
실행문;
}
*while문, do-while문
:조건에 따라 반복할 때
조건식이 true일 경우 -> 계속 반복
조건식이 false일 경우 -> 반복행위 멈추고 종료
while문 | do-while문 |
while(①조건식){ ② 실행문; } |
do{ ②실행문; }while(①조건식); |
(조건식이 참이라는 가정) 1 -> 2 -> 1 -> ... |
(조건식이 참이라는 가정) 2 -> 1 -> 2 -> ... |
*break문, continue문
조건이 맞을 경우
break- 실행을 중지하여 반복문 종료
continue- 이후의 문장을 실행하지 않고 다음 반복으로 넘어감(반복문 종료x)