Study/Academy
[Study #02] 변수와 데이터 타입
PEAZH
2023. 6. 14. 19:17
반응형
01. 변수
- 의미 : 변하는 수, 값을 저장할 수 있는 메모리의 특정 번지에 붙이는 이름
- 프로그램이 진행할 때 중간의 값을 저장해 두기 위한 공간
- 반대어 : 상수 (= 변하지 않는 수, 파이)
- 예시 : 이름 = 상수, 계좌 잔액 = 변수
- 하나의 변수에서 동시에 두가지 값을 저장할 수 없고, 하나의 값만 저장할 수 있음
02. 변수 선언
- 데이터를 저장할 타입(int)과 변수 이름(num)을 정해야 함
int num = 101;
타입 변수 리터럴=고정된 값
- 변수에 값을 저장할 때에는 대입 연산자(=) 사용
- 대입 기호 기준으로 양 변의 데이터 타입이 동일해야 함
- 오른쪽의 값(101)을 왼쪽의 변수(num)에 저장한다는 의미
- 같은 타입의 변수는 콤마(,)를 이용해서 한꺼번에 선언할 수 있음
- 같은 타입의 변수는 한 라인에 세미콜론(;) 없이 계속 선언 가능
- 변수는 한번 선언되면 그 변수를 포함하고 있는 중괄호{} 블록 내에선 절대 재선언 불가능
- 변수에 값이 저장되지 않으면 변수를 활용할 수 없음
- 지역 변수는 반드시 활용 전 초기화를 해야 함
- 지역 변수 : 메소드 블록 내에서 선언된 변수
- 변수 초기화 : 변수에 최초로 값이 저장될 때 변수가 생성되는 것
public class Variable01 {
int num = 100;//변수 선언, 값 지정
public static void main(String[] args) {
int num = 100;// 지역 변수 = 메소드 속에서 생성
int num2, num3, num4, num5;// 선언만
num2 = 15;
int num6 = 10, num7 = 11, num8 = 12;// 초기화
System.out.println(num6);// 초기화o
}
}
03. 클래스명
- 클래스는 지역변수를 제외한 클래스 변수, 메소드, 생성자들의 집합
- 사용 가능한 문자 : 영어 소문자, 대문자, 숫자, $, _
(단, 숫자는 이름 첫머리에 올 수 없음) - 첫 글자는 대문자로 시작
- 두 단어 이상의 조합일 경우 : 새로운 단어 첫머리글자는 대문자
- 파스칼 표기법 (ex. AppleKorea)
04. 메소드명, 변수명
- 메소드는 함수(function) 명령어들의 집합
- 사용 가능한 문자 : 영어 소문자, 대문자, 숫자, $, _
(단, 숫자는 이름 첫머리에 올 수 없음) - 첫 글자는 소문자로 시작
- 두 단어 이상의 조합일 경우 : 뒤에 오는 첫 글자를 대문자
- 카멜 표기법 (ex. appleKorea)
05. 상수명
- 사용 가능한 문자 : 영어 소문자, 대문자, 숫자, $, _
(단, 숫자는 이름 첫머리에 올 수 없음) - 모든 단어를 대문자로 구성
- 두 단어 이상의 조합일 경우 : 두 단어 사이에 _ 붙임
- 스테이크 표기법 (ex. APPLE_KOREA)
06. 사용할 수 없는 이름
- 예약어는 사용 불가
- 예약어 : 자바에서 프로그래밍 진행에 필요한 단어를 미리 등록한 단어
- ex) boolean, byte, char, new, class,...
07. 데이터 타입
- 데이터 타입 : 프로그램에서는 변수, 상수에 값을 담기 위해서 반드시 그 타입에 맞는 변수를 사용해야 함
- 데이터 타입은 크게 R타입(Reference Type, 참조 타입)과 P타입(Primitive Type, 기본 타입)이 있음
- 기본 타입 8개 외에는 전부 R타입
P 타입
타입 | 타입 | 크기 | 범위 |
정수타입 | byte | 8bit | -128 ~ 127 |
short | 2byte | -32,768 ~ 32,767 | |
int | 4byte | -2,147,483,648 ~ 2,147,483,647 | |
long | 8byte | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | |
실수타입 | float | 4byte | -1.4E-45 ~ 3.4028235E38 |
double | 8byte | 4.9E-324 ~ 1.7976931348623157E308 | |
문자 타입 | char | 2byte | 0 ~ 65535 하나의 단일문자(유니코드) |
논리 타입 | boolean | 1byte | true or false |
- 정수의 기본타입 : int / 실수의 기본타입 : double
- 데이터 타입 크기 비교 : byte < short < int < long < float < double
(정수보다 실수를 더 큰 수로 인지)
01) 프로모션
- 변수를 대입할 때 작은 타입을 큰 타입에 대입하는 형태
- 자바에서는 자동으로 대입
[ 예시 ]
int num;
byte num1 = 10;
num = num1;
//byte를 int에 대입
//byte보다 더 큰 int에 들어가므로 자동 대입
System.out.println(num);//10
int iNumber = 14;
double dNumber = iNumber;//int를 double에 대입
//int보다 더 큰 double에 들어가므로 자동 대입
System.out.println(dNumber);//14.0
//double 타입으로 자동 변환
02) 캐스트
- 큰 타입을 작은 타입에 대입할 때 범위를 초과하므로 'type'을 명기해서 값을 대입시킴
- 상위 비트를 대입되는 타입에 맞게 잘라내기 때문에 값의 변화(값의 절삭)가 올 수 있음
[ 예시 ]
double dNum = 3.14;
iNum1 = (int) dNum;//double타입을 int에 대입
System.out.println(iNum1);//3.14인 값이 캐스트 되어 int타입인 3으로 출력
double num1 = (int) 3.9315;//데이터 타입 변환
//3.9315를 int 타입으로 변환해 3으로 변경 (값의 절삭)
//3을 double 타입으로 변환해서 3.0이 출력
[ 활용 ]
byte bNumber = (byte) 128;
System.out.println(bNumber);//-128
//byte는 범위가 -128 ~ 127 이므로 그 범위 안에서 돌면서 출력
short sNum = (short) (32767 + 1);
System.out.println(sNum);//-32768
//short의 범위가 -32,768 ~ 32,767 이므로 그 범위 안에서 돌면서 출력
int iNum = (int) 2147483648;//컴파일 오류
long lNum = 2147483649L;//오류 해결
int iNum = 0;
iNum = Integer.MAX_VALUE;//Integer의 최대값
System.out.println(iNum);//2147483647
iNum = Integer.MIN_VALUE;//Integer의 최저값
System.out.println(iNum);//-2147483648
long lNum = 9223372036854775807L;//int값을 벗어난 long 타입을 써줄 땐 뒤에 L을 써줘야 함
System.out.println(lNum);//9223372036854775807
System.out.println(Long.MIN_VALUE);//-9223372036854775808
float fNum = 3.14F;//float 타입은 뒤에 F를 써주거나
float fNum = (float) 3.14;//(float)로 캐스트 걸어주기
System.out.println(fNum);//3.14
[ 예제 ]
과수원을 경영하고 있습니다. 키우는 과일은 사과, 배, 오렌지입니다. 하루 생산량은 각각 5, 7, 5개입니다. 위 값을 기준으로 하루에 총 생산되는 과일의 수를 출력시키고, 하루를 기준으로 시간당 몇 개의 과일이 생산되는지를 출력해 주세요.
예) 총 생산 개수 : 17개
시간당 생산 개수 : 0.00145
int apple, pear, orange, total;
float avg;
apple = 5;//리터럴
pear = 7;
orange = 5;
total = apple + pear + orange;
avg = total / 24F;//방법 1
avg = (float) (total / 24.0);//방법 2
System.out.println("총 생산 개수 : " + total + "개");//총 생산 개수 : 17개
System.out.println("시간 당 생산 개수 : " + avg + "개");//시간 당 생산 개수 : 0.7083333개
03) 문자형 (char)
- 문자 하나를 저장하기 위한 타입
- 반드시 값으로는 문자 하나만 존재해야 하며 하나 이상일 경우엔 String(문자열)에 저장
- 정수 타입으로 음수가 없는 유니코드 0 ~ 65,535의 범위를 가짐
- 문자값을 표현할 때는 반드시 홀따옴표('') 사용
- 정수 타입이기 때문에 int에 프로모션 됨
[ 활용 ]
char ch = '가';
ch = 'A';
ch = '家';
ch = '\ub059';// 유니코드 표기
System.out.println(ch);//끙
char ch = '가';
String str = ch + "";//데이터 타입을 스트링으로 변경
System.out.println(str);//가
str = "안녕하세요";
System.out.println(str);//안녕하세요
ch = str.charAt(4);//charAt 4번째의 있는 것을 뽑아주세요 라는 뜻
System.out.println(ch);//요
ch = '9';
System.out.println(ch);//9
ch = 9;//char 타입에 따옴표를 안 붙이면 아스키 코드가 나옴
System.out.println(ch);//공백 (아스키 코드)
ch = 33;
System.out.println(ch);//! (아스키 코드)
int num = 66;
System.out.println(num);//66
System.out.println((char) num);//B
char c = 48;
c = (char) (c + 9); //48+9 = 57 해서 아스키 코드 '57'인 9가 나옴
System.out.println(c);//9
System.out.println( (char) 65 ); //A
System.out.println( (char) 66 ); //B
System.out.println( (char) 67 ); //C
System.out.println( (char) 68 ); //D
for (int i = 97; i < 123; i++) {//a~z가 나옴
System.out.print((char) i);
}
03) 논리형 (boolean)
- 저장할 수 있는 값 : trun 참 ON 1 / false 거짓 OFF 0
boolean check = 1 + 2 > 3 ;//글자가 아닌 상태를 저장한 것
//계산 순서 : 3 1 2
System.out.println( check );//false
boolean check1 = !true ;
//! = 반전 not
System.out.println( check1 );//false
System.out.println( (char) 35376);
참고자료
신용권, '혼자 공부하는 자바'
반응형