자바 API란? |
- 자바에서 개발에 필요한 주요 기능을 미리 컴파일하여 묶어놓은 패키지 |
java.lang.*; 패키지 |
- 보이지는 않지만 항상 import되어있음! (import문 없이 사용 가능) - 자바 프로그래밍을 하면서 필수적인 클래스를 모아둔 패키지 |
Math클래스 |
* 특징 - java.lang이라는패키지 안에 존재한다 - 모든 필드와 메소드가 static으로 되어있다. - 객체를 생성할 필요가 없기 때문에 생성자가 private이다 - 모든게 static이기 때문에 객체 생성할 필요 x => 싱글톤패턴 (프로그램 실행과 동시에 메모리 영역에 올려놓고 재사용 하는 개념) (객체 하나만으로 어디에서든지 가져다 쓸 수 있는 개념 == 공유) |
0. 파이 => Math 클래스 내에 상수필드로 정의되어 있음 - Math.PI |
1. 올림 => Math.ceil(double) : double double num1 = 4.24242; System.out.println("올림 : " + Math.ceil(num1)); // 5.0 |
2. 반올림 => Math.round(double) : long System.out.println("반올림 : " + Math.round(num1)); //4 |
3. 버림 => Math.floor(double) : double System.out.println("버림 : " + Math.floor(num1)); //4.0 |
4. 절대값 => Math.abs(int/double/long/float) >> 오버로딩 적용 // int/double/long/float 그대로 int num2 = -13; System.out.println("절대값 : " + Math.abs(num2)); //13 |
5. 최소값 => Math.min(int, int) : 반환형 int System.out.println("최소값 : " + Math.min(5, 10)); //5 |
6. 최대값 => Math.max(int, int) : int System.out.println("최대값 : " + Math.max(5, 10)); //10 |
7. 제곱근(루트) => Math.sqrt(double) : double System.out.println("4의 제곱근 : " + Math.sqrt(4)); //2.0 |
8. 제곱 => Math.pow(double, double) : double System.out.println("2의 5제곱 : " + Math.pow(2, 5)); //32.0 |
String 클래스 ☆☆☆☆☆☆☆☆ |
* 특징 - 불변클래스(변하지 않는 클래스) - 수정하는 순간 기존의 값이 담겨져 있는 공간에서 수정되지 않음 * String 클래스의 객체 생성 방법 1. new 키워드로 생성자 호출 >> XXXXXXXXXXXX 이방법 쓰지마!! 2. 대입연산자를 통해서 직접 값을 넣어서 생성 >> String은 이 방법만 가능!!! ((대입연산자 사용시 주의)) String a = "a"; String b = "a"; System.out.println("결과 : " + a == b); // false System.out.println("결과 : " + (a == b)); // true 대입연산자 우선순위 주의!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
1. 생성자를 통해서 문자열 담기 >> 이 방법은 잊어버려 |
public void method1() {
String str = new String ("hello"); //hello
String str2 = new String ("hello"); //hello
// toString
System.out.println(str.toString());
System.out.println(str2);
// 1. String 클래스의 toStriong()의 경우
// 실제 담겨있는 문자열을 반환하게끔 오버라이딩 되어있음
// equals()
System.out.println(str.equals(str2)); // true
// true => 문자열을 비교했는데 동일하다.
// 2. String클래스의 equals()의 경우
// 주소값 비교가 아닌 문자열 비교를 하도록 오버라이딩 되어 있음
// hashCode()
// 16진수의 주소값 => 10진수 형태
System.out.println(str.hashCode()); //99162322
System.out.println(str2.hashCode()); //99162322
// String 클래스의 hashCode()
// 주소값을 변환해주는 것이 아닌 실제 담긴 문자열을 기반으로 해시코드 값을 만들어서 반환
// 같은 Hello가 들어있어서 해시코드가 똑같이 나옴
// 진짜 주소값을 알고싶다면??
// System.identityHashCode(참조형변수명);
System.out.println(System.identityHashCode(str)); //1829164700
System.out.println(System.identityHashCode(str2)); //2018699554
// 실제 주소값의 해시코드 출력
// str1과 str2의 주소값이 다르다!
// ==
System.out.println(str == str2); // false 찐 주소값 비교
}
2. 문자열을 리터럴로 생성 |
public void method2() {
String str1 = "hello";
String str2 = "hello";
//toString()
System.out.println(str1); // hello
System.out.println(str2); // hello
// equals()
System.out.println(str1.equals(str2)); //true
// hashCode()
System.out.println(str1.hashCode()); //9962322
System.out.println(str2.hashCode()); //9962322
// System.identityHashCode()
System.out.println(System.identityHashCode(str1)); //1829164700
System.out.println(System.identityHashCode(str2)); //1829164700
// 두 개의 찐주소가 같다??
System.out.println(str1 == str2); // true
}
StringPool |
- 특징 : 동일한 내용의 문자열이 존재할 수 없다 - 매번 새로운 주소값 참조 String str = "hello"; // 리터럴 대입시 string pool 영역에 올라감 System.out.println(System.identityHashCode(str)); //1829164700 str = "goodbye"; System.out.println(System.identityHashCode(str)); //2018699554 // 연결이 끊긴 문자열들은 가비지콜렉터가 알아서 정리해줌 // 불변이라고 해서 아예 수정이 안되는 것이 아니라 // 매번 새로운 주소값을 참조한다는 뜻 |
StringBuffer / StringBuilder |
* StringBuffer - 문자열 안의 내용이 변경될 때마다 새로운 공간을 할당하여 새로 집어넣는다 - 이를 막기 위해 임시공간(buffer)을 하나 준비하여 차곡차곡 담아두었다가 한번에 처리해주는 클래스 - 동시제어기능(Thread Safe)을 가진다 => 충돌 가능성이 있어 동시제어 기능이 필요한 경우에만 사용 - 간단한 프로그램 구현이나 동시제어를 다른 프로그램이 제공하는 경우 굳이 버퍼를 쓸 필요가 없다. StringBuffer sb = new StringBuffer(); sb.append("Hello"); System.out.println("Hello".hashCode()); //69609650 System.out.println(sb.hashCode()); // 1829164700 sb.append("World!"); System.out.println("Hello World!".hashCode()); // -969099747 System.out.println(sb.hashCode()); // 1829164700 System.out.println("결과 : " + sb); // HelloWorld! |
* StringBuilder - StringBuffer에서 동시제어기능만 뺀 클래스 - 기본적으로 Builder 사용 - 결과는 StringBuffer와 같음 StringBuilder sb = new StringBuilder(); sb.append("Hello"); System.out.println("Hello".hashCode()); //69609650 System.out.println(sb.hashCode()); // 2018699554 sb.append("World!"); System.out.println("Hello World!".hashCode()); // -969099747 System.out.println(sb.hashCode()); // 2018699554 System.out.println("결과 : " + sb); // HelloWorld! |
문자열과 관련된 메소드 |
String str1 = "Hell World!"; |
// 메소드명(매개변수) : 반환형 1. 문자열.charAt(int index) : char char ch = str1.charAt(4); System.out.println("ch : " + ch); |
2. 문자열.concat(String str) : String => 문자열과 전달받은 또 다른 문자열을 하나로 합쳐서 반환 => 문자열 + str String str2 = str1.concat("!!!!!!!!!!!!!!!!11"); System.out.println("str2 : " + str2); |
3. 문자열.length() : int => 문자열 길이를 반환(공백 포함, 메소드) /* int [] arr = new int[1]; int a = arr.length; // 필드*/ System.out.println("str1의 길이 : " + str1.length()); |
4. 문자열.substring(int beginindex) : String ☆☆자주쓰임☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ => 문자열의 beginindex위치에서 문자열 끝까지의 문자열을 추출해서 리턴, 문자열을 자르는 것 문자열.substring(int beginindex, int endindex) => 문자열 beginindex위치에서 endindex까지의 문자열을 추출해서 리턴 // 0 1 2 3 4 5 6 7 8 9 10 // H e l l W o r l d ! System.out.println(str1.substring(6)); // orld! System.out.println(str1.substring(0, 6)); // Hell W |
5. 문자열.replace(char old, char new) : 반환형 String 문자열에서 old문자를 new문자로 변환한 문자열을 리턴(치환) String str3 = str1.replace('l', 'x'); System.out.println("str3 : " + str3); // Hexx Worxd! |
6. 문자열.trim() : String => 문자열의 앞 뒤 공백을 제거한 문자열을 리턴 String str4 = " J A V A "; System.out.println("trim : " + str4.trim()); // 앞뒤공백만 날림 "J A V A" |
7. 문자열.toUpperCase() : String 모든 문자를 대문자로 변경 후 문자열 리턴 문자열.toLowerCase() : String 모든 문자를 소문자로 변경 후 문자열 리턴 System.out.println("toUpperCase : " + str1.toUpperCase()); System.out.println("toLowerCase : " + str1.toLowerCase()); |
8. 문자열.toCharArray() : char[ ] 문자열의 각 문자들을 char[ ] 배열에 옮겨담은 후 해당 배열을 리턴 char[ ] chArr = str1.toCharArray(); for(int i = 0; i < chArr.length; i++) { System.out.print(chArr[i] + " "); } // char[] => String char[] arr = {'a', 'p'}; System.out.println(" "); System.out.println(String.valueOf(arr)); // char형 배열을 String으로 |
'국비 > Java' 카테고리의 다른 글
[14-1] Java - Wrapper Class (0) | 2022.04.26 |
---|---|
[13-3] 다형성 실습문제 (0) | 2022.04.25 |
[13-1] Java - Exception 예외처리 (0) | 2022.04.25 |
[12-1] Java 다형성 Polymorphism, 추상클래스, 추상메소드, 인터페이스 (0) | 2022.04.22 |
[11-2] 상속 실습문제 (0) | 2022.04.21 |