( java.lang 패키지의 여러 클래스 )
java.lang 패키지에는 Java 프로그래밍을 위한 가장 기본적인 클래스가 포함되어 있습니다.
java.lang 패키지의 클래스는 import 문 없이 사용할 수 있습니다.
String 클래스와 System 클래스는 java.lang 패키지에 속합니다.
개체 클래스
: 모든 클래스의 최상위 조상으로, 멤버 변수가 없고 메서드가 11개뿐입니다.
Object 클래스의 멤버는 모든 클래스에서 직접 사용할 수 있습니다.
1. 공개 부울은 (객체 obj)와 같습니다.
: 객체 자체와 객체 obj가 동일한 객체인지 여부를 나타냄(동일한 경우 true)
객체의 참조 변수를 매개변수로 받아 비교하고 그 결과를 Boolean 값으로 보고합니다.
public boolean equals(Object obj) {
return (this==obj);
}
eauals 방법은 주소 값을 기준으로 비교하기 때문입니다.
에게,
두 Value 인스턴스의 멤버 변수 값은 다음과 같습니다.
10시까지
같더라도 equals 메서드를 사용한 비교 결과는 false입니다.
예를 들어 Value 클래스의 equals 메서드를 재정의하여 주소가 아닌 객체에 저장된 내용을 비교하도록 변경할 수 있습니다.
2. public int 해시코드( ) : 객체 자체의 해시 코드를 반환합니다.
해시 함수는 찾으려는 값을 입력할 때 값이 저장된 위치를 알려주는 해시 코드를 반환합니다.
eauals()를 재정의하는 경우 hashCode()도 재정의해야 합니다.
( 이는 equals()가 true를 반환하는 두 개체의 해시 코드가 동일해야 하기 때문입니다.
)
String 클래스에는 문자열의 내용이 동일한 경우 동일한 해시 코드를 반환하는 hashCode 메서드가 있습니다.
덮어쓰게 됩니다
System.identityHashCode는 Object 클래스의 hashCode 메서드처럼 객체의 주소를 사용하여 해시 코드를 생성합니다.
(항상 각 개체에 대해 다른 해시 코드 값을 반환)
3. 공개 문자열 toString() : 객체 자체에 대한 정보를 문자열로 반환합니다.
클래스를 재정의하지 않고 만들 때 toString()을 호출하면 클래스 이름과 16진수 해시 코드를 가져옵니다.
전)
예: String 클래스의 toString()은 String 인스턴스가 가지고 있는 문자열을 반환하도록 재정의됩니다.
일반적으로 인스턴스 또는 클래스에 대한 정보
또는 인스턴스 변수의 값을 문자열로 변환하고 반환하도록 재정의됩니다.
재정의 시 Object 클래스에 정의된 toString()의 접근 수식어가 public이기 때문에 Card2 클래스의 toString()의 접근 수식어 역시 public이어야 합니다.
문자열 클래스
: 문자열을 저장하고 조작하는 데 필요한 메서드와 함께 문자열에 대한 클래스를 제공합니다.
문자열을 저장할 인스턴스 변수로 문자 배열 참조 변수(char( ))의 값을 정의합니다.
인스턴스를 생성할 때 생성자의 매개변수로 받은 문자열은 이 인스턴스 변수에 문자 배열(char())로 저장됩니다.
문자열 인스턴스의 문자열이 생성되면 읽기만 가능하고 변경할 수 없습니다.
문자열 등을 결합하거나 추출합니다.
문자열을 자주 사용해야 하는 경우 StringBuffer 클래스를 사용합니다.
하기 좋은
(StringBuffer 인스턴스에 저장된 문자열은 수정할 수 있습니다.
)
문자열을 만드는 2가지 방법
1. 문자열 리터럴 지정 ㅡ> 기존 문자열 재사용
2. String 클래스 생성자로 생성 ㅡ> 항상 새로운 String 인스턴스 생성
빈 문자열
: 길이가 0인 배열
변수를 선언할 때 각 타입의 기본값으로 초기화하되 string은 null이 아닌 빈 문자열로 초기화하고 char는 \u0000이 아닌 공백으로 초기화한다.
전)
char( ) chArr = new char(0); // 길이가 0인 char배열
int ( ) iArr = { }; // 갈아가 0인 int배열
String 클래스의 생성자 및 메서드
방법: 설명 | 예 | 결과 |
문자열(문자열 s) : 지정된 문자열을 사용하여 String 인스턴스를 생성합니다. |
String s = new String(“안녕하세요”); | s = “안녕하세요” |
문자열(문자() 값) : 지정된 String으로 String 인스턴스를 생성합니다. |
char( ) c = {‘H’, ‘e’, ’l’, ‘l’, ‘o’}; 문자열 s = 새 문자열(c); |
s = “안녕하세요” |
문자열(문자열 버퍼 버프) : StringBuffer 인스턴스가 있는 문자열 및 동일한 내용으로 String 인스턴스를 생성합니다. |
StringBuffer sb = new StringBuffer(“안녕하세요”); 문자열 s = 새 문자열(sb); |
s = “안녕하세요” |
char chartAt(int 인덱스) : 지정된 위치(인덱스)에 있는 문자를 말합니다. (인덱스는 0부터 시작) |
문자열 s = “안녕하세요”; 문자열 n = “0123456”; char c = s.charAt(1); char c2 = n.charAt(1); |
c=”이” c2 = ‘1’ |
int 비교(문자열 str) : 문자열(str)을 알파벳순으로 비교하여 같으면 0을 반환합니다. 사전순으로 앞에 있으면 음수를, 뒤에 오면 양수를 반환합니다. |
int i = “aaa”.compareTo(“aaa”); int i2 = “aaa”.compareTo(“bbb”); int i3 = “bbb”.compareTo(“aaa”); |
나는 = 0 i2 = -1 i3 = 1 |
문자열 연결(문자열 str) : 끝에 문자열을 추가합니다. |
문자열 s = “안녕하세요”; String s2 = s.concat(“세계”); |
s2 = “안녕하세요 세계” |
부울 포함(CharSequence s) : 지정한 문자열이 포함되어 있는지 확인 |
문자열 s = “abcdefg”; 부울 b = s.contains(“bc”); |
b = 참 |
부울 endsWith(문자열 접미사) : 지정한 문자열(접미사)로 끝나는지 확인 |
문자열 파일 = “Hello.txt”; 부울 b = File.EndsWith(“txt”); |
b = 참 |
부울 같음(객체 obj) : 매개변수로 받은 문자열(obj)을 String 인스턴스의 문자열과 비교하여 obj가 문자열이 아니거나 문자열이 다른 경우 false를 반환합니다. |
문자열 s = “안녕하세요”; 부울 b = s.equals(“안녕하세요”); 부울 b2 = s.equals(“hello”); |
b = 참 b2 = 틀리다 |
부울 equalsIgnoreCase(문자열 str) : String 인스턴스와 String 인스턴스 간의 대/소문자를 구분하지 않는 비교 |
문자열 s = “안녕하세요”; 부울 b = s.equalsIgnoreCase(“안녕하세요”); 부울 b2 = 에스equalsIgnoreCase(“안녕하세요”); |
b = 참 b2 = 참 |
int indexOf(int 채널) : 문자열에 특정 문자(ch)가 있는지 확인 장소를 말합니다 (색인) 찾지 못한 경우 -1 반환(인덱스는 0부터 시작) |
문자열 s = “안녕하세요”; int idx1 = s.indexOf(‘o’); int idx2 = s.indexOf(‘k’); |
idx1 = 4 idx2 = -1 |
int indexOf(int ch, int pos) : 지정된 위치(pos)에서 시작하는 문자열에 지정된 문자(ch)가 있는지 확인하고 위치(index)를 보고합니다. 찾지 못한 경우 -1 반환 |
문자열 s = “안녕하세요”; int idx1 = s.indexOf(‘e’, 0); int idx2 = s.indexOf(‘e’, 2); |
idx1 = 1 idx2 = -1 |
int indexOf(문자열 문자열) : 특정 문자열의 존재 여부를 확인하여 위치를 알려주고, 그렇지 않으면 -1을 반환 |
문자열 s = “ABCDEFG”; int idx = s.indexOf(“CD”); |
idx=2 |
문자열 내부() : 문자열을 상수 풀에 등록 동일한 내용의 문자열이 상수 풀에 이미 존재하는 경우 해당 문자열의 주소를 반환합니다. |
문자열 s = 새 문자열(“abc”); 문자열 s2 = 새 문자열(“abc”); 부울 b = (s==s2); 부울 b2 = s.는 (s2)와 같습니다. 부울 b3 = (s.intern() == s2.intern()); |
b = 거짓 b2 = 참 b3 = 참 |
int lastIndexOf(int 채널) : 문자열의 오른쪽 끝에서 지정된 문자 또는 문자 코드를 찾아 위치를 보고합니다. 찾지 못하면 -1이 반환됩니다. |
문자열 s = “java.lang.객체”; int idx1 = s.lastIndexOf(‘.’); int idx2 = s.indexOf(‘.’); |
idx1 =9 idx2 = 4 |
int lastIndexOf(문자열 문자열) : 인스턴스에서 문자열의 끝에서 지정된 문자열을 찾아 위치를 보고합니다. 찾지 못하면 -1이 반환됩니다. |
문자열 s = “java.lang.java”; int idx1 = s.lastIndexOf(“자바”); int idx2 = s.indexOf(“자바”); |
idx1 = 10 idx2 = 0 |
정수 길이( ) : 문자열의 길이를 나타냅니다. |
문자열 s = “안녕하세요”; int 길이 = s.length( ); |
길이 = 5 |
문자열 바꾸기(문자 alt, 문자 nw) : 문자열의 문자(old)가 새 문자(nw)로 대체된 문자열을 반환합니다. |
문자열 s = “안녕하세요”; 문자열 s1 = s.replace(‘H’, ‘C’) |
s1 = 첼로 |
문자열 바꾸기(CharSequence old, CharSequence nw) : 문자열의 모든 문자열(old)을 새 문자열(nw)로 교체한 문자열을 반환합니다. |
문자열 s = “안녕하세요”; String s1 =s.replace(“ll”,”LL”); |
s1 = “안녕하세요” |
문자열 replaceAll(문자열 정규식, 문자열 교체) : 지정된 문자열(regex)과 일치하는 모든 문자열을 새 문자열로 변경합니다. |
문자열 ab = “AABBAA”; String r = ab.replaceAll(“BB”,”bb”); |
r = AAbbAAbb” |
문자열 replaceFirst(문자열 정규식, 문자열 교체) : 지정된 문자열(regex)과 일치하는 문자열 중. 첫 번째 문자열만 새 문자열로 변경 |
문자열 ab = “AABBAA”; String r = ab.replaceAll(“BB”,”bb”); |
r = “AAbbAABB” |
연결하다() : 여러 문자열 사이에 구분 기호 넣기 콤비네이션Do. ( ※split ( ) : 구분자로 문자열을 잘라냄)
java.util.StringJoiner 클래스문자열을 다음과 결합할 수 있습니다.
전)
문자열과 기본 유형 간의 변환
프리미티브를 문자열로 변환
– 숫자에 빈 문자열 ” “을 추가하여 기본 유형을 문자열로 변경할 수 있습니다.
– valueOf()로 변경 가능
문자열을 기본 유형으로 캐스트
– ()의 가치 사용
– 파싱인트() 사용
전)
※주의
문자열에 공백이나 문자가 포함된 경우 parseInt( ) 또는 pareFloat( )와 같은 메서드는 변환 시 예외(NumberFormatException)를 발생시킬 수 있음 ㅡ> Trim( )을 함께 사용하여 문자열 양쪽 끝의 공백을 제거
※ 요약 ※
– 문자열 클래스: 데이터(char()) + 메서드(문자열 변환), 불변 클래스(내용 변경 불가)
– 문자열 조합이나 변경이 자주 발생하는 경우 ㅡ> StringBuffer 클래스 사용
– 문자열 비교: 항상 내용을 동등하게 비교합니다.
새 객체를 생성하여 비문자 그대로 인스턴스화하거나 버퍼를 수정합니다.
거울이기 때문에 눈높이에서 내용을 비교해야 합니다.
– 문자열 리터럴은 프로그램 실행 시 자동 생성(상수 풀에 저장)
– 동일한 내용을 가진 하나의 문자열 리터럴만 생성됩니다.
– 빈 문자열: null이 아닌 크기 0의 배열, null 처리 대신 자주 사용됨(NullPointerException 방지)
– cf) 길이, 크기: 배열에 초점을 맞추는 것과 메모리 공간에 초점을 맞추는 것 사이의 차이. Java에서 그다지 중요한 부분이 아닐 수도 있습니다.
StringBuffer 클래스
: 인스턴스 생성 시 지정 문자열 변경 가능
내부적으로 문자열 조작을 위한 버퍼가 있습니다.
StringBuffer 인스턴스를 만들 때 크기를 지정할 수 있습니다.
StringBuffer(int length) 생성자를 이용하여 처리할 문자열의 길이를 고려하여 버퍼의 길이를 충분히 설정하는 것이 좋다.
(처리된 문자열이 버퍼의 길이를 초과하는 경우 버퍼의 길이를 늘리는 연산을 추가해야 합니다.
)
StringBuffer 클래스의 인스턴스 생성 시 적절한 길이의 char 배열이 생성되며, 이 배열은 문자열을 저장하고 조작하기 위한 버퍼로 사용됩니다.
버퍼 크기를 지정하지 않으면 16자를 담을 수 있는 큰 버퍼가 생성됩니다.
반환 유형이 StringBuffer인 경우에도 append()는 자신의 주소를 반환합니다.
ㅡ> Append()는 StringBuffer 인스턴스에서 순차적으로 호출할 수 있습니다.
StringBuffer 인스턴스에 포함된 문자열을 비교하려면 StringBuffer 인스턴스에서 toString()을 호출하여 String 인스턴스를 가져온 다음 equals 메서드를 사용하여 비교합니다.
(StringBuffer 클래스는 equals 메서드를 재정의하지 않으므로 StringBuffer 클래스의 equals 메서드를 사용하더라도 같음 비교 연산자(==)를 사용하는 것과 동일한 결과를 제공합니다.
반면에 toString()은 재정의됩니다.
StringBuffer 인스턴스
toString()이 호출되면 포함된 문자열이 문자열로 반환됨)