-
java - 12 ) 자바 API 클래스Java 2020. 8. 3. 15:24
Object 클래스
java.lang 패키지
- java.lang 패키지는 자바에서 가장 기본적인 동작을 수행하는 클래스들의 집합이다.
따라서 자바에서는 java.lang 패키지의 클래스들은 import 문을 사용하지 않아도 클래스 이름만으로 바로 사용할 수 있다.
java.lang.Object 클래스
- java.lang 패키지 중에서도 가장 많이 사용되는 클래스는 바로 Object 클래스이다.
Object 클래스는 모든 자바 클래스의 최고 조상 클래스이다.
따라서 자바의 모든 클래스는 Object 클래스의 모든 메소드를 바로 사용할 수 있다.
toString() 메소드
- toString() 메소드는 해당 인스턴스에 대한 정보를 문자열로 반환한다.
이때 반환되는 문자열은 클래스 이름과 함께 구분자로 '@'가 사용되며, 그 뒤로 16진수 해시코드가 추가된다.
16진수 해시 코드 값은 인스턴스의 주소를 가리키는 값으로, 인스턴스마다 모두 다르게 반환된다.
Car car01 = new Car(); Car car02 = new Car(); System.out.println(car01.toString()); System.out.println(car02.toString()); // 결과 Car@15db9742 Car@6d06d69c
equals() 메소드
- equals() 메소드는 해당 인스턴스를 매개변수로 전달받는 참조 변수와 비교하여, 그 결과를 반환한다.
이때 참조 변수가 가리키는 값을 비교하므로, 서로 다른 두 객체는 언제나 false를 반환하게 된다.
Car car01 = new Car(); Car car02 = new Car(); System.out.println(car01.equals(car02)); // false car01 = car02; // 두 참조 변수가 같은 주소를 가리킴. System.out.println(car01.equals(car02)); // true
clone() 메소드
- clone() 메소드는 해당 인스턴스를 복제하여, 새로운 인스턴스를 생성해 반환한다.
하지만 Object 클래스의 clone() 메소드는 단지 필드의 값만을 복사하므로,
필드의 값이 배열이나 인스턴스면 제대로 복제할 수 없다.
따라서 이러한 경우에는 해당 클래스에서 clone() 메소드를 오버라이딩하여, 재정의 해야한다.
이러한 clone() 메소드는 데이터의 보호를 이유로 Cloneable 인터페이스를 구현한 클래스의 인스턴스만이 사용할 수 있다.
String 클래스
java.lang.String 클래스
- 자바에서는 문자열을 위한 String 이라는 클래스를 별도로 제공한다.
String 클래스에는 문자열과 관련된 작업을 할 때 유용하게 사용할 수 있는 다양한 메소드가 포함되어 있다.
이러한 String 클래스에는 java.lang 패키지에 포함되어 제공된다.
String 인스턴스는 한 번 생성되면 그 값을 읽기만 할 수 있고, 변경할 수는 없다.
이러한 객체를 자바에서는 불변 객체 (immutable object)라고 한다.
즉, 자바에서 덧셈 연산자를 이용하여 문자열 결합을 수행하면, 기존 문자열의 내용이 변경되는 것이 아니라
내용이 합쳐진 새로운 String 인스턴스가 생성되는 것이다.
charAt() 메소드
- charAt() 메소드는 해당 문자열의 특정 인덱스에 해당하는 문자를 반환한다.
만약 해당 문자열의 길이보다 큰 인덱스나 음수를 전달하면, IndexOutOfBoundsException 오류가 발생한다.
String str = new String("Java"); System.out.println("원본 문자열 : " + str); for (int i = 0; i < str.length(); i++) { System.out.print(str.charAt(i) + " "); } System.out.println("\ncharAt() 메소드 호출 후 원본 문자열 : " + str);
compareTo() 메소드
- compareTo() 메소드는 해당 문자열을 인수로 전달된 문자열과 사전 편찬 순으로 비교한다.
이 메소드는 문자열을 비교할 때 대소문자를 구분하여 비교한다.
만약 두 문자열이 같다면 0을 반환하며, 해당 문자열이 인수로 전달된 문자열보다 작으면 음수를, 크면 양수를 반환한다.
만약 문자열을 비교할 때 대소문자를 구분하지 않기를 원하면, compareToIgnoreCase() 메소드를 사용한다.
String str = new String("abcd"); System.out.println("원본 문자열 : " + str); System.out.println(str.compareTo("bcef")); // -1 System.out.println(str.compareTo("abcd") + "\n"); // 0 System.out.println(str.compareTo("Abcd")); // 32 System.out.println(str.compareToIgnoreCase("Abcd")); // 0 System.out.println("compareTo() 메소드 호출 후 원본 문자열 : " + str);
concat() 메소드
- concat() 메소드는 해당 문자열의 뒤에 인수로 전달된 문자열을 추가한 새로운 문자열을 반환한다.
만약 인수로 전달된 문자열의 길이가 0이면, 해당 문자열을 그대로 반환한다.
String str = new String("Java"); System.out.println("원본 문자열 : " + str); System.out.println(str.concat("수업")); // Java수업 System.out.println("concat() 메소드 호출 후 원본 문자열 : " + str);
indexOf() 메소드
- indexOf() 메소드는 해당 문자열에서 특정 문자나 문자열이 처음으로 등장하는 위치의 인덱스를 반환한다.
만약 해당 문자열에 전달된 문자나 문자열이 포함되어 있지 않으면 -1을 반환한다.
대소문자 구분한다.
String str = new String("Oracle Java"); System.out.println("원본 문자열 : " + str); System.out.println(str.indexOf('o')); // -1 System.out.println(str.indexOf('a')); // 2 System.out.println(str.indexOf("Java")); // 7 System.out.println("indexOf() 메소드 호출 후 원본 문자열 : " + str);
trim() 메소드
- trim() 메소드는 해당 문자열의 맨 앞과 맨 뒤에 포함된 모든 공백 문자를 제거해준다.
String str = new String(" Java "); System.out.println("원본 문자열 : " + str); System.out.println(str + '|'); // Java | System.out.println(str.trim() + '|'); // Java| System.out.println("trim() 메소드 호출 후 원본 문자열 : " + str);
toLowerCase()와 toUpperCase() 메소드
- toLowerCase() 메소드는 해당 문자열의 모든 문자를 소문자로 변환시켜 준다.
toUpperCase() 메소드는 해당 문자열의 모든 문자를 대문자로 변환시켜 준다.
String str = new String("Java"); System.out.println("원본 문자열 : " + str); System.out.println(str.toLowerCase()); // java System.out.println(str.toUpperCase()); // JAVA System.out.println("두 메소드 호출 후 원본 문자열 : " + str);
StringBuffer 클래스
java.lang.StringBuffer 클래스
- String 클래스의 인스턴스는 한 번 생성되면 그 값을 읽기만 할 수 있고, 변경할 수는 없다.
하지만 StringBuffer 클래스의 인스턴스는 그 값을 변경할 수 도 있고, 추가할 수 도 있다.
이를 위해 StringBuffer 클래스는 내부적으로 버퍼 (buffer)라고 하는 독립적인 공간을 가진다.
버퍼 크기의 기본값은 16개의 문자를 저장할 수 있는 크기이며, 생성자를 통해 그 크기를 별도로 설정할 수 도 있다.
하지만 인스턴스 생성 시 사용자가 설정한 크기보다 언제나 16개의 문자를 더 저장할 수 있도록 여유 있는 크기로 생성된다.
덧셈 연산자를 이용해 String 인스턴스의 문자열을 결합하면, 내용이 합쳐진 새로운 String 인스턴스를 생성한다.
따라서 문자열을 많이 결합하면 결합할수록 공간의 낭비뿐만 아니라 속도 또한 매우 느려지게 된다.
하지만 StringBuffer 인스턴스를 사용하면 문자열을 바로 추가할 수 있으므로, 공간의 낭비도 없으며 속도도 매우 빨라진다.
이러한 StringBuffer 클래스는 java.lang 패키지에 포함되어 제공된다.
불변 클래스 (immutable class)와 가변 클래스 (mutable class)
- String 클래스와 같이 인스턴스가 한 번 생성되면 그 값을 변경할 수 없는 클래스를 불변 클래스라고 한다.
반대로 StringBuffer와 같이 자유롭게 인스턴스의 값을 변경할 수 있는 클래스를 가변 클래스라고 한다.
String 클래스와 같은 불변 클래스는 StringBuffer의 append() 나 insert() 메소드와 같이 값을 변경하는 set 메소드가 없다.
이렇게 불편하기만 할 것 같은 불변 클래스를 사용하는 이유는 멀티 스레드 환경에서 객체가 변화되는 상황이라면
불변 인스턴스를 사용하는 것이 좀 더 신뢰할 수 있는 코드를 작성할 수 있기 때문이다.
즉, 하나의 객체에 접근하면서 각각의 객체가 서로 영향을 주어서는 안 되는 경우에
불변 인스턴스를 사용하면 값이 변하지 않는다는 보장이된다.
append() 메소드
- append() 메소드는 인수로 전달된 값을 문자열로 변환한 후, 해당 문자열의 마지막에 추가한다.
이 메소드는 String 클래스의 concat() 메소드와 같은 결과를 반환하지만, 내부적인 처리 속도가 훨씬 빠르다.
StringBuffer str = new StringBuffer("Java"); System.out.println("원본 문자열 : " + str); System.out.println(str.append("수업")); // Java수업 System.out.println("append() 메소드 호출 후 원본 문자열 : " + str); // Java수업
capacity() 메소드
- capacity() 메소드는 StringBuffer 인스턴스의 현재 버퍼 크기를 반환한다.
StringBuffer str01 = new StringBuffer(); StringBuffer str02 = new StringBuffer("Java"); System.out.println(str01.capacity()); // 16 System.out.println(str02.capacity()); // 20
delete() 메소드
- delete() 메소드는 전달된 인덱스에 해당하는 부분 문자열을 해당 문자열에서 제거한다.
또한, deleteCharAt() 메소드를 사용하면 특정 위치의 특정 문자 한 개만을 제거할 수도있다.
StringBuffer str = new StringBuffer("Java Oracle"); System.out.println("원본 문자열 : " + str); System.out.println(str.delete(4, 8)); // Javacle System.out.println(str.deleteCharAt(1)); // Jvacle System.out.println("deleteCharAt() 메소드 호출 후 원본 문자열 : " + str); // Jvacle
insert() 메소드
- insert 메소드는 인수로 전달된 값을 문자열로 변환한 후, 해당 문자열의 지정된 인덱스 위치에 추가한다.
이때 전달된 인덱스가 해당 문자열의 길이와 같으면, append() 메소드와 같은 결과를 반환한다.
StringBuffer str = new StringBuffer("Java 만세!!"); System.out.println("원본 문자열 : " + str); System.out.println(str.insert(4, "Script")); // JavaScript 만세!! System.out.println("insert() 메소드 호출 후 원본 문자열 : " + str); // JavaScript 만세!!
Math 클래스
java.lang.Math 클래스
- Math 클래스는 수학에서 자주 사용하는 상수들과 함수들을 미리 구현해 놓은 클래스이다.
Math 클래스의 모든 메소드는 클래스 메소드 (static method) 이므로, 객체 생성없이 바로 사용 가능하다.
이러한 Math 클래스는 java.lang 패키지에 포함되어 제공된다.
Math.E와 Math.PI
1. Math.E : 오일러의 수라 불리며, 자연로그의 밑 값으로 2.718을 의미한다.
2. Math.PI : 원의 원주를 지름으로 나눈 비율 (원주율) 값으로 3.14159를 의미한다.
random() 메소드
- random() 메소드는 0.0 이상 1.0 미만의 범위에서 임의의 double형 값을 하나 생성하여 반환한다.
이 메소드는 내부적으로 java.util 패키지의 Random 클래스를 사용한 의사 난수 발생기를 사용하여 임의의 수를 생성한다.
System.out.println((int)(Math.random() * 100)); // 0 ~ 99 Random ran = new Random(); System.out.println(ran.nextInt(100)); // 0 ~ 99
(int)(Math.random() * 6); // 0 ~ 5 ((int)(Math.random() * 6) + 1); // 1 ~ 6 ((int)(Math.random() * 6) + 3); // 3 ~ 8
abs() 메소드
- abs() 메소드는 전달된 값이 음수이면 그 값의 절대값을 반환하며, 양수이면 그대로를 반환한다.
System.out.println(Math.abs(10)); // 10 System.out.println(Math.abs(-10)); // 10 System.out.println(Math.abs(-3.14)); // 3.14
floor() 메소드, ceil() 메소드와 round() 메소드
- floor() 메소드는 인수로 전달받은 값과 같거나 작은 수 중에서 가장 큰 정수를 반환한다. (올림)
ceil() 메소드는 반대로 인수로 전달받은 값과 같거나 큰 수 중에서 가장 작은 정수를 반환한다. (내림)
round() 메소드는 전달받은 실수를 소수점 첫째 자리에서 반올림한 정수를 반환한다. (반올림)
System.out.println(Math.ceil(10.0)); // 10.0 System.out.println(Math.ceil(10.1)); // 11.0 System.out.println(Math.ceil(10.000001)); // 11.0 System.out.println(Math.floor(10.0)); // 10.0 System.out.println(Math.floor(10.9)); // 10.0 System.out.println(Math.round(10.0)); // 10 System.out.println(Math.round(10.4)); // 10 System.out.println(Math.round(10.5)); // 11
max() 메소드와 min 메소드
- max() 메소드는 전달된 두 값을 비교하여 그 중에서 큰 값을 반환하며, min() 메소드는 그 중에서 작은 값을 반환한다.
System.out.println(Math.max(3.14, 3.14159)); // 3.14159 System.out.println(Math.min(3.14, 3.14159)); // 3.14 System.out.println(Math.max(-10, -11)); // -10 System.out.println(Math.min(-10, -11)); // -11
pow() 메소드와 sqrt() 메소드
- pow() 메소드는 전달된 두 개의 double형 값을 가지고 제곱 연산을 수행한다.
반대로 sqrt() 메소드는 전달된 double 형 값의 제곱근 값을 반환한다.
System.out.println((int)Math.pow(5, 2)); // 25 System.out.println((int)Math.sqrt(25)); // 5
sin() 메소드, cos() 메소드와 tan() 메소드
- 자바에서는 삼각 함수와 관련된 다양한 연산을 간편하게 수행할 수 있도록 많은 삼각 함수를 제공한다.
sin(), cos(), tan() 는 각각의 값을 반환한다.
이 외에도 asin(), acos(), atan(), atan2(), sinh(), cosh(), tanh() 도 있다.
System.out.println(Math.sin(Math.toRadians(30))); System.out.println(Math.sin(Math.PI / 6)); System.out.println(Math.tan(Math.toRadians(45))); System.out.println(Math.tan(Math.PI / 4)); System.out.println(Math.cos(Math.toRadians(60))); System.out.println(Math.cos(Math.PI / 3));
Wrapper 클래스
래퍼 클래스 (Wrapper class)
- 프로그램에 따라 기본 타입의 데이터를 객체로 취급해야 하는 경우가 있다.
예를들어, 메소드의 인수로 객체 타입만이 요구되면, 기본 타입의 데이터를 그대로 사용할 수는 없다.
이때에는 기본 타입의 데이터를 먼저 객체로 변환한 후 작업을 수행해야 한다.
이렇게 8개의 기본 타입에 해당하는 데이터를 객체로 포장해 주는 클래스를 래퍼 클래스라고한다.
래퍼 클래스는 각각의 타입에 해당하는 데이터를 인수로 전달받아, 해당 값을 가지는 객체로 만들어준다.
이러한 래퍼 클래스는 모두 java.lang 패키지에 포함되어 제공된다.
박싱(Boxing)과 언박싱(Unboxing)
- 래퍼 클래스는 산술 연산을 위해 정의된 클래스가 아니므로, 인스턴스에 저장된 값을 변경할 수 없다.
단지, 값을 참조하기 위해 새로운 인스턴스를 생성하고, 생성된 인스턴스의 값만을 참조할 수 있다.
Integer num = new Integer(17); // 박싱 int n = num.intValue(); // 언박싱 System.out.println(n); Character ch = 'X'; // Character ch = new Character('X'); : 오토박싱 char c = ch; // char c = ch.charValue(); : 오토언박싱 System.out.println(c);
Enum 클래스
열거체 (enumeration type)
1. 열거체를 비교할 때 실제 값뿐만 아니라 타입까지도 체크합니다.
2. 열거체의 상숫값이 재정의되더라도 다시 컴파일할 필요가 없다.
열거체의 정의 및 사용
enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET } Rainbow.RED
열거체의 상숫값 정의 및 추가
- 열거체의 첫 번째 상숫값은 0부터 설정되며, 그 다음은 바로 앞의 상숫값보다 1만큼 증가되며 설정된다.
java.lang.Enum 클래스
- Enum 클래스는 모든 자바 열거체의 공통된 조상 클래스이다.
Enum 클래스에는 열거체를 조작하기 위한 다양한 메소드가 포함되어 있다.
values() 메소드
- values() 메소드는 해당 열거체의 모든 상수를 저장한 배열을 생성하여 반환한다.
이 메소드는 자바의 모든 열거체에 컴파일러가 자동으로 추가해 주는 메소드이다.
enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET } public class Enum01 { public static void main(String[] args) { Rainbow[] arr = Rainbow.values(); for (Rainbow rb : arr) { System.out.println(rb); } } }
valueOf() 메소드
- valueOf() 메소드는 전달된 문자열과 일치하는 해당 열거체의 상수를 반환한다.
enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET } public class Enum02 { public static void main(String[] args) { Rainbow rb = Rainbow.valueOf("GREEN"); System.out.println(rb); // GREEN } }
ordinal() 메소드
- ordinal() 메소드는 해당 열거체 상수가 열거체 정의에서 정의된 순서(0부터 시작)을 반환한다.
이때 반환되는 열거체 정의에서 해당 열거체 상수가 정의된 순서이며, 상숫값 자체가 아니다.
enum Rainbow { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET } public class Enum03 { public static void main(String[] args) { int idx = Rainbow.YELLOW.ordinal(); System.out.println(idx); // 2 } }
Arrays 클래스
java.util 패키지
- java.util 패키지에는 프로그램을 개발하는 데 사용할 수 있는 유용한 유틸리티 클래스가 다수 포함되어 있다.
실제로 java.lang 패키지 다음으로 가장 많이 사용되는 패키지가 java.util 패키지이다.
하지만 java.util 패키지는 import문으로 패키지를 불러와야 사용할 수 있다.
java.util.Arrays 클래스
- Arrays 클래스에는 배열을 다루기 위한 다양한 메소드가 포함되어 있다.
Arrays 클래스의 모든 메소드는 클래스 메소드 이므로, 객체를 생성하지 않고도 바로 사용할 수 있다.
binarySearch() 메소드
- binarySearch() 메소드는 전달받은 배열에서 특정 객체의 위치를 이진 검색 알고리즘을 사용하여 검색한 후,
해당 위치를 반환한다.
이 메소드는 이진 검색 알고리즘을 사용하므로, 매개변수로 전달되는 배열이 sort() 메소드 등을 사용하여
미리 정렬되어 있어야만 제대로 동작한다.
int[] arr = new int[1000]; for(int i = 0; i < arr.length; i++) { arr[i] = i; } System.out.println(Arrays.binarySearch(arr, 437)); // 437
copyOf() 메소드
- copyOf() 메소드는 전달받은 배열의 특정 길이만큼을 새로운 배열로 복사하여 반환한다.
int[] arr1 = {1, 2, 3, 4, 5}; int[] arr2 = Arrays.copyOf(arr1, 3); for (int i = 0; i < arr2.length; i++) { System.out.print(arr2[i] + " "); // 1 2 3 } int[] arr3 = Arrays.copyOf(arr1, 10); for (int i = 0; i < arr3.length; i++) { System.out.print(arr3[i] + " "); // 1 2 3 4 5 0 0 0 0 0 }
copyOfRange() 메소드
- copyOfRange() 메소드는 전달받은 배열의 특정 범위에 해당하는 요소만을 새로운 배열로 복사하여 반환한다.
int[] arr1 = {1, 2, 3, 4, 5}; int[] arr2 = Arrays.copyOfRange(arr1, 2, 4); for (int i = 0; i < arr2.length; i++) { System.out.print(arr2[i] + " "); // 3 4 }
fill() 메소드
- fill() 메소드는 전달받은 배열의 모든 요소를 특정 값으로 초기화 해준다.
int[] arr = new int[10]; Arrays.fill(arr, 7); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); // 7 7 7 7 7 7 7 }
sort() 메소드
- sort() 메소드는 전달받은 배열의 모든 요소를 오름차순으로 정렬한다.
int[] arr = {5, 3, 4, 1, 2}; Arrays.sort(arr); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); // 1 2 3 4 5 }
※출처
'Java' 카테고리의 다른 글
BufferedReader , BufferedWriter (0) 2020.08.28 java - 14 ) 컬렉션 프레임워크 (2) 2020.08.28 java - 11 ) 다형성 (0) 2020.08.01 JPA - 객체지향 쿼리 언어 (JPQL) - 2 (0) 2020.07.31 JPA - 8. 객체지향 쿼리 언어 (JPQL) - 1 (0) 2020.07.29