public class VariableApp {
public static void main(String[] args) {
int su; //정수값을 저장하기 위한 변수 선언 (int : 정수값을 표현하는 키워드)
su=100; // = 대입연산자를 사용하여 변수에 값 저장(입력)
System.out.print("초기값 = ");
System.out.println(su); // 변수에 저장된 값을 화면에 출력
// int su; // 같은 이름의 변수를 재선언할 경우 에러 발생
su=200; // 변수에 기존값 대신 새로운 값 저장
System.out.print("변경값 = ");
System.out.println(su);
int num=100; //변수 선언 및 초기값 저장
System.out.println("num = "+num); //"문자열"+값 또는 값+"문자열" →문자열과 값의 결합
System.out.println("올해는 "+2+0+2+2+"년입니다.");//올해는 2022년입니다.
//숫자값+숫자값은 숫자값의 합계를 계산하는 의미 - 결과값 : 숫자값 (2+0+2+2=6으로 실행)
System.out.println(2+0+2+2+"년은 호랑이띠해입니다."); //6년은 호랑이띠해입니다.
// "" : 문자가 하나도 없는 문자열 - NullString
System.out.println(""+2+0+2+2+"년은 호랑이띠해입니다.");
//동일한 자료형의 변수는 , 기호를 사용하여 나열 선언 가능
int num1=100, num2=200;
System.out.println("연산결과 = "+num1+num2); // 실행 오류 발생 : 연산결과 = 100200
//()연산자를 사용하여 무조건 먼저 실행되도록 설정 가능
System.out.println("연산결과 = "+(num1+num2)); // 연산결과 = 300
System.out.println("연산결과 = "+num1*num2); // 연산결과 = 20000
System.out.println("연산결과 = "+(num1*num2)); // 연산결과 = 20000
int kor=88, eng=90;
int tot=kor+eng; //연산 결과를 변수에 저장
System.out.println("점수 합계 = "+tot);
//변수에 값이 저장되어 있지 않는 상태에서 변수 사용시 에러 발생
//int count;
//System.out.println("count="+count);
//변수에 저장 불가능한 값을 저장할 경우 에러 발생
//int count=10.0;
//System.out.println("count="+count);
원시형(PrimitiveType)/기본형 : 값을 표현하기 위한 자료형 - 키워드
ex. 숫자형(정수형 4개, 실수형 2개, 문자형 1개)- 연산 가능 , 논리형 1개
참조형(ReferenceType) : 특정 대상을 표현하기 위한 자료형 - 식별자(클래스)
ex. String 클래스 : 문자열을 표현하기 위한 자료형(클래스)
* 컴퓨터에서 값을 저장하기 위한 단위 : 1Bit(0또는1)>>1Byte(8Bit) : Character(영문자만해당)
* 1024Byte = 1KByte / 1024KByte = 1MByte / 1024Myte = 1GByte / 1024GByte = 1TByte
* 1Gbps(Bit per Second) : 초당 전송하는 bit수가 1G
* 1Gcps (character per Second) : 초당 전송하는 문자수가 1G
* 50을 1byte(8bit)로 표현하면 00110010 >> 11001101:1의보수화(1's), 11001110:2의보수화(2's)
* -50을 1byte(8bit)로 표현하면11001110 (50 + -50 = 0이 되어야 하며 8bit 이상인 값은 제거됨)
cf) 양수 음수를 구분하기 위해 앞에 0,1 양수가 0
* 값을 표현하는 저장 단위 : Bit - Byte - Word(ex. 서울시, 강남구)
- Field (ex. 서울시 강남구 태헤란로) : Column - Record : Row - Table - DB
* bit ~ record까지는 프로그래밍 언어로 저장 가능, SQL은 word~DB까지 저장 가능
public class DataTypeApp {
public static void main(String[] args) {
//정수형(IntegerType) 리터럴 : 소숫점이 없는 숫자값
//→Java의 정수형 리터럴은 기본적으로 4Byte(Interger)로 표현 :-2147483648~2147483647
System.out.println("<<정수형(IntegerType)>>");
System.out.println("정수값(10진수 100) = "+100);//숫자값 : 10진수 정수값을 표현
//println() 메소드는 무조건 10진수의 정수값으로 변환하여 출력 처리
System.out.println("정수값(8진수 100) = "+0100);//0숫자값 : 8진수 정수값을 표현
System.out.println("정수값(16진수 100) = "+0x100);//0x숫자값 : 16진수 정수값 표현
System.out.println("정수값(10진수 100)="+100L);//숫자값L : 8Byte(Long) 정수값 표현
System.out.println("정수값 = "+2147483647);
//4Byte로 표현 가능한 정수값 = -2147483648~2147483647
// => 4Byte로 표현 불가능한 정수값을 사용할 경우 에러 발생
//System.out.println("정수값 = "+2147483648);
//4Byte로 표현 불가능한 정수값은 정수값 뒤에 [L]를 붙여 8Byte 정수값으로 표현하여 사용
System.out.println("정수값 = "+2147483648L);
//정수값을 표현하기 위한 자료형
// 1. byte (1Byte) : 기계를 제어하기 위해 사용 (데이터의 기본 단위)
// 2. short (2Byte) : C언어에서 정수값으로 사용
// 3. int (4Byte) : java에서 정수값으로 사용
// 4. long (8Byte)
byte a1=127;//1Byte : -128~127
short a2=32767;//2Byte : -32768~32767
int a3=2147483647;//4Byte : -2147483648~2147483647
long a4=2147483648L;//8Byte
System.out.println("a1 = "+a1);
System.out.println("a2 = "+a2);
System.out.println("a3 = "+a3);
System.out.println("a4 = "+a4);
//int a5=100L;// 불가능 : 8byte용량을 4byte 공간에 저장할수 없음
//값에 대한 변형이 발생될 수 있으므로 에러 발생
long a5=100;//가능
System.out.println("a5 = "+a5);
public class DataTypeApp {
public static void main(String[] args) {
//실수형(DoubleType) 리터럴 : 소숫점이 있는 숫자값
// => Java의 실수형 리터럴은 기본적으로 8Byte(Double)로 표현
System.out.println("<<실수형(DoubleType)>>");
System.out.println("실수값(4Byte) ="+1.3F);//실수값F:4Byte(Float)의 실수값을 표현
System.out.println("실수값(8Byte) ="+1.3);//실수값 : 8Byte(Double)의 실수값을 표현
//println() 메소드는 아주 작은 실수값 또는 아주 커다란 실수값을 지수형태로 변환하여 출력
System.out.println("실수값(8Byte) = "+0.000000000123); // 결과 : 1.23E-10
//실수값을 지수형태로 표현하여 사용 가능 (E10=10의10제곱, E-10=10의-10제곱)
System.out.println("실수값(8Byte) = "+1.23E10);
//실수값을 표현하기 위한 자료형
1. float(4Byte)의 실수값 : 메모리 절약하기 위해 적용, 2. double(8Byte)
float b1=1.23456789F; //정밀도 : 7자리 (java는 소수점8자리에서 올림) 결과:1.2345679
double b2=1.23456789; //정밀도 : 15자리
System.out.println("b1 = "+b1);
System.out.println("b2 = "+b2);
public class DataTypeApp {
public static void main(String[] args) {
//문자형(CharacterType) 리터럴 : ' ' 안에 하나의 문자로 표현
// - Java의 문자형 리터럴은 기본적으로 2Byte(char)로 표현
// -> 하나의 문자를 2바이트로 표현하는 이유는 전세계 언어를 표현하기 때문
// - 일반 문자와 회피 문자로 구분하여 사용
System.out.println("<<문자형(CharacterType)>>");
System.out.println("문자형(2Byte)="+'A');
System.out.println("문자형(2Byte)="+'가');
System.out.println("문자형(2Byte)="+'\''); //결과 : '
System.out.println("문자형(2Byte)="+'\\');//\하나는 회피문자로 인식하므로 \두번 사용
//문자값을 표현하기 위한 자료형 - char(2Byte)
char c1='A';//문자형 변수에는 문자값에 대한 약속된 정수값이 저장
char c2=65;//문자형 변수에는 문자값에 대한 약속된 정수값을 직접 저장 가능
char c3='a'-32;//문자값에 대한 연산 결과값 저장 가능
System.out.println("c1 = "+c1); //결과 : A
System.out.println("c2 = "+c2); //결과 : A
System.out.println("c3 = "+c3); //결과 : A
char c4=45000;
System.out.println("c4 = "+c4); //결과 : 꿈
cf) [Alt]+유니코드 입력 후 [Alt] 떼면 유니코드 입력됨
public class DataTypeApp {
public static void main(String[] args) {
//논리형(BooleanType) 리터럴 : false(거짓), true(참) -거짓, 참을 나타내는 키워드
//→ Java의 논리형 리터럴은 기본적으로 1Byte(Boolean:불리언)로 표현 ex)판단유무에 사용
System.out.println("<<논리형(BooleanType)>>");
System.out.println("논리형(1Byte) = "+false);
System.out.println("논리형(1Byte) = "+true);
//관계 연산자(비교 연산자)를 이용한 연산식의 결과값으로 논리형 리터럴 제공
System.out.println("논리형(1Byte) = "+(20<10)); // 결과 : false
System.out.println("논리형(1Byte) = "+(20>10)); // 결과 : true
//논리값을 표현하기 위한 자료형 - boolean(1Byte)
boolean d1=false;
boolean d2=20>10;
System.out.println("d1 = "+d1);
System.out.println("d2 = "+d2);
public class DataTypeApp {
public static void main(String[] args) {
//문자열 리터럴 : " " 안에 0개 이상의 문자들로 표현 , 문자 없는 것 : Null String
// => 문자열은 원시형(기본형)이 아닌 참조형으로 String 클래스로 표현
System.out.println("<<문자열(StringType)>>");
System.out.println("문자열 = "+"홍길동");
System.out.println("유관순 열사가 \"대한독립 만세\"를 외쳤습니다.");
//문자열을 표현하기 위한 DataType : String 클래스
String name="임꺽정";
System.out.println("이름 = "+name);
public class TypeCastApp {
public static void main(String[] args) {
//자동 형변환 : 자료형이 다른 값을 연산하기 위해 JVM이 자료형을 일시적으로 변환
//표현의 범위가 작은 자료형의 값이 커다란 자료형의 값으로 형변환되어 연산
//byte < short < char < int < long < float < double (boolean은 연산 불가능)
//int 자료형보다 작은 자료형은 무조건 int자료형으로 형변환되어 연산 처리
System.out.println("결과 ="+(3+1.5)); //4.5
double su=10;
System.out.println("su = "+su);
System.out.println("결과 = "+(95/10)); // 정수/정수:정수 -> 손실 발생
System.out.println("결과 = "+(95.0/10.0)); // 실수/실수 : 실수
System.out.println("결과 = "+(95.0/10)); // 실수/정수 : 실수(자동 형변환)
System.out.println("결과 = "+(95/10.0)); // 정수/실수 : 실수 (자동 형변환)
int kor=95, eng=90; //점수 입력
int tot=kor+eng; // 총점 계산
//double ave=tot/2; //평균 계산 - 연산 결과 : 정수/정수 후 변수값 형변환 ㅡ> 92.0
double ave=tot/2.; //평균 계산 - 연산 결과 : 정수/실수 후 변수값 형변환 ㅡ> 92.5
System.out.println("총점 = "+tot+ ", 평균 = "+ ave);
byte su1=10, su2=20;
//byte su3=su1+su2; → 실행오류
//10(byte)+20(byte) >> 10(int)+20(int) >> 30(int) : byte 변수에 저장 불가능
//int 자료형보다 작은 자료형은 무조건 int자료형으로 형변환되어 연산 처리 되므로 주의 필요
int su3=su1+su2;
System.out.println("su3 ="+su3);
//강제 형변환 : 프로그래머가 Cast 연산자를 사용하여 값을 일시적으로 원하는 자료형으로
//변환하여 명령을 작성하는 방법, 형식 : (DataType)값
int num=(int)12.3; //(int)12.3 : 12 ->정수값
System.out.println("num="+num);
int num1=95, num2=10;
//double num3=num1/num2; // 연산결과 : 9.0 (정수/정수의 연산결과는 정수값)
double num3=(double)num1/num2; // 연산결과 : 9.5 (실수/정수의 연산결과는 실수값)
System.out.println("num3="+num3);
//커다란 정수값은 _ 기호를 사용하여 표현 가능
int num4=100_000_000, num5=30;
//정수값의 연산 결과는 4Byte 범위의 정수값(-2147483648~2147483647)만 표현 가능
//문제점 : 정수값에 대한 연산 결과가 4Byte 범위의 정수값 표현 범위을 벗어난 경우
//쓰레기값 발생되어 변수에 저장됨 -> int num6=num4*num5; //실행 오류
//해결법 : 정수값에 대한 연산 결과가 4Byte 범위의 정수값 표현 범위을 벗어난 경우
// -> long 자료형으로 연산 처리
long num6=(long)num4*num5;
System.out.println("num6="+num6);
double number=1.23456789;
System.out.println("number="+number);
//소숫점 2자리 위치까지만 출력되도록 명령 작성
//절삭 : 내림, 올림에서 0은 올리지X
System.out.println("number(내림)="+(int)(number*100)/100.);
System.out.println("number(반올림)="+(int)(number*100+0.5)/100.);
System.out.println("number(올림)="+(int)(number*100+0.9)/100.);