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);

 

 

참고자료
신용권, '혼자 공부하는 자바'

 

반응형