1. java.lang 패키지
☾ java.lang
: java 프로그래밍에 가장 기본이 되는 클래스 포함
: import문 없이도 사용 가능
2. Object 클래스
☾ Object
- equals(Object obj)
: 객체의 주소값이 같은지 비교하여 그 결과를 boolean값으로 알려줌
: 일반적으로 주소값 대신 iv값 비교하도록 오버라이딩함
class Person {
long id;
public boolean equals(Object obj) { //Object클래스의 equals 오버라이딩
if (!(obj instanceof Person)) {
return false;
}
Person p = (Person)obj;
return this.id == p.id;
}
Person(long id) {
this.id = id;
}
}
public class EqualsEx2 {
public static void main(String[] args) {
Person p1 = new Person(123456123456L);
Person p2 = new Person(123456123456L);
if (p1.equals(p2)) {
System.out.println("p1과 p2는 같은 사람입니다.");
}
else {
System.out.println("p1과 p2는 다른 사람입니다.");
}
}
}
p1과 p2는 같은 사람입니다.
- hashCode()
: 찾고자하는 값이 저장된 객체의 주소를 int로 변환해서 반환
: equals()를 오버라이딩하면, hashCode()도 오버라이딩 필요
: equals()의 결과가 true인 두 객체의 해시코드는 같아야 함
: System.identityHashCode(Object obj)는 Object클래스의 hashCode()와 동일
public class HashCodeEx1 {
public static void main(String[] args) {
String str1 = new String("abc");
String str2 = new String("abc");
System.out.println(str1.equals(str2));
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
System.out.println(System.identityHashCode(str1));
System.out.println(System.identityHashCode(str2));
}
}
true
96354
96354
604107971
123961122
- toString()
: 객체를 문자열로 변환
: 일반적으로 오버라이딩하여 사용
import java.util.Objects;
class Card {
String kind;
int number;
Card(String kind, int number) {
this.kind = kind;
this.number = number;
}
Card() {
this("SPADE", 1);
}
public boolean equals(Object obj) {
if (!(obj instanceof Card)) {
return false;
}
Card c = (Card)obj;
return this.kind.equals(c.kind) && this.number == c.number;
}
public int hashCode() { // equals()를 오버라이딩하면 hashCode()도 오버라이딩 해야 함
return Objects.hash(kind, number);
}
public String toString() { // Object클래스의 toString()을 오버라이딩
return "kind:"+kind+", number:"+number;
}
}
public class CardToString2 {
public static void main(String[] args) {
Card c1 = new Card();
Card c2 = new Card();
System.out.println(c1.equals(c2));
System.out.println(c1.hashCode());
System.out.println(c2.hashCode());
System.out.println(c1.toString());
System.out.println(c2.toString());
}
}
true
-1842861219
-1842861219
kind:SPADE, number:1
kind:SPADE, number:1
- getClass()
: 자신이 속한 클래스의 Class객체 반환
: Class객체는 클래스의 모든 정보를 담고 있으며, 클래스당 1개씩만 존재
- Class객체를 얻는 방법
① 생성된 객체로부터 얻는 방법
Class cObj = new Card().getClass();
② 클래스 리터럴(*.class)로부터 얻는 방법
Class cObj = Card.class;
③ 클래스 이름으로부터 얻는 방법
Class cObj = Class.forName("Card");
3. String 클래스
☾ String
: 문자열을 다루기 위한 클래스
: 내용을 변경할 수 없는 불변(immutable) 클래스
: 문자열의 결합이나 변경이 잦다면, 내용을 변경가능한 StringBuffer를 사용
- 문자열 비교
// 문자열 리터럴 지정
String str1 = "abc";
String str2 = "abc";
// String클래스의 생성자 사용
String str3 = new String("abc");
String str4 = new String("abc");
- 빈 문자열(empty string)
: 길이가 0인 char형 배열을 저장하는 문자열
: String str = ""; 가능해도 char c = ''; 불가능
: String은 빈 문자열로 초기화 / char형은 공백으로 초기화
- 기본형 값 -> 문자열
int i = 100;
String str1 = i + ""; // 100을 "100"으로 변환하는 방법1
String str2 = String.valueOf(i); // 100을 "100"으로 변환하는 방법2
- 문자열 -> 기본형 값
int i = Integer.parseInt("100"); // "100"을 100으로 변환하는 방법1
int i2 = Integer.valueOf("100"); // "100"을 100으로 변환하는 방법2
char c = "A".charAt(0); // 문자열 "A"를 문자 'A'로 변환하는 방법
4. StringBuffer 클래스
☾ StringBuffer
: String처럼 문자형 배열(char[])을 내부적으로 가짐
: 내용 변경 가능(mutable)
: 인스턴스 생성 시 버퍼(배열)의 크기를 충분히 지정해야 함
: equals() 오버라이딩하지 않음
public class StringBufferEx1 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("abc");
StringBuffer sb2 = new StringBuffer("abc");
System.out.println("sb == sb2 ? " + (sb == sb2));
System.out.println("sb.equals(sb2) ? " + sb.equals(sb2));
// StringBuffer -> String
String s = sb.toString();
String s2 = new String(sb2);
System.out.println("s.equals(s2) ? " + s.equals(s2));
}
}
sb == sb2 ? false
sb.equals(sb2) ? false
s.equals(s2) ? true
5. Math 클래스
☾ Math
: 수학계산에 유용한 메서드로 구성
: 모두 static메서드
6. wrapper 클래스
☾ Wrapper
: 기본형을 클래스로 정의
: 내부적으로 기본형 변수 가짐
: equals() 오버라이딩
public class WrapperEx1 {
public static void main(String[] args) {
Integer i = new Integer(100);
Integer i2 = new Integer(100);
System.out.println("i == i2 ? " + (i == i2));
System.out.println("i.equals(i2) ? " + i.equals(i2));
System.out.println("i.compareTo(i2) ? " + i.compareTo(i2));
System.out.println("i.toString() ? " + i.toString());
System.out.println("MAX_VALUE = " + Integer.MAX_VALUE);
System.out.println("MIN_VALUE = " + Integer.MIN_VALUE);
System.out.println("SIZE = " + Integer.SIZE + "bits");
System.out.println("BYTES = " + Integer.BYTES + "bytes");
System.out.println("TYPE = " + Integer.TYPE);
}
}
i == i2 ? false
i.equals(i2) ? true
i.compareTo(i2) ? 0
i.toString() ? 100
MAX_VALUE = 2147483647
MIN_VALUE = -2147483648
SIZE = 32bits
BYTES = 4bytes
TYPE = int
- Number 클래스
: 숫자를 멤버변수로 갖는 wrapper 클래스의 조상(추상클래스)
'Back-end > JAVA' 카테고리의 다른 글
[JAVA] 컬렉션 프레임워크(Collections Framework) (1) | 2023.10.21 |
---|---|
[JAVA] 날짜와 시간 & 형식화 (1) | 2023.10.14 |
[JAVA] 예외처리 - try-catch문, 예외 선언, 예외 되던지기 (0) | 2023.09.23 |
[JAVA] 객체지향 프로그래밍(2) - 상속, 오버라이딩, Package와 import, 제어자, 다형성, 추상클래스, 인터페이스 (1) | 2023.09.16 |
[JAVA] 객체지향 프로그래밍(1) - 클래스와 객체, 변수와 메서드, 오버로딩, 생성자, 초기화 (0) | 2023.09.09 |