본문 바로가기
Computer Science/JAVA

[JAVA] 기본 클래스, Object

by 그적 2020. 11. 20.

기본 클래스, 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

댓글