Java/개념

2. 변수와 타입/ 연산자/ 조건문과 반복문

열지희공 2021. 1. 11. 07:27

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

 

if-else if-else문을 이용해 등급을 판별하는 예제

 

*switch문

:변수가 어떤 값을 갖느냐에 따라 실행문이 선택됨

괄호 안의 값과 동일한 값 갖는 case o -> 그 case로 가서 실행문 실행

괄호 안의 값과 동일한 값 갖는 case x -> default로 가서 실행문 실행

 

switch문을 이용해 주사위 번호 하나를 뽑는 예제

 

 

(2)반복문

*for 문

: 주어진 횟수만큼 실행문을 반복 실행할 때

 

for(초기화식; 조건식; 증감식){

실행문;

}

 

for문을 이용해 1부터 100까지 합을 출력하는 예제

 

*while문, do-while문

:조건에 따라 반복할 때

 

조건식이 true일 경우 -> 계속 반복

조건식이 false일 경우 -> 반복행위 멈추고 종료

while문 do-while문
while(조건식){
 
    ② 실행문;

}
do{

   ②실행문;

}while(조건식);
(조건식이 참이라는 가정)
1 -> 2 -> 1 -> ...
(조건식이 참이라는 가정)
2 -> 1 -> 2 -> ...

 

 

while문을 이용해 1부터 100까지 합을 출력

 

*break문, continue문

조건이 맞을 경우

break- 실행을 중지하여 반복문 종료 

continue- 이후의 문장을 실행하지 않고 다음 반복으로 넘어감(반복문 종료x)