API
* API : Application Programming Interface
* '라이브러리'라고도 함.
Math클래스
* 수학과 관련된 유용한 기능을 제공하는 클래스
* java.lang.math에 위치해 있음.
* 모든 메소드들이 static, 모든 필드들이 상수필드임
* => 객체 생성을 할 필요가 없음.
*
* Math m = new Math();
* [오류] The constructor Math() is not visible
* Ctrl키를 누르고 Open declaration을 보면 생성자가 private로 되어있음
*
* static : 프로그램 실행과 동시에 메모리 영역에 올려놓음.
* 공유(재사용)의 개념이 강함.
* => 싱글톤 패턴(클래스의 객체를 API문서에 단 한번 생성하고, 이를 사용함)
package com.kh.chap01_math.run;
public class MathRun {
public static void main(String[] args) {
System.out.println("파이 : "+ Math.PI);
double num1 = 4.349;
System.out.println("올림 : "+Math.ceil(num1));
System.out.println("반올림 : "+Math.round(num1));
System.out.println("버림 : "+Math.floor(num1));
int num2 = -10;
System.out.println("절대값 : "+Math.abs(num2));
System.out.println("최소값 : "+Math.min(5, 10));
System.out.println("최대값 : "+Math.max(5, 10));
System.out.println("4의 제곱근 : "+Math.sqrt(4));
System.out.println("2의 10제곱 : "+Math.pow(2, 10));
}
}
String클래스
상수풀(String Pool)
* String은 "불변클래스"(변하지 않는 클래스)라고 불림.
* => String 객체 기준으로 값이 수정되는 순간, 기존에 담긴 공간의 값이 변경되는 것이 아닌,
* => 새로운 곳에서 새로운 문자열이 생기고 그 위치를 참조함.
*
* String 객체를 만들때, 리터럴을 제시하는 방식으로 객체를 만들면
* 그 내용물이 heap영역에 있는 "상수풀(StringPool)"의 영역에 올라가게 됨.
* 이 영역에서는 중복되는 내용이 있다면, 중복된 내용을 빼는 대신, 같은 주소값을 참조하게 함.
package com.kh.chap02_String.controller;
public class A_StringPoolTest {
public void method1() {
String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1 == str2);
System.out.println(str1);
System.out.println(str1.equals(str2));
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
System.out.println(System.identityHashCode(str1));
System.out.println(System.identityHashCode(str2));
}
public void method2() {
String str1 = "hello";
String str2 = "hello";
System.out.println(str1 == str2);
System.out.println(str1);
System.out.println(str2);
System.out.println(str1.equals(str2));
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
System.out.println(System.identityHashCode(str1));
System.out.println(System.identityHashCode(str2));
}
public void method3() {
String str = "hello";
System.out.println(System.identityHashCode(str));
str = "goodbye";
System.out.println(System.identityHashCode(str));
str += "abc";
System.out.println(str);
System.out.println(System.identityHashCode(str));
}
}
String 메소드
package com.kh.chap02_String.controller;
import java.util.Arrays;
import java.util.Scanner;
public class B_StringMethodTest {
public void method() {
String str1 = "Hell world";
char ch = str1.charAt(3);
System.out.println("ch : "+ch);
String str2 = "!!!";
System.out.println(str1.concat(str2));
System.out.println(str1 + str2);
System.out.println("str1의 길이 : "+str1.length());
System.out.println("Str1의 부분문자열 : "+str1.substring(6));
System.out.println("str1의 부분문자열 : "+str1.substring(0,6));
String str3 = str1.replace('l', 'c');
System.out.println("str3 : "+str3);
String str4 = " JA VA ";
System.out.println("str4.trim()적용 : " + str4.trim());
System.out.println((str4).replace(" ", ""));
System.out.println("대문자 : " + str1.toUpperCase());
System.out.println("소문자 : " + str1.toLowerCase());
System.out.println("---------------------------------------------------");
Scanner sc = new Scanner(System.in);
System.out.println("종료하시겠습니까? (Y,N) : ");
char answer1 = sc.nextLine().charAt(0);
if(answer1 == 'y' || answer1 =='Y') {
System.out.println("시스템을 종료합니다.");
}else {
System.out.println("시스템을 종료하지 않습니다.");
}
char answer2 = sc.nextLine().toUpperCase().charAt(0);
if(answer2 =='Y') {
System.out.println("시스템을 종료합니다.");
}else {
System.out.println("시스템을 종료하지 않습니다.");
}
System.out.println("---------------------------------------------------");
char[] arr = new char[str1.length()];
for(int i=0; i<arr.length; i++) {
arr[i] = str1.charAt(i);
}
System.out.println(Arrays.toString(arr));
char[] arr2 = str1.toCharArray();
System.out.println(Arrays.toString(arr2));
char[] arr3 = {'a','p','p','l','e'};
String result = "";
for(int i=0; i<arr3.length; i++) {
result = result+arr3[i];
}
System.out.println("result : "+ result);
System.out.println("메소드 사용 후 : "+String.valueOf(arr3));
}
}
StringTokenizer
package com.kh.chap02_String.controller;
import java.util.StringTokenizer;
public class C_StringTokenizerTest {
public void method1() {
String str = "Java,Oracle,JDBC,HTML,Server,Spring";
String[] arr = str.split(",");
for(int i=0; i<arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
for(String s : arr) {
System.out.print(s+" ");
}
System.out.println();
System.out.println("-----------------------------------------");
StringTokenizer stn = new StringTokenizer(str, ",");
System.out.print("분리된 문자열의 개수 : "+stn.countTokens() + "개");
System.out.println(stn.nextToken());
System.out.println(stn.nextToken());
System.out.println(stn.nextToken());
System.out.println(stn.nextToken());
System.out.println(stn.nextToken());
System.out.println(stn.nextToken());
System.out.println(stn.nextToken());
System.out.println();
System.out.println("현재 담겨있는 토큰의 개수 : "+stn.countTokens() + "개");
int end = stn.countTokens();
for(int i=0; i<end; i++) {
System.out.print(stn.nextToken()+" ");
}
while(stn.hasMoreTokens()) {
System.out.print(stn.nextToken()+" ");
}
}
}
Wrapper 클래스
* 자료형 => 기본자료형(8가지), 참조자료형(1가지)
* 기본자료형은 Stack에 실제값을 바로 담았었음.
* 기본자료형은 .메소드() 호출이 불가함.
*
* 참조자료형은 Stack에 주소값, Heap에 실제값을 담았었음.
* 참조자료형은 .메소드() 호출이 가능했음.
*
* Wrapper클래스
* 기본자료형을 객체형식으로 포장해주는 클래스를 Wrapper클래스라고 함.
*
* 기본자료형 <-------> Wrapper클래스
* boolean Boolean
* char Character
* byte Byte
* short Short
* int Integer
* long Long
* float Float
* double Double
*
* => 기본자료형을 Wrapper클래스 형태로 바꾸어주는 작업을 Boxing이라고 함.
* => Wrapper클래스를 기본자료형으로 바꾸어주는 작업을 UnBoxing이라고 함.