java.lang 패키지(1) - Object 클래스(1)

2021. 12. 22. 13:28·자바/java.lang 패키지

1. Object 클래스

- Object 클래스는 멤버변수는 없고 오직 11개의 메서드만 가지고 있다.

 

- 아래의 중요한 메서드 몇가지만 알아보자.

 

 

 

 

1-1. equals(Obejct obj)

- 매개변수로 객체의 참조변수를 받아서 비교하여 그 결과를 boolean으로 알려주는 역할을 한다.

 

- 그렇기 때문에 같은 클래스의 객체라도 서로 다를 수밖에 없다.

 

 

- 아래의 코드를 보고 이해해보자.

 

 

- 또한 아래의 코드처럼 오버라이딩을 통해 또 다른 비교를  할 수 있다.

 

 

 

 

1-2. hashCode()

- 이 메서드는 해싱 기법에 사용되는 '해시 함수'를 구현한 것이다.

 

- 해싱은 데이터 관리 기법 중의 하나인데, 대량의 데이터를 저장하고 검색하는 데 유용하다.

 

- 일반적으로 해시코드가 같은 두 객체가 존재할 수 있지만, Object 클래스에 정의된 해시코드는

다르다.

 

- 만약 비교하고 싶다면 앞에서 했던 equals 처럼 오버라이딩 해야할 것이다.

 

 

- 아래의 코드를 보자.

 

( 위에서 String 클래스는 해시 코드 메서드를 오버라이딩 되어 있기 때문에, 주소 값이 다른 두 객체는 같은 값이

나올 수 있다. )

( 그러나, Object 클래스의 해시코드 메서드처럼 주소 값으로 해시코드를 만들기 때문에 값이 다르게 나온다. )

 

 

 

 

1-3. toString()

- 인스턴스에 대한 정보를 문자열로 제공할 목적으로 정의한 것이다.

 

- 형식은 아래와 같다.

- 오버라이딩하지 않고 위 코드 그대로 toString()을 호출하면 클래스 이름에 16진수의 해시코드를 얻게 될 것이다.

 

 

- 아래의 코드를 보자.

 

 

 

 

1-4. clone()

- 이 메서드는 자신을 복제하여 새로운 인스턴스를 생성하는 일을 한다.

 

- 또한 이 메서드를 통해 기존의 인스턴스를 보존하면서 새로운 인스턴스를 가지고 작업을 실행하게 할 수 있다.

 

- 그렇게 함으로써, 작업이 실패하더라도 기존 인스턴스를 가지고 다시 복구할 수 있는 장점이 생긴다.

 

- Object 클래스에 정의된 clone()은 단순히 인스턴스 변수 값만을 복사하기 때문에, 참조 타입의 인스턴스 변수가 있는

클래스는 완전한 인스턴스 복제가 이루어지지 않는다.

( 자세한 내용은 다음장 java.lang 패키지(2) - 얇은 복사와 깊은 복사에서 설명함. )

 

- 예를 들어, 배열의 경우 복제된 인스턴스도 같은 배열의 주소 값을 갖기 때문에, 서로 영향을 주게 되므로 따로

오버라이딩을 해줘야 한다.

 

 

- 아래의 코드를 보자.

 

( clone()을 사용하기 위해서는 인터페이스를 구현해야 하고, super.clone()을 사용하는 곳에는

try/catch를 꼭 써야 한다. )

 

( clone()은 원래 protected로 되어 있지만 public으로 변경해서 써야 한다. 그 이유는 상속 관계가

없는 다른 클래스에서 호출할 수 있어야 하기 때문이다. )

 

 

- 또한 배열에서도 오버라이딩 된 clone()을 쓸 수 있는데, 아래의 코드를 보자.

 

( 배열도 객체이므로 Object 클래스를 상속받으며, 동시에 Cloneable인터페이스와 Serializable 인터페이스가

구현되어 있다. )

 

( 또한 배열 뿐만 아니라 java.util 패키지의 Vector, ArrayList, LinkedList, HashSet, TreeSet, HashMap,

TreeMap, Calendar, Date 와 같은 클래스들이 이와 같은방식으로 복제가 가능하다. )

 

 

 

 

2. 공변 반환타입

- 공변 반환 타입은 jdk 1.5부터 생겼으며, 오버라이딩 할 때 조상 메서드의 반환 타입을 자식 클래스의

반환 타입으로 변경을 허용하는 것을 말한다.

 

- 아래의 코드를 보자.

 

( 주석이 공변 반환타입을 설정하기 전이고, 바로 아래의 코드가 공변 반환타입을 설정한 코드이다. )

( 이렇게 함으로써, 번거러운 형변환이 줄어든다는 장점을 얻는다. )

 

 

 

 

다음장

java.lang 패키지(2) (tistory.com)

 

java.lang 패키지(2)

1. 얇은 복사와 깊은 복사 - clone()은 단순히 객체에 저장된 값을 그대로 복제할 뿐, 객체가 참조하고 있는 객체까지 복제하지 않는다. - 기본형 배열인 경우는 오버라이딩을 해서 문제가 되지 않

kind-coding.tistory.com

 

'자바 > java.lang 패키지' 카테고리의 다른 글

java.lang패키지(6) - Math 클래스  (0) 2021.12.27
java.lang패키지(5) - StringBuffer 클래스와 StringBuilder 클래스  (0) 2021.12.26
java.lang패키지(4) - String 클래스(2)  (0) 2021.12.26
java.lang패키지(3) - String 클래스(1)  (0) 2021.12.24
java.lang 패키지(2) - Object 클래스(2)  (0) 2021.12.24
'자바/java.lang 패키지' 카테고리의 다른 글
  • java.lang패키지(5) - StringBuffer 클래스와 StringBuilder 클래스
  • java.lang패키지(4) - String 클래스(2)
  • java.lang패키지(3) - String 클래스(1)
  • java.lang 패키지(2) - Object 클래스(2)
백_곰
백_곰
  • 백_곰
    친절한 코딩
    백_곰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘 (with JAVA)
        • 기본 알고리즘
        • 완전 탐색
        • 분할 정복 알고리즘
        • 동적 계획법
        • 탐욕법
        • 코딩 테스트 기출 문제
        • 코드트리 조별과제
      • 백준 (with JAVA)
        • 완전 탐색
        • 분할 정복
        • 그 외
      • 자바
        • 개발 환경 구축하기
        • 팁
        • 기본적인 개념
        • 컬렉션 프레임워크
        • 프로세스와 쓰레드
        • 지네릭스
        • 람다식
        • 스트림
        • 입출력 IO
        • 네트워킹
        • 열거형(enums)
        • java.lang 패키지
        • java.time 패키지
        • 유용한 클래스들
        • 형식화 클래스들
      • 안드로이드 with 자바
        • 응용 문제들
        • 자잘한 문제들
        • 오류 보고서
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      InputStream
      불안정 정렬
      스트림
      안정 정렬
      다형성
      람다식
      Collections Framework
      코딩트리조별과제
      중간연산
      안드로이드 스튜디오
      Arrays
      제자리 정렬
      문자 기반 스트림
      자바 개념
      java.time 패키지
      코드트리
      file
      역직렬화
      선택 정렬
      알고스팟
      serializable
      코딩테스트
      java.lang패키지
      map()
      소켓 프로그래밍
      outputstream
      ServerSocket
      snail
      유용한 클래스
      TCP 소켓 프로그래밍
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    백_곰
    java.lang 패키지(1) - Object 클래스(1)
    상단으로

    티스토리툴바