
instance of :
instanceof는 객체 타입을 확인하는 연산자이다.
형변환 가능 여부를 확인하며 true / false로 결과를 반환한다.
주로 상속 관계에서 부모객체인지 자식 객체인지 확인하는 데 사용된다.
instanceof의 기본 사용방법은 객체 instanceof 클래스 를 선언함으로써 사용한다.
코드를 작성할 때
Class Student{
int studentID;
String studentName;
컴파일러가 변환
class Student extends Object{
int studentID;
String studentName;
컴파일 과정에서 자동으로 extends Object가 붙는다.
| 메서드 | 설명 |
|---|---|
| String toString() | 객체를 문자열로 표현하여 반환, 재정의하여 객체에 대한 설명이나 특정 멤버 변수 값을 반환 |
| boolean equals(Object obj) | 두 인스턴스가 동일한지 여부 반환, 재정의하여 논리적으로 동일한 인스턴스임을 정의 |
| int hashCode() | 객체의 해시 코드 값을 반환 |
| Object clone() | 객체를 복제하여 동일한 멤버 변수 값을 가진 새로운 인스턴스를 생성 |
| Class getClass() | 객체의 Class 클래스를 반환 |
| void finalize | 인스턴스가 힙 메모리에서 제거될 때 가비지 컬렉터(GC)에 의해 호출되는 메서드, 네트워크 연결해제, 파일 스트림 해제 구현 |
| void wait() | 멀티스레드 프로그램에서 사용하는 메서드, 스레드를 기다리는 상태 (non runnable)로 만듦 |
| void notify() | wait() 메서드에 의해 기다리고 있는 스레드를 실행 가능한 상태(runnable)로 가져옴 |
Object 클래스의 모든 메서드를 재정의할 수 있는 것은 아님!!(주의)
객체 정보를 문자열(String)으로 바꿔줌
toString() 메서드는 인스턴스 정보를 문자열로 반환하는 메서드
toString() 메서드의 원형은 생성된 인스턴스의 클래스 이름과 주소값을 보여줌
Object 클래스의 toString() 메서드원형
getClass().getName() + '@' + Integer.toHexString(hashCode())
두 인스턴스의 주소 값을 비교하여 boolean 값 true/false을 반환해 주는 것
주소 값이 같다면 당연히 같은 인스턴스
그러나, 서로 다른 주소 값을 가질 때도 같은 인스턴스라고 정의할 수 있는 경우가 있음
물리적 동일성(인스턴스의 메모리 주소가 같음)뿐 아니라 논리적 동일성(논리적으로 두 인스턴스가 같음)을 구현할 때도 equals() 메서드를 재정의하여 사용
생성된 두 객체(인스턴스)가 '같다'는 것은 무엇을 의미할까?
두 객체 (인스턴스)가 물리적으로 같다는 것은, 두 객체 (인스턴스)의 주소 값이 같은 경우 즉, 두 변수가 같은 메모리 주소를 가리키고 있다는 뜻
해시란 데이터를 다루는 기법 중에 하나로 검색과 저장이 아주 빠르게 진행되는것hashcode = hash(key);
Student class의 멤버변수 및 생성자 생성public class Student {
private String name;
private int age;
public Student() { //디폴트 생성
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student [이름은 " + name + ",나이는 " + age + "]";
}
StudentMain
package Object;
public class StudentMain {
public static void main(String[] args) {
Student st = new Student("LKY",31);
System.out.println(st.getClass()); //해당 객체가 어느 클래스에 속하는지
System.out.println(st.toString());
}
}
Object
↓
Person
↓
Student (instance of 를 쓰면 Student가 Object, Person을 다 들고 있음)
프로그램의 오류를 야기할 수 있는 문제가 발생 getClass를 쓰는 이유
if(!(obj.getClass() == Student.class)){ return false; }
이게 명확한 구조
Class 클래스는 컴파일된 class파일에 저장된 클래스나 인터페이스 정보를 가져오는데 사용된다.어떤 경우에는 여러 클래스 중, 상황에 따라 모르는 클래스의 정보를 사용할 경우 클래스 정보를 직접 찾아야하는 경우가 발생한다.
이때Class 클래스를 활용한다.
String str = new String();
class clazz = str.getClass();
Class clazz = String.class;
Class clazz = Class.forName(" ");