자바는 os를 가리지 않고 다 잘 작동한다. C언어는 window용으로 개발하면 ios에서는 수정이 필요하지만 java같은경우는 다 잘 작동한다.
한국어는 2byte, 영어는 1byte여서 글자가 깨질수 있다. 그래서 다 utf-8형식으로 언어를 표시하자 해서 언어깸짐 현상을 해소

dsl은 groovy로 해준다.
인텔리제이는 외국회사에서 개발되어 기본적으로 영어가 기본임
한글과 영어를 표현하는 기능이 영어 기준으로 되어 있어 한글이 깨져서 이상한 문자로 표시됨
해결방법 : UTF-8 표기법을 사용함
1) 설정 - 에디터 - 파일인코딩
전역 인코딩 : UTF-8
프로젝트 인코딩 : UTF-8
프로젝트 파일에 디폴트 인코딩 : UTF-8
명확한 Native에서 Ascii로의 변환
/**
* packageName : ${PACKAGE_NAME}
* fileName : ${NAME}
* author : ${USER}
* date : ${DATE}
* description :
* 요약 :
*
* ===========================================================
* DATE AUTHOR NOTE
* -----------------------------------------------------------
* ${DATE} ${USER} 최초 생성 */
인텔리제이에 적용 : 설정 - 에디터 - 파일 및 코드템플릿 : 포함 탭 선택 및 위의 주석 붙여넣기
2) 도움말 - 사용자 지정 VM 옵션 편집
아래 두줄 복사/붙여넣기
-Dfile.encoding=UTF-8
-Dconsole.encoding=UTF-8
3) 파일 - 캐시무효화 : 모두 체크하고 재실행
화면출력에는 2가지 방법이 있다.
System.out.println() - 줄바꿈이 일어남
System.out.print() - 줄바꿈이 없음
public class JavaApplication {
public static void main(String[] args) {
System.out.println("안녕하세요");
System.out.println("안녕하세요");
System.out.print("안녕하세요");
System.out.print("안녕하세요");
}
}

줄바꿈의 차이이다.
참고로
main함수는 프로그램을 실행시키는 부분이다. 이함수안에 코드를 넣어 프로그램을 실행시키는 방식이다.
자바는 자바스크립트랑은 다르게 변수의 종류를 정확하게 입력해야한다.
js는 let이나 const만 사용하면 되었지만 자바는 정수면 int, 소수면 double, 문자면 char, 문자열이녀 String을 해주어야 사용이 가능하다.
int value = 20;
자바에서 변수를 활용해서 연산을 해보자. 먼저 변수와 숫자.
int value2 = 30;
int result = value2 + 30;
System.out.println(result);
변수끼리의 연산도 가능하다.
int val = 10;
int val2 = 20;
int result1 = val + val2;
int hour = 3;
int minute = 5;
System.out.println(hour + "시간" + minute + "분");
int hour2 = 3;
int total = (hour*60) + 4;
System.out.println("3시간 4분을 분으로 바꾸면 = " + total + "분");
이번에는 두변수의 값을 바꿔보자
int x = 3;
int y =5;
System.out.println("x: " + x + ", y: " + y);
int z;
z = x;
x = y;
y = z;
System.out.println("x: " + x + ", y: " + y);
결과

잘 바꿔졌다.
swap에서는 임시변수를 두는 것이 중요하다. 임시변수 없이 x에 y를 넣어버리면 x가 이미 y로 바껴 y에 x의 값을 넣으면, y에 y값을 넣은 꼴이다.
진수에는 2/8/10/16진수가 있다.
int var1 = 0b1011; // 2진수 (0b붙이면 됨)
int var2 = 0206; // 8진수 (0 붙이면됨) 제일 앞에 0이 올 일이 없기 때문에
int var3 = 365; // 10진수
int var4 = 0xB3; // 16진수 (0x 붙이면됨)
결과

자바에서 2진수를 표현하고 싶은 경우 숫자 앞에 "0b"를 붙여주면된다.
8진수는 "0", 16진수는 "0x"를 붙여주면 된다.
1byte = 8bit
4byte인 정수보다 크기가 작다 하지만 -128부터 127까지 밖에 표현을 못한다.
byte var5 = -128;
byte var6 = -30;
byte var7 = 0;
byte var8 = 127;
//byte var9 = 130; 컴파일 오류 128이상
숫자를 표현을 많이 못해서 일반적으로는 사용을 많이 안함
정수 자료형중에 가장 크기가 큰 정수이다. int 보다 더 큰 정수를 표현할 수 있고 8byte이다.

int에서는 12개의 0을쓰면 오류가 나지만 long에서는 L을 붙여주면 오류가 뜨지 않는다. 더큰 수를 담을 수 있기 땜문이다. 
출력에서는L이 빠져서 나온다.
int로 담을 수 없는 수를 담아야할 경우 써보자.
1byte 정수형으로 특이한 점이 char에 정수를 저장하면 ASCII코드가 된다. 또한 문자를 저장하면 문자가 된다.(한글자만 담을 수 있다.)
char c1 = '가';
char c2 = 50;

문자를 저장하려면 일반 문자열과 다르게 홑따옴표를 사용하여야한다. 50을 넣으면 아스키 코드로 인식하여 ASCII코드의 결과를 나타낸다.
쌍따옴표를 사용해서 나타낸다. 변수 타입은 String이다.
String name = "홍길동";
String job = "프로그래머";
System.out.println("우리는 \"개발자\"입니다.");
System.out.println("우리는\n개발자 입니다.");
쌍따옴표나 특수 문자를 나타내기 위해서는 앞에 역슬래쉬를 붙여주면된다.
또 줄바꿈을 하기 위해서는 역슬래쉬 + n을 해주면 된다.
// todo 실수 double 8byte
double var11 = 3.14;
8byte짜리 자료형이다.
// todo 실수 float 4byte
float var12 = 3.14f; // 끝에 f를 붙임
4byte짜리 자료형으로 f를 뒤에 붙여야함
// todo 참/거짓 자료형 : boolean 1byte
boolean stop = true;
if (stop == true) {
System.out.println("중지");
}else{
System.out.println("시작");
}
조건문에서 다음과 같이 사용 가능하다.
작은 크기의 자료형을 큰 크기의 자료형에 넣으면 자동으로 자료형이 변형되어 들어간다.
byte bValue = 10;
// int iValue = (byte)20;// 이걸 안 해줘도 됨
int iValue = (bValue);
그런데 반대의 경우를 보자

큰 자료형을 작은 자료형에 넣으니 오류가 발생한다.
그래서 다음과 같이 캐스팅 처리를 해줌으로 자료형을 변형시켜주어야한다.
근데 이 캐스팅에는 부작용이 있다. 작은 칸에 큰거를 넣으려 하니 큰 것의 손상이 생길 수 있다.
double dValue = 3.14;
int iValue5 = (int) dValue;
System.out.println(iValue5);
이렇게 큰 double을 작은 int에 넣어서 소수점이 없어졌다.
char은 1byte이고 int는 4byte인데 나중에 코테에서 ascii코드 관련 문제가 나오면 char와 int사이에 자료형 변환이 필요하다.
// todo cahr int ascii코드
// "A"를 axcii코드 에서 숫자를 어떻게 표현하냐
char cValue = 'A'; // 1byte
int iValue2 = cValue; // 4byte
System.out.println(iValue); // 정수 아스키코드가 출력됨
// 65가 ascii코드에서 값은 무엇이냐
int iValue3 = 65;
char cValue2 = (char) iValue3;
System.out.println(cValue2);
결과

이렇게 char에는 숫자를 넣으면 아스키 코드 값이 나오기 때문에 이거로 문제를 풀때 사용할 수 있다.
계산 값이 신기하게 나온다. 괄호가 없을때 문자와 숫자가 같이 있으면 문자열 더하기가 된다. 이것을 주의하자

문자열인 "10"을 숫자로 변환해보자.
int val1 = Integer.parseInt("10");
System.out.println(val1);
특정 함수를 이용해 숫자로 바꾸는 것이다. "Integer.parseInt()"라는 함수에 문자열을 넣어주면 된다. 함수를 잘 기억하자.
문자열인 "10"을 실수로 변환해보자.
double val2 = Double.parseDouble("10");
System.out.println(val2);
특정 함수를 이용해 숫자로 바꾸는 것이다. "Double.parseDouble()"라는 함수에 문자열을 넣어주면 된다. 함수를 잘 기억하자.
문자열인 "10"을 실수로 변환해보자.
boolean val3 = Boolean.parseBoolean("true");
System.out.println(val3);
"Boolean.parseBoolean()"라는 함수에 문자열을 넣어주면 된다. 자주 쓰는 함수이니 잘 기억하자.
반대로 다른 탐조형을 문자로 바꾸는 방법도 있다. 이것은 함수가 조금 다르다.
String str1 = String.valueOf(10);
String str4 = String.valueOf(3.14);
String str3 = String.valueOf(true);
이건 함수가 정수, 실수, boolean 다 똑같다. "String.valueOf()"함수를 사용해주면 다 바뀐다.
출력은 sout으로 했고 이제 입력을 하는 방법을 알아보자. 내가 지금 아는 것은 scnner밖에 없는데 다른 방법도 있나..
출력창에 입력을 하게 해준는 객체이다.
Scanner scanner = new Scanner(System.in);
System.out.println("문자를 입력하세요");
String a = scanner.next();
System.out.println(a);
인스턴스를 생성하고 이 클래스의 next()함수를 사용해서 입력을 받을 수 있다. next함수는 문자열 한 단어(공백을 기준)를 입력 할 수있다.

이렇게 두단어를 입력 받으면 한 단어만 첫 단어만 입력된것으로 한다.
그럼 두단어는 어떻게 입력 받을까?
Scanner scanner = new Scanner(System.in);
System.out.println("문자를 입력하세요");
String a = scanner.next();
String b = scanner.next();
System.out.println(a);
System.out.println(b);
함수를 두번 사용하면된다. 글머 첫 단어는 앞에 함수에 두번째 단어는 두번째 함수에 들어가게된다.
결과

int i = scanner.nextInt();
System.out.println(i);
정수를 받을수 있다. 전의 일반 next와 다르게 nextInt()함수를 사용해주어야한다.
이것도 공백기준 한 단어만 넣을 수 있다.
원리는 앞에서 한 것과 같다.
Scanner scanner = new Scanner(System.in);
double a = scanner.nextDouble();
System.out.println(a);
nextDouble()함수를 사용하면된다.
지금까지 단어를 기준으로 입력 받았다. 이번엔 줄을 기준으로 입력을 받아보자
String str = scanner.nextLine();
System.out.println(str);
nextLine()함수를 사용하면된다.
생각보다 모르는게 있었다. 진수 표현법, next 함수 뒤에 붙일수 있는 참조형이 여럿 있다는 것, char에 숫자를 입력하면 아스키코드값이 출력된다던지, 참조형을 변환해주는 함수들을 알게되었다.