기본 클래스, Object 클래스
: 최상위 슈퍼 클래스이며 모든 메소드가 Object 메소드를 상속하고, Object의 일반 메소드를 오버라이드하여 사용할 수 있다.
(메소드 종류)
- protected Object clone() throws CloneNotSupportedException : 객체의 복사를 생성하여 리턴한다.
- public boolean equals(Object obj) : 주어진 다른 Object obj가 동일 여부를 리턴해준다.
- public final Class getClass() : 객체의 런타임 클래스를 돌려준다.
- public int hashCode() : 객체의 해시 코드 값을 반환한다.
- public toString() : 객체를 문자열로 반환한다.
① Clone() 메소드
: 효율적으로 객체 데이터를 복사하고 리턴한다. 해당 인터페이스를 구현하지 않아도 Object에서 상속받을 수 있는데, 만약에 객체가 다른 외부 객체 참조를 포함한다면 clone() 메소드를 오버라이드해야한다.
② equals() 메소드
: 두 객체가 동일하면, true 반환한다.
Q. string의 경우에는 contentEquals() 메소드가 필요하다. 왜일까?
char[]이나 StringBuilder 등 스트링과 비슷한 역할을 하는 다른 클래스들을 사용할 때, 자료형이 다를 경우 false로 반환한다. 하지만 contentEquals를 통해 자료형이 달라도 문자열 내용이 동일하다면 같다고 취급할 수 있기 때문에 사용한다.
③ getClass() 메소드
: 자바 클래스의 reflection 기능으로, 객체에서 클래스를 가져오는 기능을 한다. Class 클래스는 이름, 패키지, 접근자 등 클래스에 관한 정보를 불러올 수 있다. 다음과 같이 사용한다.
voic printClassName(Object obj){
System.out.println("class : "+obj.getClass().getSimpleName());
System.out.println("class Type : "+obj.getClass().getDeclaredConstructor().newInstance();
}
④ hashCode() 메소드
: 객체를 고유한 숫자로 나타내는 것이 해시 값이고, 객체 메모리 주소의 16진수 값이다.
- 맵에서는 객체를 찾기 위해 해시의 버킷 넘버를 사용한다.
- hashSet의 경우에도 hashCode() 메소드를 사용한다.
- 컬렉션의 contains 메소드에서 포함 여부를 판단할 대, hashCode()로 비교한다.
⑤ toString() 메소드
: 모든 객체에 대해 String 자료형으로 리턴한다.
Object.toString() 의 경우엔, 해당 객체의 해쉬 코드가 출력된다.
Final 키워드와 메소드
1) 필드를 final로 선언 : 해당 필드 값 변경 X
2) 메소드를 final로 선언 : 해당 메소드는 오버라이드 O // 생성자에서 호출하는 함수는 final이어야한다.
3) 클래스를 final로 선언 : 해당 클래스 상속 X
Wrapper 클래스, Number 클래스
: 추상 클래스이며, 기본 타입이 허용되지 않을 경우에 사용되는 클래스이다.
- ArrayList에 넣을 때, 라이브러리로 사용하기 위해 Object를 상속한 객체이어야만 한다. >> 제너릭의 대표적 타입
- 계산, 비교 기능을 가진다.
- (예시) Integer 클래스 -> int형, Character 클래스 -> char형, Float 클래스 -> float형
String 클래스
: 객체가 메모리에 한번 생기면, 그 안에 있는 값이 변하지 않는다. >> "스트링 불변성"
- 장점 : 참조만 가져갈 수 있다.
- 단점 : 변경 연산은 계속 새로운 객체를 생성하여 garbage가 생긴다.
'Computer Science > JAVA' 카테고리의 다른 글
[JAVA] String, StringBuffer, StringBuilder, StringJoiner 차이 (0) | 2022.10.21 |
---|---|
[JAVA] 제너릭과 List (0) | 2020.11.20 |
[JAVA] 컬렉션이란? (0) | 2020.11.03 |
[JAVA] 제너릭이란? (0) | 2020.11.03 |
[JAVA] 추상화란? (0) | 2020.10.23 |
댓글