[Java] Java Basic APIs
Java Basic APIs
Language API
java.lang
패키지 : 자바에 가장 기본적인 클래스들을 포함
- 자바 프로그램에서 가장 많이 사용하는 패키지
import
하지 않아도 자동으로 포함됨
Object 클래스
- 모든 클래스의 최상위 클래스
- 명시적으로
extends java.lang.Object
하지 않아도 자동으로 상속 - 다음과 같은 메소드를 가지고 있어 하위 객체들도 모두 사용 가능
hashCode();
✅getClass().getName();
toString();
==getclass().getName() + "@" + Integer.toHexString(hashCode())
equals();
default : public boolean equals(Object obj) { return (this == obj); }
finalize();
notify();, notifyAll();
wait();
- 기본 메서드 Overriding
// 자바 최상위 클래스는 Object
public class Point {
private int x , y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public String toString() {
// 객체 문자열 포맷을 반환
return String.format("Point(%d, %d)", x, y);
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Point) {
Point other = (Point) obj;
return x == other.x && y == other.y;
}
return super.equals(obj);
}
}
객체의 복제
얕은 복제 vs. 깊은 복제(객체 복제)
- 얕은 복제 : 단순히 내부 필드의 값을 복제
clone()
이라는 메소드를 사용하기 위해Cloneable
이라는 Interface 생성 필요
❗ 참조형 얕은 복제 시 같은 메모리를 참조하여 값 변경이 발생하면 함께 변경 되는 문제 발생- 깊은 복제 : 참조하고 있는 객체도 복제하여 새로 할당하는 것 ✅
Cloneable
구현 후clone
메서드를 override하여 내부 참조 객체도 복제
String 클래스
- 문자 (Character)
- 기본 자료형- 문자 선언 :
char letter;
문자 할당 :letter = 'A';
- 문자 선언 :
- 문자열 (String) 클래스
- 연속된 문자(char)들을 저장하고 다루기 위한 클래스- 문자열 상수 :
""
로 둘러싸인 문자열 ➡ 한번 만들어진 String 객체는 변경 불가 ❕immutable❕ - 문자열 선언 :
String greeting;
문자열 할당 :greeting = "Hello Java!";
- 특수 문자의 표현 (Escape characters) :
\;, \", \\, \n, \r, \t
등
- 문자열 상수 :
- String 연산
+
연산자 : 문자열의 연결 (문자열과 다른 타입의 연결은 문자열로 변환되어 연결)
+
연산자로 합쳐진 문자열은 새로운 메모리 공간에 할당되고 그 메모리를 변수가 다시 참조 ✅ ➡ 변경되는 것이 아니라 새 문자열 생성 후 참조 (변경 불가 원칙 - immutable).charAt(position)
: 해당 위치의 문자 반환.subString(start, end)
: start 부터 end까지의 문자들을 새로운 문자열로 반환.concat(string)
: 문자열 뒤에 붙여 새로 생성
- String Methods
// 유용한 메서드들
String str = "Java Programming JavaScript Programming";
System.out.println("str : " + str); // str : Java Programming JavaScript Programming
System.out.println("LENGTH : " + str.length()); // LENGTH : 39
// 변환 메서드
System.out.println("UPPER : " + str.toUpperCase()); // UPPER : JAVA PROGRAMMING JAVASCRIPT PROGRAMMING
System.out.println("LOWER : " + str.toLowerCase()); // LOWER : java programming javascript programming
// 검색 메서드
System.out.println("인덱스 5의 글자 : " + str.charAt(5)); // 인덱스 5의 글자 : P
int index = str.indexOf("Java"); // "Java"의 인덱스
System.out.println("1번째 Java 인덱스 : " + index); // 1번째 Java 인덱스 : 0
index = str.indexOf("Java", 5); // 5번 인덱스 이후의 "Java"
System.out.println("2번째 Java 인덱스 : " + index); // 2번째 Java 인덱스 : 17
index = str.indexOf("Java", 21); // 21번 인덱스 이후의 "Java"
System.out.println("3번째 Java 인덱스 : " + index); // 3번째 Java 인덱스 : -1 // -1 : 찾을 수 없음
System.out.println("마지막 Java 인덱스 : " + str.lastIndexOf("Java")); // 마지막 Java 인덱스 : 17
// 문자열 추출
System.out.println("substring(5) : " + str.substring(5)); // substring(5) : Programming JavaScript Programming // 5부터 전체
System.out.println("substring(5, 16) : " + str.substring(5, 16)); // substring(5, 16) : Programming // 5 ~ 16 앞까지
// 문자열 변경
System.out.println("replace : " + str.replace("Programming", "Coding"));// replace : Java Coding JavaScript Coding
// 문자열은 변경되지 않음 (새로운 문자열이 생성되는 것)
System.out.println("str : " + str); // str : Java Programming JavaScript Programming
// 화이트 스페이스 (공백문자, 개행문자, 탭문자 등) 제거 .trim()
String s2 = " Hello ";
String s3 = " Java ";
System.out.println(s2.trim() + " " + s3.trim()); // Hello Java
// 문자열 분리 .split(구분자) -> 구분자로 잘라서 배열로 반환
String[] words = str.split(" ");
System.out.println(Arrays.toString(words)); // [Java, Programming, JavaScript, Programming]
for (String word : words) {
System.out.println("WORD : " + word);
}
// 문자열 비교 : Unicode 비교
// 0 : 순서가 같다 음수 : 전자가 후자보다 순서가 빠르다 양수 : 순서가 늦다
System.out.println("ABC".compareTo("ABD")); // -1
StringBuffer 클래스
가변 크기의 문자 버퍼를 가짐
String
이 immutable인 것에 비해, StringBuffer 객체는 수정 가능
버퍼의 크기는 문자열의 길이에 따라 가변적으로 변한다
// 버퍼의 생성
StringBuffer sb = new StringBuffer("Tbis");
System.out.println(sb); // This
// 문자열 추가 : append
sb.append(" is pencil");
System.out.println(sb); // This is pencil
// 문자열 삽입 : insert
sb.insert(7, " my"); // 7번 인덱스에 " my"를 추가
System.out.println(sb); // This my is pencil
// 문자열 치환 : replace
sb.replace(7, 10, " your"); // 7번부터 10번 앞까지를 " your"로 변경
System.out.println(sb); // This your is pencil
// 버퍼사이즈 조정 : setLength
sb.setLength(6);
System.out.println(sb); // This i
// 위와 동일하지만 체이닝한 방법
StringBuffer sb2 = new StringBuffer("This").append(" is pencil").insert(7, " my").replace(7, 10, " your");
String s = sb2.toString(); // 문자열 생성
System.out.println(s);
Wrapper 클래스
기본 데이터형을 객체로 다루기 위한 포장 클래스
- 사용이유
- 자바에서는 객체를 대상으로 처리하는 경우가 많음
- 특정 클래스는 객체만 다루기 때문에 기본 데이터 형을 사용할 수 없음 (비교 연산과 같은)
- 문자열을 기본 타입값으로 변환할 때 유용
- 다양한 유틸리티 메서드 활용 가능
- 활용
.valueOf()
메서드를 이용하여 생성 - 박싱과 언박싱 (boxing & unboxing)
+ 박싱 (boxing) : 기본 데이터를 Wrapper 클래스에 담는 것
+ 언박싱 (unboxing) : Wrapper 클래스를 기본 데이터에 담는 것
+ 자동 박싱과 언박싱
❗==
연산자로 비교시 그래도 객체 이므로 권장하지 않음 (같은 값(참조값)이 아닐 가능성이 높음)
Author And Source
이 문제에 관하여([Java] Java Basic APIs), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@98kimjh/Java-Java-Basic-APIs저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)