티스토리 뷰

Java/Class

1. Object Class

알 수 없는 사용자 2018. 10. 16. 02:05


이번 포스팅부터는

자바에서 기본적으로

제공하는 클래스에 대해서

다루어 보도록 하겠습니다.

자바 프로그래밍을 공부한다 하면

기본 문법만큼이나 중요하다고

할 수 있는 것들입니다.


===============================================================


Object 클래스




1. Object Class : What?

 

 프로그래밍에서 작명할 때는 작명하는 기능이나 구조가 가지는 목적에 따라 이름을 지어야하는 것을 암묵적인 규칙으로 하고 있습니다. 따라서 앞으로 소개할 클래스들의 목적은 이름을 해석하면 알수 있는 것이죠.

 

  클래스의 이름 Object의 뜻은 객체입니다. 즉, Object 클래스는 객체를 다루는 것의 제일 근본적인 클래스라고 할 수 있습니다. 모든 클래스의 최상위에는 Object 클래스가 있다는 것입니다. 이러한 Object 클래스는 java.lang 패키지에 존재하는 클래스입니다. java.lang 패키지는 자바에서 가장 기본이 되는 클래스들을 포함하고 패키지로 import 문 없이도 사용할 수 있습니다. 



 



2. Object Class : When, Why?


Object 클래스는 모든 클래스 상속 계층도의 최상위에 있는 클래스라고 소개했습니다. 즉, 모든 클래스는 Object 클래스로부터 상속받아야 한다는 것이죠.

그렇기 때문에 우리는 여태까지 Object 클래스 아래에서 클래스를 생성하고 상속구조의 클래스를 설계했던 것입니다.  

   

"여태까지 Object 클래스라는 것을 본 적도 없고 상속이나 import 한 적도 없는데??"


맞습니다. 새로운 클래스를 정의할 때도, 상속 관계를 가진 클래스 구조를 설계할 때도 한 번도 Object 클래스를 이용한 적이 없습니다. 이는 자바 언어를 설계할 때부터 애초에 모든 클래스가 Object 클래스를 상속하도록 구현해두었기 때문입니다. 클래스를 설계할 때 Object 클래스는 자동으로 상속되도록 자바 언어가 짜여있습니다. 

     

"상속 관계에서 다중상속을 허용하지 않는데 Object가 어떻게 상속하지?"


저는 상속의 장점을 여기서 제일 많이 느꼈습니다.

자바는 다중상속을 허용하지 않아 하나의 클래스만 상속할 수 있습니다. 이를 다시 말하면 자식 클래스와 부모 클래스에서 부모 클래스가 상속을 받고 있지 않다면 부모 클래스는 Object 클래스를 자동으로 상속받는다는 것입니다. 상속의 특징에서 최하위의 자식 클래스는 상속 구조에서의 어떤 부모 클래스에도 접근할 수 있고 영향을 받는다고 했습니다. 그렇기 때문에 아무리 상속관계를 이어놨다해도 결국 어떤 클래스는 Object를 부모 클래스로 가질 수밖에 없는 것입니다. 



그리고 다른 패키지의 클래스들을 사용하기 위해선 import 과정이 필요하지만, Object 클래스가 import 과정이 필요 없는 이유는 java.lang 패키지에 존재하기 때문입니다. 이 패키지는 기본적으로 중요하게 필요한 클래스들을 모아둔 것으로 import 없이 무조건 사용할 수 있도록 설계되어있습니다.






3. Object Class : Method?


 Object Class에 존재하는 메소드들을 살펴보겠습니다. 여기서 소개하는 것은 참고만 하고 Object 클래스에 직접 가서 보고 코드를 해석해보는 것을 추천해 드립니다.

(물론 알지 못하는 키워드 문법도 있으나 우리가 대부분 사용하는 기능은 해석할 수 있을 것입니다.)


[출처] 자바 오라클 API 문서


대부분의 메소드는 Object가 모든 클래스를 상속한다는 장점을 이용해 오버라이드하여 유용하게 쓰이는 기능이라는 생각으로 해석하는 것이 좋습니다.




- toString() :

 객체 자신의 정보를 문자열로 반환하는 메소드로 앞으로 살펴볼 클래스들 대부분이 오버라이드하여 재정의하고 유용하게 쓰이는 기능입니다. 


import java.awt.Rectangle;

public class Example {
public static void main(String[] args) {
Rectangle r1 = new Rectangle(10, 20, 100, 100);
System.out.println(r1); // Rectangle 클래스 안에 toString이 오버라이드 되어 있다.
}
}


Rectangle 클래스 안에는 다음과 같이 오버라이드 되어있습니다.

public String toString() {
return getClass().getName() + "[x=" + x + ",y=" + y + ",width=" + width + ",height=" + height + "]";
}





- equals() :

  객체 자신과 파라미터로 전달되는 Object 객체가 같은 객체인지 알려주는 것입니다.

import java.awt.Rectangle;

public class Asdasd {
public static void main(String[] args) {
Rectangle r1 = new Rectangle(10, 20, 100, 100);
System.out.println(r1); // Rectangle 클래스 안에 toString이 오버라이드 되어 있다.

Rectangle r2 = new Rectangle(10, 20, 100, 100);
System.out.println(r1 == r2); // 재정의하지 않는다면 객체로만 비교하기 때문에 false

boolean b = r1.equals(r2);         // equals Rectangle 클래스 안에 재정의 되어있기 때문에 값을 비교하여 boolean 반환

System.out.println(b); // true

}
}

 두 번째로 출력하는 r1 == r2의 결과는 r1과 r2에 있는 객체의 값을 비교하기 때문에 false를 출력합니다. 객체 안에 들어있는 값은 같으나 값을 가지고 있는 객체 자체의 값은 다르기 때문이죠. 이 때문에 equals 메소드를 오버라이딩하여 실질적인 객체안의 데이터를 비교하는 기능으로 재정의해줍니다.



 Rectangle 클래스 안에는 다음과 같이 오버라이드 되어있습니다.

public boolean equals(Object obj) {
if (obj instanceof Rectangle) {
Rectangle r = (Rectangle)obj;
return ((x == r.x) &&
(y == r.y) &&
(width == r.width) &&
(height == r.height));
}
return super.equals(obj);
}





- hashCode() :

 객체 자신의 해시코드를 반환하는 기능입니다.

이 메소드는 해싱기법에 사용되는 해시함수를 구현한 것인데 Object 클래스에 정의된 메소드는 객체의 주소 값을 이용해서 해시코드를 만들어 반환하기 때문에 서로 다른 두 객체는 결코 같은 해시코드를 가질 수 없습니다.

 나중에 포스팅할 Set Collection에서 다시 다루겠습니다.



- finalize() :

 저번 가비지 컬렉터 포스팅에서 사용자가 가비지 컬렉터 호출과정에서 재정의할 수 있는 기능이 몇 가지 있다 하였는데 그중 하나입니다. 객체가 소멸할 때 가비지 컬렉터에 의해 자동으로 호출되는 메소드인데 거의 사용하지 않습니다.



그 외 메소드도 가끔 사용되기는 하나 대표적인 메소드에 대해서만 알아보았습니다. 다른 메소드들의 내용도 그렇게 높은 수준의 이해를 요구하는 메소드는 아니기 때문에 사용하는 용도를 알아두기만 해도 좋을 것 같습니다.


'Java > Class' 카테고리의 다른 글

5. Wrapper Class  (0) 2018.10.22
4. 정규표현식(Regular Expression) : java.util.regex 패키지  (0) 2018.10.19
3. StringBuffer & StringBuilder  (0) 2018.10.18
2. String Class  (0) 2018.10.17
0. APIs & Class  (0) 2018.10.16
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함