기본 api 클래스
java.lang 패키지
자바 프로그램의 기본적인 클래스를 담은 패키지
포함된 클래스와 인터페이스는 import없이 사용이 가능
주요 클래스 Object, System, Class, String, StringBuffer, StringBuilder, Math, Wrapper.
toString = 어떤 객체든 String로 변환시켜준다.
객체 비교(equals() apthem) // 힙의 값을 비교 // 만일 어려우면 7장 끝부분
기본적으로 == 연산자와 동일한 결과 리턴한다.
기준객체.equals(비교 객체);
논리적 동등을 위해 오버라이딩 필요하다.
논리적 동등은 같은 객체이건 다른 객체이건 상관없이 객체 저장 데이터동일
Object의 equal() 메소드
재정의하여 논리적 동등 비교할때 이용
예시. 객체 비교
public class ApiMember {
private String id;
public ApiMember(String id) {
this.id = id;
}
@Override
public boolean equals(Object A) {
if(A instanceof ApiMember) { // 매개값이 ApiMember 타입인지 확인
ApiMember AMB = (ApiMember) A; // ApiMember 타입으로 강제 타입 변환하고 id 필드 값이 동일한지 검사 후 동일하다면 true 를 리턴
if(id.equals(AMB.id)) {
return true;
}
}
return false; // 매개값이 다른경우 false를 리턴.
}
}
public class ApiMemberExample {
public static void main(String[] args) {
ApiMember A1 = new ApiMember("blue");
ApiMember A2 = new ApiMember("blue");
ApiMember A3 = new ApiMember("red");
if(A1.equals(A2)) { // 객체 비교
System.out.println("A1과 A2는 동일하다");
} else {
System.out.println("A1과 A2는 동일하지 않타.");
}
if(A1.equals(A3)) {
System.out.println("A1과 A3은 동일하다");
} else {
System.out.println("A1과 A3은 동일하지 않타.");
}
}
}
객체 해시코드(hashCode())
객체를 식별할 하나의 정수값이다. Object의 hashCode()메소드는
메모리 번지를 이용해 해시코드를 만들어 리턴.
#논리적 동등 비교 시 hashCode() 오버라이딩 필요
#< … > = 제너릭
예시. 해시코드
public class ApiKey {
public int number;
//생성자
public ApiKey(int number) {
this.number = number;
}
@Override
public boolean equals(Object o) {
if (o instanceof ApiKey) {
ApiKey comkey = (ApiKey) o;
if(this.number == comkey.number) {
return true;
}
}
return false;
}
@Override // id가 동일한 문자열인경우 같은 해시코드를 리턴.
public int hashCode() {
return number;
}
}
import java.util.HashMap;
public class ApiKeyExample {
public static void main(String[] args) {
//key 객체를 식별키로 사용 string 값을 저장하는 hashmap 객체 생성
HashMap<ApiKey, String> hashmap = new HashMap<ApiKey, String>();
//식별키 new key1로 저장시킬거임 따라서 ()안에 1이 들어간다.
hashmap.put(new ApiKey(1), "길동");
//이젠 저장된 식별키를 읽어올거다. 불러올땐 get를 사용
String q = hashmap.get(new ApiKey(1));
//출력해보면
System.out.println(q + "\n");
// ApiKey의 object를 또 출력해보면
Object o = new Object();
System.out.println(o);
System.out.println(o.hashCode());
}
}
객체의 문자 정보(toString())
객체를 문자열로 표현한 값
Object 클래스의 toString()메소드는 객체의 문자 정보를 리턴한다.
일반적으로 의미 있는 문자정보가 나오도록 재정의
date 클래스 현재 시스템의 날짜와 시간정보 리턴
String 클래스 저장하고 있는 문자열 리턴한다.
toString() 메소드 오버라이딩
예시. 객체의 문자정보
import java.util.Date; // 유틸데이터 내용을 불러온다.
public class ApiToStringExample {
public static void main(String[] args) {
Object ob = new Object(); //ob의 메소드를 재정의해서 문자열로 나타낸다.
Date de = new Date(); // de에 현재 시간, 날짜 정보를 나타낸다.
System.out.println(ob);
System.out.println(de);
}
}
예시. toString() 오버라이딩
public class SmartPhone {
private String com;
private String os;
public SmartPhone(String com, String os) {
this.com = com;
this.os = os;
}
@Override
public String toString() {
return com +"," + os;
}
}
public class SmartPhoneExample {
public static void main(String[] args) {
SmartPhone sp = new SmartPhone("Google", "ios");
String soj = sp.toString();
System.out.println(soj);
System.out.println(sp);
}
객체복제 (clone())
원본 객체의 필드 값과 동일한 값을 가지는 새로운 객체를 생성하는것.
종류로는 thin clone 얕은 복제, deep clone 깊은 복제
얕은 복제는 필드 값만 복제, 깊은 복제는 참조하고 있는 객체도 복제 한다.
Object의 clone()메소드는 자신과 동일한 필드값을 가진 객체를 리턴 시키는 것이구
해당 메소드를 사용하려면 원본 객체에는 반드시 java.lang.Cloneable 인터페이스를 구현하고 있어야
한다. 메소드 선언이 없음에도 Cloneable 인터페이스를 명시적으로 구현하는 이유는 클래스 설계자가
복제를 허용한다는 의도적인 표시를 하기 위해서이다. 복제를 허용하지 않는다면 Cloneable 인터페이스를 구현하지 않으면댄다
구현하지 않으면 clone()메소드를 호출할때 예외가 발생하여 복제가 실해된다. clone는 예외가 필요한 메소드이기때문에
try - catch구문이 필요하다.
예시. 얕은 복제
public class ApiMember_Clone implements Cloneable { // 복제할수있다는 표시
public String id;
public String name;
public String password;
public int age;
public boolean adult;
public ApiMember_Clone(String id, String name, String password, int age, boolean adult) {
this.id = id;
this.name = name;
this.password = password;
this.age = age;
this.adult = adult;
}
public ApiMember_Clone getMember() {
ApiMember_Clone cloned = null;
try {
cloned = (ApiMember_Clone) clone(); // CLONE()메소드의 리턴타입은 object이므로 ApiMember_Clone타입으로 캐스팅해야함
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return cloned;
}
}
public class ApiMember_Clone_Example {
public static void main(String[] args) {
// 원본 객체 선언
ApiMember_Clone AC = new ApiMember_Clone("blue" , "길동", "8888", 25, true);
//복제 객체를 얻은 후에 패스워드 변경 복제한 값을바꿔도 원본객체는 바뀌지않음
ApiMember_Clone cl = AC.getMember();
cl.password ="987654";
System.out.println("복제 객체필드");
System.out.println(cl.id);
System.out.println(cl.name);
System.out.println(cl.password);
System.out.println(cl.age);
System.out.println(cl.adult + "\n");
System.out.println("원본 객체필드");
System.out.println(AC.id);
System.out.println(AC.name);
System.out.println(AC.password);
System.out.println(AC.age);
System.out.println(AC.adult);
}
}
'Java > Java' 카테고리의 다른 글
Java 기본 API 클래스 #3 (0) | 2021.10.21 |
---|---|
Java 기본API클래스 #2 (0) | 2021.10.20 |
자바[Java] 예외처리(Exeption)란? 개념정리 및 종류 (0) | 2021.10.19 |
자바[Java] 내부 클래스(inner)와 내부 인터페이스란 (0) | 2021.10.18 |
자바[Java] 인터페이스(interface)란? 개념정리 (1) | 2021.10.14 |