자바에서 기본적으로 제공하는 라이브러리(library)로 프로그램 개발에 자주 사용되는 클래스 및 인터페이스 모음을 말한다.
쉽게 API를 찾아 이용할 수 있도록 문서화 한 것을 말한다.
이 패키지는 자바의 기본적인 클래스를 담고 있는 패키지다. 그래서 이 패키지 안의 클래스와 인터페이스는 import없이 사용할 수 있다. 지금까지 사용한 String과 System 클래스도 이 패키지에 포함되어있기 때문에 import하지 않고 사용할 수 있었다.
이 패키지는 자바 프로그램 개발에 조미료 같은 역할을 하는 클래스다. 대부분이 컬렉션 클래스들이 차지하기 때문에 컬렉션 클래스는 제외하였다. (컬렉션 클래스는 나중에)
자바의 최상위 부모 클래스로 작성자가 클래스를 선언할 때 extends 키워드로 다른 클래스를 상속하지 않으면 암시적으로 java.lang.Object 클래스를 상속하게 된다. 따라서 자바의 모든 클래스는 Object 클래스의 자식이거나 자손 클래스이다.
기본적으로 == 연산자와 동일한 결과를 리턴(주소 비교)한다.
논리적 동등 위해 오버라이딩 필요
논리적 동등 : 같은 객체이건 다른 객체이건 상관없이 객체를 저장하고 데이터가 동일하다.
Object의 equals() 메소드 : 재정의하여 논리적 동등 비교할 때 이용
객체 해시코드란 객체를 식별하는 하나의 정수값을 의미합니다.
Object의 hashCode() 메서드는 객체의 메모리 번지를 이용해서 해시코드를 만들어 리턴하기 때문에 객체 마다 다른 값들을 가지고 있습니다.
두 객체가 같은 객체인지 동일성을 비교합니다.
어떠한 객체와 다른 객체의 equals 결과가 true라면 그 둘의 hashCode 값는 반드시 같아야 하지만 반대로 hashCode값이 같다고 해서 반드시 equals 결과가 true일 필요는 없습니다.
출처: https://kdg-is.tistory.com/226 [KDG의 개발냄새:티스토리]
구체적인 클래스 타입을 알지 못해도 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API
런타임에 지금 실행되고 있는 클래스를 가져와서 실행해야하는 경우
동적으로 객체를 생성하고 메서드를 호출하는 방법
자바의 리플렉션은 클래스, 인터페이스, 메소드들을 찾을 수 있고, 객체를 생성하거나 변수를 변경하거나 메소드를 호출할 수 있다.