본문 바로가기

STUDY/국비과정

[JAVA 웹 개발 공부] 국비지원 4일차 - 변수 타입, 상수와 리터럴, 형변환, 연산자, 예제 문제

변수 타입

 

1. 기본형

기본형은 계산을 위한 실제 값을 저장한다.

기본형에는 모두 8개의 타입이 있으며, 크게 논리형, 문자형, 정수형, 실수형으로 구분된다.

*논리형 [boolean]

true와 false 중 하나를 값으로 가지며, 조건식과 논리적 계산에 사용된다.

*문자형 [char]

문자를 저장하는데 사용되며, 변수에 하나의 문자만 저장할 수 있다.

*정수형 [byte, short, int, long]

정수를 저장하는데 사용되며, 주로 int가 사용된다. byte는 이진 데이터를 다룰 때 사용되며, 

short은 C언어와의 호환을 위해서 추가되었다.

*실수형 [float, double]

실수를 저장하는데 사용되며, 주로 double이 사용된다.

분류
종류
크기
범위
정수형
byte
1바이트
-128 ~ 127
short
2바이트
-32,768 ~ 32,767
int
4바이트
-2,147,483,648 ~ 2,147,483,647
long
8바이트
-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
실수형
float
4바이트
1.4E-45 ~ 3.4028235E38
double
8바이트
4.9E-324 ~ 1.7976931348623157E308
문자형
char
2바이트
0 ~ 65535(유니코드)
논리형
boolean
1비트
true / false

2. 참조형

참조형은 객체를 참조할 수 있는 값이 저장되어 있다. 

참조 값은 대개 주소이지만 다른 형태의 참조 값도 가능하다.

상수와 리터럴

 

1. 상수(constant)

상수는 변수와 마찬가지로 값을 저장할 수 있는 공간이지만, 

변수와 달리 한번 값을 저장하면 다른 값으로 변경할 수 없다. 

상수를 선언하는 방법은 변수와 동일하며, 단지 변수의 타입 앞에 키워드 'final'을 붙여주기만 하면 된다.

2. 리터럴(literal)

리터럴 이란, x = 100;에서 100과 같이 소스 코드에 직접 쓰여 있는 값을 의미한다.

리터럴에는 정수형, 부동소수점형, 문자형 등의 여러 가지 타입이 있다.

형변환

 

1. 자동적인 형변환

컴퓨터에서는 산술적인 연산을 하기 전에 피연산자의 타입을 통일하여야 한다. 

수식을 계산할 때는 가장 범위가 넓은 피연산자의 타입으로 변환된다.

byte > short > int > long > float > double​ 방향으로 형변환 된다.

ex) double sum = 1.3 + 12; // 13.3

2. 강제적인 형변환

강제적인 형변환을 하려면 형변환 연산자를 사용한다. 변환하려는 값의 앞에 원하는 자료형을 적어준다.

ex) i = (int) 12.5; // i = 12

ex) int numberOfA = (int) 'A'; // numberOfA = 65

3. 형변환 예시

코드
출력 결과
double f;
f = 1 / 5; 
System.out.println(f);
0.0
// int와 int의 계산이므로 계산 값이 0인데
f가 double형 이므로 값을 대입할 때 형변환 되면서
0.0이라는 결과값이 나온다.
double f;
f = (double) 1 / 5;
System.out.println(f);
0.2
// (double) 1 이 먼저 실행돼서 1이 1.0으로 형변환된다.
그 후에 1.0 / 5가 계산되는데 int형 5가 double형으로
형변환된 후 계산된다.
int i;
i = (int) (1.7 + 1.8);
System.out.println(i);
3
// 1.7 + 1.8 이 먼저 계산된 후 3.5가 int로 형변환되므로,
3이 된다.
int i;
i =(int) 1.7 + (int) 1.8;
System.out.println(i);
2
// (int) 1.7 = 1, (int) 1.8 = 1 로 돼서
1 + 1 = 2 가 된다.
int i;
double f;
int result = (int) 12.3 + (double) 10;
System.out.println(result);
error
// (int) 12.3 = 12, (double) 10 = 10.0 이 된다.
12 + 10.0 = 22.0은 double형이므로 int형인 result에
담지 못해서 에러가 난다.
int i;
double f;
int result = (int) ((int) 12.3 + (double) 10);
System.out.println(result);
22
// (int) 12.3 = 12, (double) 10 = 10.0 이 된다.
12 + 10.0 = 22.0 이 되고, (int) 22.0 = 22 가 된다.

연산자

 

1. 산술 연산

덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%)

2. 증감 연산자

증감 연산자
차이점
++i
수식의 값은 증가된 i값이다.
i++
수식의 값은 증가되지 않은 원래의 i값이다.
--i
수식의 값은 감소된 i값이다.
i--
수식의 값은 감소되지 않은 원래의 i값이다.

*증감 연산자 사용 예시

코드
출력 결과
int num = 12;
System.out.println(num++);
12
int num = 12;
System.out.println(++num);
13
double d = 44.33;
d++;
System.out.println(d);
45.33
char c = 'c';
c++;
System.out.println(c);
d
boolean b = true;
b++;
System.out.println(b);
error
String s = "c";
s++;
System.out.println(s);
error

3. 복합 대입 연산자

복합 대입 연산자
의미
x += y
x = x + y
x -= y
x = x - y
x *= y
x= x * y
x /= y
x = x / y
x %= y
x = x % y

4. 관계 연산자

관계 연산자는 두 개의 피연산자를 비교하는데 사용된다. 

관계 연산자의 결과는 true(참) 아니면 false(거짓)으로 계산된다.

연산자 기호
의미
사용 예
==
x와 y가 같은가?
x == y
!=
x와 y가 다른가?
x != y
>
x가 y보다 큰가?
x > y
<
x가 y보다 작은가?
x < y
>=
x가 y보다 크거나 같은가?
x >= y
<=
x가 y보다 작거나 같은가?
x <= y

5. 논리 연산자

연산자 기호
사용 예
의미
&&
x && y
AND 연산, x와 y가 모두 참이면 참, 그렇지 않으면 거짓
||
x || y
OR 연산, x나 y 중에서 하나만 참이면 참, 모두 거짓이면 거짓
!
!x
NOT 연산, x가 참이면 거짓, x가 거짓이면 참

 

예제 문제

 

<예제 01>

교재 85p 8번 구 부피 계산기

사용자로부터 구의 반지름을 입력받아서 부피를 계산하여 출력하는 프로그램을 작성하라. 

단 구의 반지름은 실수로 입력되며 출력도 모두 실수형으로 하여야 한다.

<예제 02>

교재 83p 2번 단위환산

마일을 킬로미터로 변환하는 프로그램을 작성하라. 1마일은 1.609킬로미터와 같다.

사용자부터 마일의 값을 읽어 들인다.

 

마일을 입력하시오: 10

10.0마일은 16.09킬로미터입니다.

<예제 03>

사용자에게 정수 입력을 받아

짝수면 true, 홀수면 false를 출력하기

<예제 04>

사용자에게 3대 (벤치, 스쿼트, 데드) 중량을 입력받아

500이상이면 true, 미만인 경우 false를 출력하기

<예제 05>

사용자에게 입력받은 정수가

100 ~ 999 사이의 수라면 true, 외의 경우 false를 출력하기

<예제 06>

사용자가 입력한 3개의 정수가

1씩 차이가 나고, 순서대로 입력된 경우 true, 그 외 false 출력하기

예) 1 2 3 => true, 2 3 5 => false, 9 8 7 => false

<예제 07>

사용자가 입력한 2개의 5자리 정수가

서로 좌우대칭인 경우 true, 그 외 false 출력하기

예) 12345 54321 => true, 15533 99002 => false

(다른 풀이법)

정수를 문자열로 변환하기(Int to String)

*String.valueOf() 메소드

*Integer.toString() 메소드

*String.format() 메소드

*StringBuilder 및 StringBuffer