재밌고 어려운 IT를 이해해보자~!

기본 API 클래스2 -java.lang 패키지 본문

교육전 개인공부

기본 API 클래스2 -java.lang 패키지

언제나즐거운IT 2023. 10. 20. 23:35

java.lang 패키지는 자바 프로그램의 기본적인 클래스를 답고 있는 패키지 이다.

Scanner를 사용하려면 import 했어야하지만 

System, String등과 같은 클래스는 따로 선언 없이 사용 가능했다.

그이유는 기본적으로 제공해주는 java.lang 패키지에 속해 있었기 때문이다!

 

Object - 자바 클래스의 최상위 클래스로 사용

System, String, StringBuffer/Builder, Math 등이 있다.

 

Object클래스가 가닌 대표 메서드

boolean equals(Object obj) - 다른 객체와 자신이 가진 실제 값을 비교 

- 객체가 가진 정보로 객체의 동등성을 비교한 결과를 나타내는 메소드
- Object 클래스의 기본 메소드는 객체의 메모리 주소값을 비교한다
- == 연산도 메모리 주소값을 비교한다

- ==연산은 가지고있는 값을 비교하는게 아닌 위치를 비교.

- equals를 사용해야 직접적인 값을 비교한다.

 

int hashCode() 객체의 hashCode 값을 반환

- 객체가 가지는 고유의 값을 반환하는 메소드
- Object 클래스의 기본 메소드는 객체의 메모리 주소값을 해시코드로 만들어 반환한다

- 하지만...hashCode 는 메모리 주소값과 다른값이며 직접적인 연관은 없어보인다.


-HashMap과 같은 자료구조에서 동등성 비교를 위해 사용된다.

 

String toString() 객체 자신의 정보를 반환.

 

equals -> 우리가 만드는 객체도 값에 따라서 비교를 하면되고 ex) 학번,이름 등등 

equals를 override 해서 사용하면된다.

package exam16;

public class Data {

	private int value;
	
	public Data(int value) {
		this.value = value;
	}
	
	
	
	@Override
	public boolean equals(Object d) {
		boolean isTrue = !false;
		if(this ==d) {
			return !isTrue;
		}
		
		if(d instanceof Data) {
			if(this.value == ((Data)d).value) {
				isTrue = true;
			}
		}else {
			isTrue = false;
		}
		
		return isTrue;
	}
	
	
	public String toString() {
		String str = "값 :" + this.value;
		return str;
	}
	
}

 

package exam16;

public class CompareMain {

	public static void main(String[] args) {
		
		Data val01 = new Data(10);
		Data val02 = new Data(10);
		
		System.out.println("val01 = = value02 : " + (val01==val02));
		System.out.println("val01 = = value02 : " + (val01.equals(val02)));
		
	}

}

 

어떤 객체를 만들었을떄 그 객체가 가지고있는 대표값이나 변수를 비교할때 객체를 직접 비교하는게아니라 equals라는 것을 통해 비교한다.

val01,val02객체를 override를 통해 equals로 비교할 수 있다.

 

new 키워드를 사용해 인스턴스를 만들 경우, 주민등로처럼 객체를 식별하난 하나의 정수값을 hashCode라고 부루ㅡ며, 객체마다 고유한 값을 가지게 된다. 주소와는 다른개념. 실제주소가 아닌 JVM 에서 기억하는 위치.

 

A,B가 다른객체임에도 같은 hashCode를 가질 때가 있다. -> 해쉬충돌이라 부른다.

 

print 는 toString()을 사용하는데 

new키워드로 인스턴스를 만들어 print로 출력하면 패키지,객체, 해쉬코드가 나오므로

toString() 을 override로 실제 값을 출력하도록 해서 사용할 수 있다.

 

*instacneof 연산자란

부모를 상속해서 만들어진 자식 객체가 여러 타입인 경우에 특정 클래스가 맞는지 확인하기 위해 쓰인다.

ex)

class Parent{}

class Child extends Parent{}

public class InstanceofTest {
    public static void main(String[] args){
        Parent parent = new Parent();
        Child child = new Child();

        System.out.println( parent instanceof Parent );  // true
        System.out.println( child instanceof Parent );   // true
        System.out.println( parent instanceof Child );   // false
        System.out.println( child instanceof Child );   // true
    }
}

parent object와 child object 가 어디 클래스에 속해있는지 확인 할 수 있다.

parent instanceof Child 가 False인 이유는 Parent클래스에 속해있기 떄문

반면에 child instanceof Parent는 True 인 이유는 child가 속한 Child 클래스는

Parent로부터 상속을 받기 때문에 True이다.

'교육전 개인공부' 카테고리의 다른 글

기본 API클래스4 -Wrapper  (1) 2023.10.23
기본 API클래스3 - String  (0) 2023.10.22
기본 API 클래스 - API문서작성  (0) 2023.10.19
예외처리  (2) 2023.10.18
익명클래스  (0) 2023.10.18
Comments