프로그래밍/Java 공부

변수, 데이터 타입, 형변환

개발계발게발 2021. 5. 19. 00:31
반응형

// 2021-05-18
/* 능력단위명 : 응용 SW 기초 기술 활용
 * 능력단위요소 : 데이터베이스 기초 기술 활용
 */

Variable 변수


변수를 사용하는 주 목적은 같은 타입(type)의 값이
 프로그램 실행시에 자주 변경되어야 할 때 변수에 담아서 활용하기 위함

 

1. 변수의 선언(초기화) 규칙 (★★★★★)

  • 변수는 특정 블럭{} 내부 어디에서나 선언 가능
  • 메소드 바디 내부에서 처음 선언되면 = 지역(local)변수
  • 클래스 바디 내에서 선언되면 = 인스턴스(객체) 변수

2. 변수가 처음 선언되어지면 그 변수를 포함하고 있는 블럭내에선 절대로 재선언이 불가능(중요)

   동일 변수명(이름)으로 선언 불가


3. 변수가 처음 선언될때는 반드시 변수 좌측에
변수의 타입(type) 데이터 타입이 선언되어야 한다.

 4. 같은 타입의 변수는 한 라인에 ; 없이 계속 선언되어질 수 있고
   ,로 구분하여 마지막 변수 끝에;를 붙여준다.

 5. 지역 변수는 반드시 사용전에 값이 초기화 되어야 한다.
 ※※※중요※※※

 

public class Variable {	
	//int number2;//인스턴스 변수
	public static void main(String[] args) {
		//데이터 타입 변수명 = 값;
		int number , num1, num2; // 변수 선언
		int num4 = 100; //변수 선언 + 초기화
		number = 1000; // 변수 호출 + 값대입(초기화)
		
		number = 1; // 값 변경
		System.out.println(number);	
		// 동일 변수명 모두 변경 Alt + Shift + R 
		// 변수가 선언된 위치로 이동 Ctrl + 변수 클릭
		
		//상수
		final int PAGE_NUMBER = 10;//변수선언 + 초기화 final 수정 불가\
		//리터럴
		//PAGE_NUMBER = 100;
		System.out.println(PAGE_NUMBER);
	}

}

 

String

public class Variable2 {
	public static void main(String[] args) {
		//String 문자열, 기타줄, 바이올린 줄 현
		//데이터타입 변수명 = 값;
		String name = "홍길동";
		// 문자열 + 문자열 ====== 연결
		System.out.println("제 이름은 " + name + " 입니다.");
		//계산
		System.out.println(10+10);
		
		System.out.println("제 이름은 홍길동 입니다.");
		
		int age = 34;
		//문자열 + 숫자 ====== 연결
		System.out.println("제 나이는 " + age + "입니다.");
		//숫자 + 문자열 ====== 연결
		System.out.println(20 + "입니다.");
		//숫자 + 숫자 + 문자열 === 계산 + 연결
		System.out.println(20 + 10 + "입니다.");
		// 문자열 + 숫자 + 숫자 + 문자열
		System.out.println("문자열" + age + 10 + "입니다.");
		// 문자열3410입니다.
		
		System.out.println("문자열" + (age + 10) + "입니다.");
		// 문자열44입니다.	
		
		System.out.println(3.14 + 10 + "입니다.");
		
		
		}
}




데이터타입

자바에서는 변수, 상수건 그 값을 담기 위해서는
반드시 그 값의 타입에 맞는 변수를 사용해야 한다.
이를 데이터 타입이라고 한다.

데이터 타입은 (P타입, R타입으로 구분)

  • Reference 참조 타입
  • Primitive 기본 타입


P타입(수치형, 문자형, 논리형)


각각의 타입들은 메모리 크기가 엄격히 제한된다.

 

수치형
     정수형   byte, short, int(기본), long

     실수형   float, double(기본)


문자형 = 한글자 = A, 가, 羅, $ ...

char

논리형 = 참/거짓 = true, false = 데이터 사이즈 X

boolean

데이터 타입(수치형)

public class DataType1 {
	public static void main(String[] args) {
		// 메소드 바디 속에서 선언된 변수 = 지역변수
		// 데이터타입 변수명 = 값;
		byte byteNumber = 127;
		// -128~0~127
		
		short shortNumber = byteNumber; 
		// -32,768 ~ 32767
		shortNumber = 32767;
		
		int intNumber = 1000000; // 리터럴
		// -2,147,483,648 ~ 2,147,483,647
		
		intNumber = Integer.MAX_VALUE;
		intNumber = Integer.MIN_VALUE;
		
		long longNum = intNumber;
		// -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
		long longMin = intNumber;
		
		longNum = Long.MIN_VALUE;

		longNum = 9223372036854775807L;//롱타입 데이터 저장시 L추가
		
		System.out.println(byteNumber);
		System.out.println(shortNumber);
		System.out.println(intNumber);
		System.out.println(longNum);
		// = 대입, 	== 같다
		intNumber = (int) longNum;
		// cast, casting, 캐스팅, 캐스트
		
		short shortNum = (short) intNumber;

		byte byteNum = (byte) shortNum;
		
		byteNum =(byte) -13000; // 캐스팅시 값의 절삭이 발생(무한 루프)
		
		System.out.println(byteNum); // -128
		

		shortNum = byteNum;
		//프로모션

		shortNum = (short) byteNum; //기존 방식
		byteNum = (byte) 100; //기존 방식
		
		//intNumber = longNum; //캐스팅 필요
		intNumber = (int) longNum; // 데이터 타입 일치화		
		intNumber = byteNum; //자동대입 = 프로모션
		
		byteNum = (byte)((short)((int)(longNum)));//가능 하나 비추천
		byteNum = (byte) longNum;
	}

}

 

casting(캐스팅) / cast(캐스트) 


큰 타입을 작은 타입에 대입할때 반드시 해야 하는 연산
(type)을 명기해서 값을 대입
이때 주의할 점은 상위 비트를 대입할때 작은 타입에 맞게 잘라내기 때문에
값의 변화가 올 수 있다.(무한루프 돌며 값 절삭) 

 

프로모션


큰 타입에 작은 타입이 대입되는 것
작은 타입이 큰 타입에 자동으로 들어가는 것
값 변화 없음




실수

  • float
  • double(기본형)
package may18;
//실수
	//float
	//double(기본형)

public class DataType2 {
	public static void main(String[] args) {
		//데이터타입 변수명 = 값;
		//3.14
		double pi = 3.14;
		System.out.println(pi);
		
		int intNum = (int)pi;
		System.out.println(intNum); // 3
		
		long longNum =(long) pi;
		System.out.println(longNum); // 3
		
		pi = longNum;
		System.out.println(pi); // 3.0
				
		pi = (int) longNum;
		System.out.println(pi); // 3.0
		pi = Long.MAX_VALUE;
		System.out.println(pi);
		
		//float
		float fNum = (float) 3.14;
		float fNum2 = 3.14F;
		System.out.println(fNum);  // 3.14
		System.out.println(fNum2); // 3.14
		
		fNum2 = intNum;
		intNum = (int)fNum;
		
		
		//float long
		longNum = (long)fNum;
		
		System.out.println(Double.MAX_VALUE);
		//1.7976931348623157E308
		System.out.println(Long.MAX_VALUE);
		//9223372036854775807
		
		pi = Double.MAX_VALUE;
		longNum = (long)pi;		
		System.out.println(longNum);	
		//9223372036854775807
		
		/* 동일 코드
		longNum = (long)Double.MAX_VALUE;
		System.out.println(longNum);
		*/
		
		fNum = 3.14F + 3.14F;
		fNum2 = fNum + 3.14F; //
		intNum = 3 + (int)longNum;
		
		//byte short
		
		byte bNum = 3;
		short sNum = 5;
		sNum = 3 + 100;
		bNum = 126 + 1;
		
		// 작은 타입과 큰 타입 계산시엔 기본 타입 이하이면
		// 기본타입으로 변환, 계산된다.
		// 기본타입 이상일 경우에는 무조건 큰 타입으로 변환 후 계산됨
		
		//진법
		//8진수는 숫자0값, 16진수 숫자0x값
		System.out.println(10);
		System.out.println(010);
		System.out.println(0x10);
		
	}

}

실수형(float, double)

 

double (기본타입)

 

float에 값을 실수로 초기화 할때는
표식자(f,F)를 넣어 주어야 한다.(안 넣으면 컴파일 에러)
실수 값 자체가 double메모리로 만들어지기 떄문에 float 대입 불가능

 
같은 값이라도 실수는 정수보다 무조건 큰 타입으로 인지
또한 float은 4byte여도 long보다 큰 타입으로 인지
캐스팅 하여 대입하여야 한다.

연산시 정수는 int, 실수는 double로 변환되어 계산된다.

 

문자형(char)

 

문자 하나를 저장
반드시 값으로는 문자 하나가 와야 한다. a, A, 가, 羅, ^, $ ... 
하나 이상일 경우에는 String에 저장한다.
정수형 타입 0~65,535 = 2byte

문자형을 저장할 때는?
반드시 홀따옴표로 ' '

정수형이기 때문에 int에 프로모션 가능
대로 int 값 또한 문자로 바뀔 수 있다.(cast)

public class DataType3 {
	public static void main(String[] args) {
		//문자형 초기화 하기
		char char1 = 'A';
		char char2 = '가';
		char char3 = '羅';
		char1 = 100;
		char2 = '\ub789'; // 유니코드?
		//아스키코드, 유니코드 -----utf-8 euc-kr, ms949
		
		System.out.println(char1); // d
		System.out.println(char2); // 랉
		System.out.println(char3); // 羅
		/*
		for(int i=1; i<128; i++) {
			System.out.print(i + " : " + (char)i+"\n");
		}
		*/
		
		String str = "가나다"; // 문자열 = 스트링
		
		str = ""+ char1 + char2 + char3;
		
		System.out.println(str);// d랉羅
		
		int iNum = char1;
		System.out.println(iNum); // 100
		iNum = char2;
		System.out.println(iNum); // 46985
		iNum = char3;		
		System.out.println(iNum); // 63759
		
		int iNum2 = 0xb127;
		
		System.out.println(iNum2); // 45351
		System.out.println((char) iNum2); // 넧
		
		/////////////////////논리형
		//boolean 참, 거짓
		
		boolean check = false;
		
		System.out.println(check); // false
		
		System.out.println(1==1); // true
		System.out.println(1==2); // false
		System.out.println('A'=='a'); // false
		
		iNum = 10;
		iNum2 = 10;
		
		System.out.println(iNum == iNum2); // true
		
		check = iNum == iNum2 + 1;
		
		System.out.println("결과는 : " + check); // false
		
		check = iNum != iNum2 +1; // != not
		
		System.out.println("결과는 : " + check); // true
		// 참, 거짓 저장하는 타입
		//off on

		int code = 1;
		int result = code % 2; // 모듈러 = 나머지 값
		check = result == 0;
		
		if(check) { // 만약 check가 참이라면
			System.out.println("당신은 여자");
		}
		else{
			System.out.println("당신은 남자");			
		}
		
	}
}

P타입(Primitive) 8개 

  • 수치형
    정수 byte, short, int, long
    실수 float, double
  • 문자형 char
  • 논리형 boolean

//수치형 연습해보기
/* 여러분은 과수원을 하고 있습니다.
 * 키우는 과일은 사과, 배, 오렌지 입니다.
 * 각각 하루의 생산량은 5, 7, 5 입니다.
 * 위 값을 기준으로 하루에 총 생산되는 과일의 수를
 * 출력하시고 하루 기준으로 시간당 몇 개의 과일이
 * 생산 되는지를 출력하시오.
 * 예) 총 생산 수 : 17
 * 시간당 생산 갯수 : 0.0001
 * 
 * 최대한 많은 변수를 사용하고
 * 반드시 한번의 리터럴 데이터와 캐스팅을 사용해보시오
 *                      △요건 검색
 * 평균 변수는 float 타입으로 선언하여 값을 담으시오
 * 
 * 
 */

public class DataType5 { 
public static void main(String[] args) { 

short apple, pear, orange; 
int total; 
float avg; 
apple = 5; 
pear = 7; 
orange = 5; 
total = apple+pear+orange; 
avg = total/24F; 

System.out.println("총 생산 수 : "+ total); 

System.out.println("시간당 생산 갯수 : "+avg); 
	}
}

public class DataType5 {
	public static void main(String[] args) {
		int app, pear, orange;
		app = 5;
		pear = 7;
		orange = 5;
		
		int total = app + pear + orange;
		
		float avg = (float) (total / 24.0); // 0.7083333
		
		System.out.println("총 생산 수 : "+total);
		System.out.println("시간당 생산 갯수 : "+avg);
	}
}



 

 

 

반응형