// 1. 변수 사용하기
System.out.println("== 변수 사용하기 ==");
// 2. 변수 이름 규칙
System.out.println("== 변수 이름 규칙 ==");
// 2-1. 문자, 숫자, _(underscore), $ 사용 가능
int appl = 2000;
int _apple = 3000;
int $apple = 4000;
System.out.println(appl);
System.out.println("appl = " + appl);
System.out.println(_apple);
System.out.println("_apple = " + _apple);
System.out.println($apple);
System.out.println("$apple = " + $apple);
// 2-2. 숫자로 시작 X
// 2-3. 대소문자 구분
// 2-4. 공백 사용 X
// 2-5. 예약어 사용 X
// 예약어 예시: true, false, if, switch, for, continue, break, ...
// 참고) 한글 사용 가능
// 3. 표기법
// 3-1. 카멜 표기법 (camelCase)
// 변수, 함수
// 3-2. 파스칼 표기법 (PascalCase)
// 클래스
// 참고) 스네이크 표기법 (snake_case)
// 사용 X
// 1. 자료형 - 숫자
System.out.println("== 숫자 ==");
// 1-1. 정수
System.out.println("== -->정수 ==");
int intNum = 10;
System.out.println("intNum = " + intNum);
long longNum = 2147483648L;
System.out.println("longNum = " + longNum);
// 1-2. 실수
System.out.println("== -->실수 ==");
float floatNum = 0.1f;
System.out.println("floatNum = " + floatNum);
double doubleNum = 3.4028236E38;
System.out.println("doubleNum = " + doubleNum);
// 1-3. 2진수 / 8진수 / 16진수
System.out.println("== -->2진수 / 8진수 / 16진수 ==");
int binaryNum = 0b1100;
System.out.println("binaryNum = " + binaryNum);
int octalNum = 014;
System.out.println("octalNum = " + octalNum);
int hexaNum = 0xC;
System.out.println("hexaNum = " + hexaNum);
System.out.println("== --> 자료형 숫자 정수 ==");
System.out.println("Integer 최소값 = " + Integer.MIN_VALUE);
System.out.println("Integer 최대값 = " + Integer.MAX_VALUE);
int IntegerNum2 = Integer.MAX_VALUE;
System.out.println("Integer 최대값 2 = " + IntegerNum2);
int IntegerNum3 = Integer.MAX_VALUE+1;
//잘못된 예.. integer 보다 큰 자료형이 필요한 경우는 long을 사용해야 함
System.out.println("Integer 최대값 3 = " + IntegerNum3);
long longNum2 = (long)Integer.MAX_VALUE+1;
System.out.println("long 형변환한 값 = " + longNum2);
System.out.println("== --> 자료형 숫자 실수 ==");
float floatNum2 = 1.23f;
System.out.println("floatNum2 = " + floatNum2);
System.out.println("float 최소값 = " + Float.MIN_VALUE);
System.out.println("float 최대값 = " + Float.MAX_VALUE);
double doubleNum2 = 1.23;
System.out.println("doubleNum2 = " + doubleNum2);
System.out.println("double 최소값 = " + Double.MIN_VALUE);
System.out.println("double 최대값 = " + Double.MAX_VALUE);
// 2. 자료형 - 부울
System.out.println("== 부울 ==");
boolean isPass = true;
System.out.println("isPass = " + isPass);
boolean isOk = false;
System.out.println("isOk = " + isOk);
// 3. 자료형 - 문자
System.out.println("== 문자 ==");
char keyFirst = 'a';
System.out.println("keyFirst = " + keyFirst);
System.out.println("keyFirst 아스키 코드값으로 변환 = " + (int)keyFirst);
char keyLast = 'z';
System.out.println("keyLast = " + keyLast);
System.out.println("keyLast 아스키 코드값으로 변환 = " + (int)keyLast);
// 1. 자료형 - 문자열
System.out.println("== 문자열 ==");
String str1 = "Hello! World!";
System.out.println("str1 = " + str1);
// 1-1. equals
String str2 = "Hi";
String str3 = "Hi";
System.out.println("equals = " + str2.equals(str3));
System.out.println("equals2 = " + str2 == str3);
String str4 = new String("Hi"); //명시적으로 객체를 새로 생성
System.out.println("equals2 비교 = " + str3.equals(str4));
System.out.println("equals2 비교 2 = " + str3 == str4); //서로 객체의 형태가 다르기 때문에 false
// 1-2. indexOf //몇번째에 있는지 찾기
System.out.println("str1.indexOf = " + str1.indexOf("!"));
System.out.println("str1.indexOf 두번째 느낌표 찾기 = " + str1.indexOf("!", str1.indexOf("!")+1));
// 1-3. replace //치환
String str5 = str1.replace("Hello","Bye");
System.out.println("str5 replace = " + str5);
// 1-4. substring //부분문자열 뽑아오기
System.out.println("str5 substring = " + str5.substring(0,3));
System.out.println("str5 substring2 느낌표까지 뽑아오기 = " + str5.substring(0,str5.indexOf("!")+1));
// 1-5. toUpperCase //대문자로 변환
System.out.println("str5 toUpperCase = " + str5.toUpperCase());
// 2. 자료형 - StringBuffer //문자열을 자주 추가하거나 변경할 때 사용하는 자료형
// String 클래스는 선언할 때마다 매번 새로운 객체가 여러번 생성되기 때문에 메모리에 무리가 가서 속도가 느려짐
// 따라서 자주 변경이 필요한 경우는 StringBuffer를 이용하는 것이 효율적임
System.out.println("== StringBuffer ==");
StringBuffer sb1 = new StringBuffer();
sb1.append("01234");
System.out.println("sb1 = " + sb1);
sb1.append("01234");
System.out.println("sb1 = " + sb1);
// 2-1. append
// 2-2. insert
// 2-3. substring
// 3. 자료형 - 배열 //많은 수의 데이터를 담을 수 있는 자료형
System.out.println("== 배열 ==");
int[] myArray1 = {1,2,3,4,5};
char[] myArray2 = {'a','b','c','d','e'};
String[] myArray3 = new String[3];
myArray3[0] = "Hello";
myArray3[1] = " ";
myArray3[2] = "World";
System.out.println("myArray3 배열 확인 = " + myArray3[0] + myArray3[1] +myArray3[2] );
// 1. 자료형 - 리스트 //배열과 같이 여러 데이터를 담을 수 있는 자료형, 여러가지 메소드 제공
System.out.println("== 리스트 ==");
ArrayList l1 = new ArrayList();
// 1-1. add
l1.add(1);
l1.add(2);
l1.add("Hello");
l1.add(3);
l1.add(4);
l1.add("World!");
System.out.println("l1 = " + l1);
l1.add(0,1);
System.out.println("l1 2 = " + l1);
// 1-2. get
System.out.println("l1 get = " + l1.get(3));
// 1-3. size
System.out.println("l1 size = " + l1.size());
// 1-4. remove
System.out.println("l1 size = " + l1.remove(0)); //0번째를 삭제
System.out.println("l1 size = " + l1.remove(Integer.valueOf(2))); //리스트의 2 라는 값을 찾아서 삭제
System.out.println("l1 3 = " + l1);
// 1-5. clear
l1.clear()
System.out.println("l1 clear = " + l1);
// 1-6. sort
ArrayList l2 = new ArrayList();
l2.add(5);
l2.add(6);
l2.add(7);
System.out.println("l2 = " + l2);
l2.sort(Comparator.naturalOrder()); //오름
System.out.println("l2 naturalOrder = " + l2);
l2.sort(Comparator.reverseOrder()); //내림
System.out.println("l2 reverseOrder = " + l2);
// 1-7. contains //리스트에 특정 값이 들어있는지 비교하여 확인
System.out.println("l2 contains = " + l2.contains(3));
System.out.println("l2 contains = " + l2.contains(5));
// 2. Maps // key 와 value 형태로 데이터를 저장하는 자료형
System.out.println("== Maps ==");
HashMap map1 = new HashMap();
// 2-1. put
map1.put("kiwi",9000);
map1.put("apple",10000);
map1.put("mango",12000);
System.out.println("map1 = " + map1);
// 2-2. get
System.out.println("map1 get = " + map1.get("strawberry"));
System.out.println("map1 get2 = " + map1.get("kiwi"));
// 2-3. size
System.out.println("map1 size = " + map1.size());
// 2-4. remove
System.out.println("map1 remove = " + map1.remove("strawberry"));
System.out.println("map1 remove2 = " + map1.remove("kiwi"));
System.out.println("map1 = " + map1);
// 2-5. containsKey
System.out.println("map1 containsKey = " + map1.containsKey("apple"));
System.out.println("map1 containsKey2 = " + map1.containsKey("kiwi"));
// 3. Generics //자료형을 명시적으로 지정하여 안정성을 높여주며 형변환을 줄여줌
System.out.println("== Generics ==");
ArrayList l3 = new ArrayList();
l3.add(3);
l3.add("Hello");
System.out.println("l3 = " + l3);
ArrayList<String> l4 = new ArrayList<String>();
l4.add("Hello");
System.out.println("l4 = " + l4);
HashMap map2 = new HashMap();
map2.put(123,"9000");
map2.put("kiwi",9000);
System.out.println("map2 = " + map2);
HashMap<String, Integer> map3 = new HashMap<>();
map3.put("grape",34000);
System.out.println("map2 = " + map3);