이것이 자바다 - Part 02

mj·2023년 1월 9일
0
post-thumbnail

Part 02 변수와 타입

변수 선언


프로그래밍 언어는 데이터를 어디에 어떤 방식으로 저장할지 정하고 메모리를 관리하기 위해 변수를 사용한다.

변수 는 하나의 값을 저장할 수 잇는 메모리 번지에 붙여진 이름이다. 변수를 통해 프로그램은 메모리 번지에 값을 저장하고 읽을 수 있다.

변수 선언

변수 사용을 위해서는 변수 선언이 필요하다.
변수 선언은 저장할 데이터 타입이 무엇인지, 변수 이름은 무엇인지 결정하는 것이다.

int age;		//정수(int)값을 저장할 수 잇는 age 변수 선언
double value;	//실수(double) 값을 저장할 수 있는 value 변수 선언

변수 이름 규칙
1. 첫 번쨰 글자가 문자여야 한다.
2. 중간부터는 문자, 숫자, $, _ 를 포함할 수 있다.
3. 첫 문자를 소문자로 시작하되 캐멀 스타일로 작성하는 것이 관례이다.

캐멀 스타일
코드를 작성할 때 여러 단어를 혼합하여 명명하는 경우, 낙타의 등처럼 대소문자가 섞여있도록 작성하는 스타일을 말한다.
자바 소스 파일명과 변수명을 작성할 때 관례적으로 사용한다.
1. 자바 소스 파일명(클래스명)은 대문자로 시작
2. 변수명은 소문자로 시작

변수 초기화

변수가 선언되었다면 값을 저장할 수 있다. 값을 저장할 때는 대입연산자 = 를 사용한다.

int score;		//변수 선언
score = 90;		//값 대입

변수의 초기값은 변수를 선언함과 동기에 대입할 수도 있다.

int score = 90;

정수


정수 타입

자바에서 정수 타입은 다음과 같다.

타입메모리 크기저장되는 값의 허용범위
byte1byte-128 ~ 127
short2byte-32,768 ~ 32,767
char2byte0 ~ 65535
int4byte-2,147,483,648 ~ 2,147,483,647
long8byte-9,223,372,036,854,775,808 ~ -9,223,372,036,854,775,808

c언어에서 char 타입이 1byte 인 것에 비해 자바는 2byte인 것을 볼 수 있다.
c언어에서는 문자를 1byte인 ASCII 로 표현을 하고, 자바에서는 2byte인 유니코드로 표현을 하기 때문에 차이가 발생한다.

자바의 long 타입은 c언어의 long long 타입과 크기가 동일한 것을 볼 수 있다.

리터럴

자바에서 정수 리터럴은 2진수, 8진수, 10진수, 16진수가 있다.
각각의 표현은 다음과 같다.

  • 2진수 : 0b 또는 0B로 시작하고 0과 1로 작성
int x = 0b1011;
int y = 0B10100;
  • 8진수 : 0으로 시작하고 0~7 숫자로 작성
int x = 013;
int y = 0206;
  • 10진수 : 소수점이 없는 0~9 숫자로 작성
int x = 12;
int y = 365;
  • 16진수 : 0x 또는 0X로 시작하고 0~9 숫자나 A, B, C, D, E, F 또는 a, b, c, d, e, f 로 작성
int x = 0xB3;
int y = 0x2A0F;

문자


문자 타입

자바에서 문자 타입은 다음과 같다.

타입메모리 크기저장되는 값의 허용범위
char2byte0 ~ 65535

리터럴

하나의 문자를 작은따옴표(')로 감싼 것을 문자 리터럴이라고 한다.

자바에서 문자 리터럴은 유니코드로 변환되어 저장되는데, 유니코드가 2byte 크기의 정수이므로 char 타입도 정수 타입에 속하며 그 크기는 2byte 이다.

char var1 = 'A';
char var3 = '가';

실수


실수 타입

자바에서 실수 타입은 다음과 같다.

타입메모리 크기저장되는 값의 허용범위유효 소수 이하 자리
float4byte1.4e-45 ~ 3.4e387자리
double8byte4.9e-324 ~ 1.8e30815자리

리터럴

  • 10진수 리터럴
double x = 0.25;
double y = -3.14;
  • e 또는 E가 포함된 10의 거듭제곱 리터럴
double x = 5e2;
double y = 0.12E-2;

컴파일러는 실수 리터럴을 기본적으로 double 타입으로 해석하기 때문에 실수 리터럴을 float 타입 변수에 대입할려면 리터럴 뒤에 'f' 나 'F'를 붙여야 한다.

float var = 3.14f;
float var = 3E6F;

Boolean


논리 타입

논리 타입은 다음과 같다.
boolean 타입 변수는 주로 두 가지 상태값을 저장할 필요가 있을 경우 사용된다.ㄷ

boolean stop = true;
boolean stop = false;

리터럴

참과 거짓을 의미하는 논리 리터럴은 truefalse이다.


문자열


문자열 타입

char 타입 변수는 단일 문자만 저장이 가능하고 문자열은 저장할 수 없다. 문자열을 저장하기 위해서는 String 타입을 사용해야 한다.
String 타입은 자바 기본 타입에 속하지 않는 참조 타입이다.

String str1 = "A";
String str2 = "홍길동";

리터럴

문자 리터럴은 작은따옴표(')로 감싼 한 개의 문자이고. 문자열 리터럴은 큰따옴표(")로 감싼 여러개의 문자집합이다.

문자열 내부에는 다음과 같은 이스케이프 문자를 사용할 수 있다.

이스케이프 문자설명
\"" 문자 포함
\'' 문자 포함
''\ 문자 포함
\u16진수16진수 유니코드에 해당하는 문자 포함
\t출력 시 탭만큼 띄움
\n출력 시 줄바꿈(라인피트)
\r출력 시 캐리지 리턴

타입 변환


자동 타입 변환

자동 타입 변환은 말 그대로 자동으로 타입변환이 일어나는 것을 말한다.
자동 타입 변환은 값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 대입될 때 발생한다.

byte < short, char < int < long < float < double

char 타입은 음수를 포함하지 않으므로, 음수를 포함하는 byte 타입은 char 타입으로 자동 변환 될 수 없다.

byte byteValue = 65;
char charValue = byteValue; 	//컴파일 에러

강제 타입 변환

큰 허용 범위 타입은 작은 허용 범위 타입으로 자동 타입 변환 될 수 없다.
큰 허용 범위 타입을 작은 허용 범위 타입으로 쪼개어서 저장하는 것을 강제 타입 변환이라고 한다.

  • int -> byte
int intValue = 10;
byte byteValue = (byte) intValue;
  • long -> int
long longValue = 300;
int intValue = (int) longValue;
  • int -> char
int intValue = 65;
char charValue = (char) intValue;
System.out.println(charValue)	//'A' 출력
  • 실수 -> 정수
double doubleValue - 3.14;
int intValue = (int)doubleValue; 	// 3 저장

연산식에서 자동 타입변환

서로 다른 타입간의 연산식에서는 허용 범위가 더 큰 타입으로 자동 타입 변환된다.

int intValue = 10;
double doubleValue = 5.5;
double result = intValue + doubleValue;		// 10.0 + 5.5

자바에서 + 연산자는 두가지 기능을 가지고 있다. 피연산자가 모두 숫자일 경우에는 덧셈 연산을 수행하고, 피연산자 중 하나가 문자열일 경우에는 나머지 피연산자도 문자열로 자동 변환되어 문자열 결합 연산을 수행한다.

String str = "3" + 7		//"37"
String str = 3 + 4 + "7"	//7 + "7" -> "77"

문자열을 기본타입으로 변환

자바에서 문자열을 기본타입으로 변환하는 방법은 다음과 같다.

변환 타입메소드
byteByte.parseByte(str)
shortShort.parseShort(str)
intInteger.parseInt(str)
longLong.parseLong(str)
floatFloat.parseFloat(str)
doubleDouble.parseDouble(str)
booleanBoolean.parseBoolean(str)

변수 사용 범위


중괄호 {} 블록 내에서 선언된 변수는 해당 중괄호 {} 블록 내에서만 사용이 가능하고 밖에서는 사용할 수 없다.

int v1 = 15;
if (v1 > 10) {
	int v2 = v1 - 10;
}
int v3 = v1 + v2 + 5;	//컴파일 에러 발생

문제

  1. 변수에 대해 잘못 설명한 것은 무엇입니까?
  • 변수는 초기값이 저장되지 않은 상태에서는 읽을 수 없다.
  1. 변수 이름으로 사용할 수 없는 것을 모두 선택하세요.
  • class
  • 6hour
  • #name
  • int
  1. 다음 표의 빈 칸에 자바의 기본 타입 8개를 적어보세요
  • 정수 타입: byte, short, char, int, long
  • 실수 타입: float. double
  • 논리 타입: boolean
  1. 다음 코드에서 타입, 변수 이름, 리터럴에 해당하는 것을 적어보세요.
  • 타입: int, double
  • 변수 이름: age, price
  • 리터럴: 10, 3.14
  1. 다음 자동 타입 변환에서 컴파일 에러가 발생하는 것을 선택하세요.
byte byteValue = 10;
char charValue = 'A';
  • short shortValue = charValue;
  1. 다음 강제 타입 변환에서 컴파일 에러가 발생하는 것을 선택하세요.
int intValue = 10;
char charValue = 'A';
double doubleValue = 5.7;
String strValue = "A";
  • char var = (char) strValue;
  1. 변수를 잘못 초기화한 것은 무엇입니까?
  • char var3 = '';
  1. 콘솔에 값을 입출력하는 방법에 대해 잘못 설명한 것을 선택하세요.
  • System.out.printf("형식", 변수)는 주어진 형식대로 변수값을 바꾼다.
  1. 연산식의 타입 변환 중에서 컴파일 에어가 발생하는 것을 선택하세요.
byte byteValue = 10;
float floatValue = 2.5f;
double doubleValue 2.5;
  • byte result = byteValue + byteValue;
  1. 문자열을 기본 타입으로 변환하는 코드로 틀린 것을 고르세요.
String str = "5";
  • int var2 = Int.parseInt(str);
  1. 다음 코드에서 컴파일 에러가 발생하는 라인을 모두 적어보세요
int v1 = 1;
System.out.println("v1: " + v1);
if(true) {
	int v2 = 2;
	if(true) {
		int v3 = 2;
		System.out.println("v1: " + v1);
		System.out.println("v2: " + v2);
		System.out.println("v3: " + v3);
	}
	System.out.println("v1: " + v1);
	System.out.println("v2: " + v2);
	System.out.println("v3: " + v3);
}
System.out.println("v1: " + v1);
System.out.println("v2: " + v2);
  • 13행, 16행
profile
사는게 쉽지가 않네요

0개의 댓글