[JAVA] java.lang 패키지
java.lang 패키지
- 자바 프로그래밍에 필요한 기본 클래스를 제공
java.lang
패키지에 존재하는 클래스를 사용할 때는 import 문이 필요 없음- 주요 클래스
- Object
- String, StringBuffer
- Process, Thread
- Exception, Throwable, Error
- System, Package, Class, Math
- 포장 클래스
- Number, Integer, Double, Character, Boolean 등
Object 클래스
- 자동으로 모든 클래스의 조상이 되는 클래스
- 클래스 계층 구조에서 루트가 되는 클래스
- 모든 클래스는 자동으로 Object 클래스를 상속받음
주요 메소드
protected Object clone()
- 객체를 복제하여 반환
public boolean equals(Object obj)
- 같은 객체인지 참조값으로 비교
public int hashCode()
- 객체를 식별하는 정수값을 반환
public String toString()
- 객체를 문자열로 반환
toString() 메소드
- 객체를 문자열로 표현하여 반환함
클래스 이름@16진수 해시코드
로 표현
- 문자열의 + 연산 또는
System.out.print()
등에서 필요 - 자식 클래스에서 재정의할 수 있음
- String, Integer 클래스 등에서 재정의되어 있음
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class MyClass1 {}
class MyClass2 extends Object {
public String toString() {
return "This is MyClass2 class";
}
}
public class Main {
public static void main(String args[]) {
MyClass1 my_class1 = new MyClass1();
MyClass2 my_class2 = new MyClass2();
System.out.println(my_class1.toString()); // MyClass@3d012ddd
System.out.println(my_class2.toString()); // This is MyClass2 class
System.out.println(my_class1); // MyClass@3d012ddd
System.out.println(my_class2); // This is MyClass2 class
}
}
equals() 메소드
- 두 객체 변수를 비교해서 변수가 가리키는 객체의 참조값이 같을 때 true를 반환
obj1.equals(obj2)
의 결과는obj1 == obj2
와 같음- 자식 클래스에서 재정의할 수 있음
- String, Integer 클래스 등에서 재정의되어 있음
1
2
3
4
5
6
7
8
9
10
11
12
Integer x = Integer.valueOf(5);
Integer y = Integer.valueOf(10);
Integer a = 5;
Short b = 5;
System.out.println(x.equals(y)); // false
System.out.println(x.equals(a)); // true
System.out.println(x.equals(b)); // false
System.out.println(x == y); // false
System.out.println(x == a); // true
System.out.println(x == b); // 컴파일 오류
clone() 메소드
- 객체를 복제하여 리턴함
- Cloneable 인터페이스를 구현한 클래스의 객체만 clone 메소드를 호출할 수 있음
- Cloneable 인터페이스를 구현한 클래스가 아니면 CloneNotSupportedException 예외 처리를 해야 함
1
2
3
4
5
6
Box b1 = new Box(20, 30);
Box b2 = (Box) b1.clone();
System.out.println(b2.width()); // 20
System.out.println(b2.height()); // 30
System.out.println(b1); // Box@626b2d4a
System.out.println(b2); // Box@5e91993f
getClass() 메소드
- 현재 객체의 유형, 즉 클래스 정보를 가진 Class를 리턴함
- Class 클래스는 클래스의 정보 확인을 위한 메소드를 제공
- getName, getSuperclass, getDeclaredFields, getDeclaredMethods 등
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Box box = new Box(20, 30);
Class c = box.getClass();
String class_name = c.getName();
String super_class = c.getSuperclass().getName();
Field []fields = c.getDeclaredFields();
Method []methods = c.getDeclaredMethods();
System.out.println(class_name); // Box
System.out.println(super_class); // java.lang.Object
for(int i = 0; i < fields.length; i++) {
System.out.println(fields[i]); // Box.width // Box.height
}
for(int i = 0; i < methods.length; i++) {
System.out.println(methods[i]); // Box.width() // Box.height()
}
String 클래스
- 문자열을 표현하고 처리하기 위한 클래스
String s1 = new String("Java"); // 객체를 생성
- String 클래스는 기본 자료형처럼 사용될 수 있음
String s2 = "Java"; // 리터럴을 대입
- 같은 리터럴은 1개만 만들어져 공유됨
System.out.pringln(s1.equals(s2)); // true
- String 객체는 내용이 변하지 않는 immutable 상수 객체
생성자
Stirng()
- 빈 문자열 객체 생성
String(String original)
String(char[] value)
String(char[] value, int offset, int count)
- offset 위치부터 count 개수만큼 문자열을 가져옴
문자열 비교 메소드
메소드 | 설명 |
---|---|
int compareTo(String anotherString) | 두 문자열이 같으면 0을 리턴하고, 다르면 0이 아닌 정수값을 리턴 |
int compareToIgnoreCase(String anotherString) | 대소문자를 무시하고 비교 |
boolean equals(Object anObject) | 두 문자열이 같으면 true를 리턴하고, 다르면 false를 리턴 |
boolean equalsIgnoreCase(String anotherString) | 대소문자를 무시하고 비교 |
1
2
3
4
5
6
7
String s1 = "Java";
String s2 = new String("java");
System.out.println(s1.compareTo(s2)); // -32
System.out.println(s1.compareToIgnoreCase(s2)); // 0
System.out.println(s1.equals(s2)); // false
System.out.println(s1.equalsIgnoreCase(s2)); // true
문자열 검색 메소드
메소드 | 설명 |
---|---|
int indexOf(String str) | 처음 위치부터 문자열 str을 찾아 처음 등장하는 위치(인덱스)를 리턴하고, 없으면 -1을 리턴 |
int indexOf(String str, int fromIndex) | fromIndex 위치부터 문자열 str을 찾아 처음 등장하는 위치(인덱스)를 리턴하고, 없으면 -1을 리턴 |
int lastIndexOf(String str) | 마지막 위치부터 앞 방향으로 문자열 str을 찾아 처음 등장하는 위치(인덱스)를 리턴하고, 없으면 -1을 리턴 |
int lastIndexOf(String str, int fromIndex) | fromIndex 위치부터 앞 방향으로 문자열 str을 찾아 처음 등장하는 위치(인덱스)를 리턴하고, 없으면 -1을 리턴 |
1
2
3
4
5
6
String s1 = "Java";
System.out.println(s1.indexOf('a')); // 1
System.out.println(s1.indexOf('a', 2)); // 3
System.out.println(s1.lastIndexOf('a')); // 3
System.out.println(s1.lastIndexOf('a', 2)); // 1
문자열 추출 메소드
메소드 | 설명 |
---|---|
int charAt(int index) | index 의치에 있는 문자를 리턴 |
String substring(int start) | start 위치부터 마지막까지의 문자열을 리턴 |
String substring(int start, int end) | start 위치부터 (end-1) 위치까지의 문자열을 리턴 |
1
2
3
4
5
String s1 = "Java";
System.out.println(s1.charAt(2)); // v
System.out.println(s1.substring(2)); // v
System.out.println(s1.substring(2, 4)); // va
문자열 변환 메소드
- 원본 문자열을 변경되지 않고, 새로운 객체가 만들어짐
메소드 | 설명 |
---|---|
String replace(char oldChar, char newChar) | oldChar 문자를 newChar 문자로 변환하여 리턴 |
String trim() | 문자열 앞과 뒤에 나오는 화이트 스페이스 문자를 제거하여 리턴 |
String toUpperCase() | 모든 문자를 대문자로 변환하여 리턴 |
String toLowerCase() | 모든 문자를 소문자로 변환하여 리턴 |
String concat(String str) | 문자열 뒤에 str을 연결하여 리턴 |
1
2
3
4
5
6
7
String s1 = " Java ";
System.out.println(s1.replace('a', 'o')); // " Jovo "
System.out.println(s1.trim()); // "Java"
System.out.println(s1.toUpperCase()); // " JAVA "
System.out.println(s1.toLowerCase()); // " java "
System.out.println(s1.concat("programming")); // " Java programming"
valueOf() 메소드
- 다른 자료형을 문자열로 변환하는 메소드
- 자료형이 객체인 경우 해당 객체의
toString()
메소드 호출 - null인 경우 문자열 “null”을 반환
1
2
3
4
5
6
7
8
System.out.println(String.valueOf(123)); // "123"
System.out.println(String.valueOf(5 > 3)); // "true"
System.out.println(String.valueOf(3.0)); // "3.0"
System.out.println(String.valueOf('c')); // "c"
int[] a = new int[5];
System.out.println(String.valueOf(a)); // "[I@7de26db8"
char[] b = { 'J', 'a', 'v', 'a' };
System.out.println(String.valueOf(b)); // "Java"
기타 메소드
메소드 | 설명 |
---|---|
boolean startsWith(String prefix) | 문자열이 prefix로 시작하면 true를 리턴 |
boolean endsWith(String suffix) | 문자열이 suffix로 끝나면 true를 리턴 |
char[] toCharArray() | 문자열을 배열로 변환하여 리턴 |
String 클래스의 문제점
- 문자열을 빈번하게 변경하는 경우 메모리 낭비 문제가 있음
- 기존 객체는 놔둔 채 새로운 String 객체가 계속 생성되어 실행이 느려짐
- 자주 변경되는 문자열을 다루어야 할 경우에는 String 클래스보다 StringBuffer나 StringBuilder 클래스를 사용하는 것이 보다 효율적임
- StringBuffer 클래스는 동시성 제어 기능 때문에 StringBuilder 클래스보다는 약간 느림
StringBuffer 클래스
- 객체 생성 이후 문자열을 변경할 수 있는 mutable 클래스
- 내부적으로 문자열을 저장하기 위해 크기가 조절되는 버퍼를 사용함
생성자
StringBuffer()
- 초기 버퍼의 크기는 16
StringBuffer(int length)
- 초기 버퍼의 크기는 length
StringBuffer(String str)
- 초기 버퍼의 크기는 (str의 길이+16)
주요 메소드
메소드 | 설명 |
---|---|
int capacity() | 버퍼의 크기를 리턴 |
int length() | 문자열의 길이를 리턴 |
char charAt(int index) | index 위치의 문자를 리턴 |
int indexOf(String str) | str로 시작하는 첫 위치를 리턴 |
String substring(int start, int end) | start 위치부터 (end-1) 위치까지의 문자열을 리턴 |
StringBuffer append(char c) | 문자열 뒤에 c를 추가한 StringBuffer 객체를 리턴 |
StringBuffer delete(int start, int end) | start 위치에서 (end-1) 위치까지의 문자열을 삭제 |
StringBuffer insert(int offset, String s) | offset 위치부터 s를 삽입 |
StringBuffer replace(int start, int end, String s) | start 위치부터 (end-1) 위치까지의 문자열을 s로 교체 |
StringBuffer reverse() | 문자열을 역순으로 변경 |
1
2
3
4
5
StringBuffer s1 = new StringBuffer("start");
System.out.println(s1.capacity()); // 21
System.out.println(s1.length()); // 5
System.out.println(s1.insert(2, 'n')); // stnart
System.out.println(s1.reverse()); // trants
포장 클래스
- 기본형을 참조형으로 표현하기 위한 클래스
- 기본형과 상응하는 객체 사이의 형변환(박싱 또는 언박싱) 기능 제공
- 기본형과 String 사이의 형변환 기능 제공
- 사용 목적
- 메소드의 인자로 객체가 필요할 때
- Number의 자식 포장 클래스가 제공하는 상수를 사용할 때
- Integer.MIN_VALUE, Integer.MAX_VALUE 등
- 클래스가 제공하는 다양한 메소드를 사용할 때
구분 | 기본형 | 참조형 |
---|---|---|
정수형 | byte | Byte |
short | Short | |
int | Integer | |
long | Long | |
실수형 | float | Float |
double | Double | |
문자형 | char | Character |
논리형 | boolean | Boolean |
박싱
- 기본형 데이터를 포장 클래스의 객체로 변환
- ex) double 값을 Double 객체로 변환
- 포장 클래스의
valueOf()
메소드를 사용 - 자동 박싱
- 기본형에서 포장 클래스의 객체로 자동 변환되는 것
- 인자에 전달되거나 변수에 대입될 때 적용됨
1
2
3
Double radius = new Double(2.59); // 생성자 방식. 옛날 방식
Double radius2 = Double.valueOf(10.4);
Double radius3 = 2.59; // 자동 박싱
언박싱
- 포장 클래스의 객체를 기본형 데이터로 변환하는 것
- 포장 클래스의
기본형Value()
메소드를 사용 - 자동 언박싱
- 포장 클래스의 객체에서 기본형으로 자동 변환되는 것
- 인자에 전달되거나 변수에 대입될 때 적용됨
1
2
3
4
Double radius = 2.59;
double r = radius.doubleValue();
double r2 = Integer.valueOf(3) % 2;
double r3 = radius; // 자동 언박싱
Number 클래스
- 숫자를 표현하는 포장 클래스인 Byte, Short, Integer, Long, Float, Double의 추상 부모 클래스
Number의 자식 클래스에서 구현된 주요 메소드 (예: Double 클래스)
메소드 | 설명 |
---|---|
double doubleValue() | Double 객체를 double 값으로 변환 (언박싱) |
String toString() | Double 객체를 String으로 변환 |
static Double valueOf(double) | double 값을 Double 객체로 변환 (박싱) |
static Double valueOf(String) | String 값을 Double 객체로 변환 |
static String toString(double) | double 값을 String으로 변환 |
static double parseDouble(String) | String 값을 double 값으로 변환 |
String과 기본형 데이터 간의 변환
- String을 int(또는 long)형으로 변환하는 경우
포장클래스.parse포장클래스(값)
사용int n = Integer.parseInt('123');
long n = Long.parseLong('123');
- int(또는 long)형을 String으로 변환하는 경우
포장클래스.toString(값)
혹은String.valueOf(값)
사용String s1 = Integer.toString(4);
String s2 = Long.toString(5l);
String s3 = String.valueOf(123);
System 클래스
- Java 플랫폼 및 시스템과 관련된 기능 제공
- 모든 멤버는 static이므로 사용할 때 객체를 생성할 필요 없음
주요 기능
- 표준 입출력 객체를 제공
- JVM 또는 운영체제 속성과 시스템 환경 변수의 사용과 제어
- 배열 복사, 시간 조회
- 프로그램의 제어 등
System 클래스의 표준 입출력 필드
System.in
- 표준 입력 스트림으로 InputStream 유형
- 키보드로부터 입력을 받을 때 사용
- ex)
System.in.read()
: 키보드로부터 1바이트 문자를 입력 받음
System.out
- 표준 출력 스트림으로 PrintStream 유형
- 화면에 데이터를 출력할 때 사용
System.err
- 표준 에러 출력 스트림으로 PrintStream 유형
- 오류 메시지를 화면에 출력할 때 사용
This post is licensed under CC BY 4.0 by the author.