//(한 줄) 주석: 컴파일러가 해석하지 않는 부분, 주로 코드 설명 작성
/별 범위 주석 별/
컴파일러(Compiler): 코드를 2진수(0,1)로 변환하는 번역기
Java코드 실행 순서: 코드 작성-> ctrl F11 실행 (컴파일러가 2진수로 변역 -> JVM 실행)
package edu.kh.basic; //basic.kh.edu
public class JavaTest {
//class: 자바 코드가 작성되는 영역
public static void main(String[] args){
//main method(메소드): 자바 애플리케이션(프로그램)을 실행하기 위해 필요
//shift enter: 커서 중간에 있을 때 엔터 치기
System.out.println("Hello world!!");
System.out.println("1234");
System.out.println("첫날 어떠셨나요?");
//숫자 연산
System.out.println("-----------------------");
System.out.println("1+2"); //1+2
System.out.println(1+2); //3
//""안에 작성된 코드는 단순 문자열로 인식
//""안에 작성되지 않은 코드는 숫자, 변수로 인식
System.out.println(50-23);
System.out.println(12*13);
System.out.println(327/3);
//"(문자열)" + 숫자 함께 작성
System.out.println("14*19="+14*19); //14*19=266
System.out.println("90+70+65="+ 90+70+65); //90+70+65=907065
//+기호의 역할
//->숫자 + 숫자 --> 덧셈 연산 결과
//->문자열 + 숫자/문자열 --> 이어쓰기
//자바는 사칙연산의 우선순위를 그대로 따른다.
System.out.println("90+70+65="+ (90+70+65)); //90+70+65=225
}
}
package edu.kh.variable.ex1;
public class VariableExample1 {
//생성된 .java 파일과 class 오른쪽에 작성된 이름은 동일해야 함
public static void main(String[] args) {
System.out.println(2*3.141592653589793*10);
System.out.println(3.141592653589793*10*10);
System.out.println(3.141592653589793*10*10*20);
System.out.println(4*3.141592653589793*10*10);
//변수 사용
double pi = 3.141592653589793; //원주율 , =:대입
int r = 10; //반지름(radius)
int h = 20; //높이 (height)
System.out.println("----------------------");
System.out.println(2*pi*r); //원의 둘레
System.out.println(pi*r*r); //원의 넓이
System.out.println(pi*r*r*h); //원기둥의 부피
System.out.println(4*pi*r*r); //구의 겉넓이
}
}
1byte= 8bit
자바 기본 자료형 8가지
1.논리형: boolean(1byte)
2.정수형: byte(1byte), short(2byte), int(4byte), long(8byte)
3.실수형: float(4byte), double(8byte)
4.문자형: char(2byte 유니코드)
변수 선언: 메모리에 값을 저장할 공간을 할당하는 것
리터럴: 변수에 대입되거나 작성되어지는 값 자체(자료형에 따라 리터럴 표기법이 다름)
변수 명명 규칙
1.대소문자 구분, 길이 제한X
2.예약어 사용 X
3.숫자로 시작 X
4.특수문자 $,_만 사용 가능, but 쓰지 않는 편
5.카멜 표기법: 띄어쓰지 않고 후속 단어 첫 글자 대문자로 작성, 단 첫 시작 글자는 소문자로 하는 것이 관례
6.변수명은 언어를 가리지 않음, but 쓰지 않는 편
상수(항상 같은 수)
-변수의 한 종류
-한 번 값이 대입되면 다른 값을 대입할 수 없다.
-자료형 앞에 final 키워드를 작성(마지막에 대입되는 값)
상수 명명 규칙: 모두 대문자, 여러 단어 작성 시_언더바 사용
상수 사용하는 경우
1. 변하면 안 되는 고정된 값을 저장할 때
2. 특정한 값에 의미를 부여하는 경우
package edu.kh.variable.ex1;
public class VariableExample2 {
public static void main(String[] args) {
boolean booleanData;
//메모리에 논리 값(T/f)을 저장할 공간을 1byte 할당하고
//할당된 공간을 booleanData로 부르겠다.
booleanData = true; //booleanData 변수에 true 대입
System.out.println("booleanData: "+booleanData);
byte byteNumber=127; //short, byte는 옛날 코드의 잔재
//메모리에 정수 값을 저장할 공간을 1byte 할당하고 그 공간을 byteNumber로 부르겠다.
//선언된 byteNumber 변수에 처음으로 127을 대입했다.
//--> 초기화: 처음 변수에 값을 대입
short shortNumber=32767; //변수 선언 및 초기화
// 자료형 변수명 =리터럴
//int는 정수 자료형의 기본형
int intNumber=2147483647; //변수의 선언 및 초기화
long longNumber=10000000000L; //l/L 대소문자 상관X
//The literal 10000000000 of type int is out of range
float floatNumber=1.23456F;
//cannot convert from double to float
//double은 실수 자료형의 기본형
//리터럴 표기법이 없는 실수는 double로 인식
double doubleNumber=3.141592;
//문자형(문자 하나) 리터럴 표기법 ''홑따옴표 사용
char ch='A';
char ch2= 66;
//char 자료형에 숫자가 대입될 수 있는 이유:
// 컴퓨터에는 문자표가 존재하고 있는데 숫자에 따라 지정된 문자 모양이 맵핑되어 있고
// 'B' 문자 그대로가 대입이 돠면 변수에 숫자 66으로 변환되어 저장
// --> 변수에 애초에 66이라는 숫자를 저장하는 것이 가능
System.out.println("ch: " +ch); //A
System.out.println("ch2: " +ch2); //B
//변수 명명 규칙
//1. 대소문자 구분, 길이 제한 X
int abcdefghijklmnopqrstuvwxyz;
int abcdefghijklmnopqrstuvwxyZ; //z대문자
//2. 예약어 사용X
//double double; --> 오류
//3. 숫자 시작 X
//char 1abc;
//4. 특수문자 $, _ 만 사용 가능 (But, 쓰지 않는 편)
int $intNum;
int int_num; //자바는 카멜 표기법 사용 (_작성 표기법은 DB에서 사용)
//5. 카멜 표기법: 변수명 작성 시 여러 단어 이어서 작성하는 경우
char helloWorldAppleBananaTomato;
//6. 변수명은 언어를 가리지 않음 (But, 쓰지 않는 편)
int 정수1번;
double 실수2번=3.14;
System.out.println(실수2번); //3.14
//----------------------------------------------------
int number=10;
System.out.println("number: " + number); //10
number=20;
System.out.println("number: " + number); //20
//상수
final double PI_VALUE = 3.14;
//PI_VALUE = 2.322; --> 오류 (상수이기 때문에 대입 불가)
final int LEFT_MOVE = -1;
final int RIGHT_MOVE = 1;
}
}
형변환(Casting): 값의 자료형을 변환하는 것 (단 boolean 제외)
형변환 필요 이유
컴퓨터는 기본적으로 같은 자료형끼리만 계산 가능
-> 다른 자료형과 연산 시 오류 발생
--> 이런 상황 해결하기 위해 필요한 기술이 형변환이다.
형변환 종류: 자동 / 강제
자동 형변환
[값의 범위]가 큰 자료형과 [값의 범위]가 작은 자료형의 연산 시 컴파일러에 의해 작은 자료형을 큰 자료형으로 자동 형변환함
강제 형변환 :기존 자료형을 원하는 자료형으로 강제 변환시키는 것
1. 값의 범위가 큰 자료형을 작은 자료형으로 변환할 때 사용
2. 출력되는 데이터의 표기법을 변화시키고 싶을 때
강제 형변환 방법
-자료형을 변환시키고 싶은 값 또는 변수 앞에 (자료형)을 작성
package edu.kh.variable.ex1;
public class VariableExample3 {
public static void main(String[] args) {
//자동 형변환
int num1 = 10;
double num2=3.5;
System.out.println("자동 형변환 결과: "+(num1+num2));
// 원래 오류가 발생해야 하지만 자동 형변환으로 발생하지 않는다.
int i1=3;
double d1= i1; //double은 실수만 저장할 수 있는 자료형
//정수가 대입되는 연산이 수행되면
System.out.println("i1: "+ i1); //3
System.out.println("d1: "+ d1); //3.0
System.out.println("num2+d1: "+(num2+ d1)); // 6.5
//int -> long 형변환
int i2 = 2_100_000_000; //21억
long L2= 10_000_000_000L; //100억
long result2= i2+L2;
//int + long --> long + long = long
System.out.println("result2: "+result2);
//char -> int 형변환
char ch3 = 'V';
int i3 = ch3; //대입도 연산이다
//int 변수 = char 값
// -->int 자동 형변환
System.out.println(i3); //86
char ch4 = '각';
int i4= ch4;
System.out.println(i4); //44033
//long -> float 자동 형변환
long l5 = 123456789123456789L;
float f5 = l5 * 100; //long 범위 초과
//float = long * int
//float = long * long
//float = long 결과
//float = float(자동 형변환)
System.out.println(f5); //-6.1010652E18 (오버플로우)
//오버플로우는 컴퓨터가 미리 예측할 수 없으므로 개발자가 예측해야 함
int i6 = 2147483647; // int 최댓값
int result6= i6 +1;
System.out.println(result6); //-2147483648
}
}
package edu.kh.variable.ex1;
public class VariableExample4 {
public static void main(String[] args) {
//강제 형변환
double temp =3.14;
int num = (int)temp;
//Type mismatch: cannot convert from double to int
System.out.println("temp: "+temp); //3.14
System.out.println("num: "+num); //3
//실수 -> 정수형 변환 시 소수점 버림 처리(데이터 손실 발생)
//int --> byte 강제 형변환
int iNum = 290;
byte bNum= (byte)iNum;
System.out.println("iNum: "+iNum); //290 (형변환 전)
System.out.println("bNum: "+bNum); //34 (형변환 후)
//같은 정수형끼리의 변환 시에도 값의 범위 차이에 의해 데이터 손실 발생
//char -> int 강제 형변환
char ch ='A'; //65
int iNum2= ch; //자동 형변환
System.out.println("iNum2: "+iNum2);
System.out.println((int)ch); //65 ->자동 형변환과 결과 동일
//int -> char 강제 형변환
int iNum3=44033;
char ch3= (char)iNum3;
System.out.println(iNum3 + "번째 문자: "+ch3); //각
//소문자 'a'보다 10칸 뒤에 있는 문자는 무엇?
char ch4='a';
int iNum4=ch4+10;
System.out.println("정답: " +(char)iNum4); //k
System.out.println((char)((int)ch4+10)); //k
System.out.println((char)(ch4+10)); //k
}
}
package edu.kh.variable.practice;
public class CastingPractice1 {
public static void main(String[] args) {
int iNum1 = 10;
int iNum2 = 4;
float fNum = 3.0f;
double dNum = 2.5;
char ch = 'A';
System.out.println( iNum1 /iNum2 ); // 2
System.out.println( (int)dNum ); // 2
System.out.println( iNum2 * dNum ); // 10.0
System.out.println( (double)iNum1 ); // 10.0
System.out.println( ((double)iNum1/(double)iNum2) ); // 2.5
System.out.println( dNum ); // 2.5
System.out.println( (int)fNum ); // 3
System.out.println( (int)(iNum1/fNum) ); // 3
System.out.println( (iNum1/fNum) );// 3.3333333
System.out.println( (iNum1/(double)fNum) ); // 3.3333333333333335
System.out.println( ch ); // 'A'
System.out.println( (int)ch ); // 65
System.out.println( ch+iNum1 ); // 75
System.out.println( (char)(ch+iNum1) ); // 'K'
}
}