JAVA

[JAVA] 기초문법 - 기본클래스

탱이나라 2021. 10. 19. 23:14

기본 클래스

자바에서 제공해주는 클래스중에 자주 사용하는 클래스들의 설명이다.

모든 클래스는 오브젝트타입으로 형변환이 가능하다.

오브젝트 메서드중에서 final 메서드들은 하위 클래스에서 정의 할 수 없다.(일부 메서드만 재정의 가능)

String 클래스의 toString메서드는 문자열을 출력하도록 재정의 되어 있음.

책의 제목과 저자의 이름을 출력하려면 toString 메서드를 정의해서 할 수 있음.

두 인스턴스의 주소 값을 비교하기 위한 메서드이다.

인스턴스가 달라도 논리적으로 같은 객체를 구별하기위해 재정의해서 사용하기도한다.

두 인스턴스의 주소를 비교한다. 결과값은 FALSE

두 문자열이 같은지를 체크한다.(논리적 동일성) 결과같은 TRUE

일반 클래스 인스턴스를 비교하면 위에 두경우 모두 FALSE가 출력된다. 논리적으로 같은 객체를 구별하기 위해서는 재정의해서 사용하여야한다.

재정의를 하면 학번에 따라 같은지 다른지 출력할 수 있다.

hashCode()는 객체 인스턴스가 저장된 힙메모리의 주소를 반환한다. jvm이 hash방식으로 관리한다.

일반 클래스를 정의하여 만든 두 인스턴스의 주소값이 다른 것을 알 수 있다.

문자열 클래스의 주소값은 같은 것을 알 수 있다.(두 메모리의 위치는 다른데 해시코드값은 같다.) why? 해시코드 메서드가 재정의 되어 있기 때문.

실제 메모리의 주소값을 알고 싶다면 해당메서드를 사용해야한다.

논리적 동일함을 위해 equals()메서드를 재정의했다면, 해시코드메서드도 재정의하여 동일한 값이 반환되도록 해야한다.

해시코드 재정의 해당 재정의로 논리적으로 학번에 따라 동일한 해시코드함수의 리턴값이 정해진다. (equals에 따른 재정의)

equals에 따른 해시코드 재정의를 하지 않으면 타 클래스를 사용할때 정상적으로 동작하지 않을 수 있다.

클래스1

클래스2

테스트 클래스

주소값이 다른 인스턴스가 잘 복제된 것을 알 수 있다.

toString메서드를 재정의하면 toString메서드는 인스턴스 이름을 호출할때 실행된다.

clone메서드를 사용하기 위해서는 반드시 Cloneable 인터페이스를 구현해야한다.(실제 구현을 할 필요는 없다. 선언만 하면됨. ㅡ> 이런 인터페이스를 마크인터페이스라 부른다.)