코딩/Java

object 클래스

object 클래스는 모든 클래스의 조상이다.

자바에서 상속이란 필수적이다. 상속하건 하지 않았건 기본적인 상속을 하게 된다.

 

이 코드는 

 

이 코드와 같다 

여기서 알 수 있는 점은 자바의 모든 클래스는 Object를 암시적으로 상속받고 있는 것이다. 즉 Object는 모든 클래스의 조상이다. 이런 이유는 모든 클래스가 공통으로 포함하고 있어야 하는 기능을 제공하기 위함이다.

 

http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html

 

위의 링크에서 Object클래스가 가지고 있는 메소드를 보여준다. 다시 말해서 자바의 객체는 위의 메소드들을 반드시 가지고 있다.

 

API

: to String

 

여기서 굳이c1.toString()를 하지 않고  c1만 써도 .tostring()이라는 암시(약속)가 있기 때문에 간결하게 작성할 수 있다.

 

 

toString을 오버라이딩 해서 자신의 입맛대로 바꿀 수 있다. 

여기서 super.toString() 는 부모것 즉 Object에 원래 있던 toString()메소드의 기능을 출력한 것이다.

 

toString()를 컨트롤 + 마우스를 아래로 하고 super implementaion을 누르면 출처가 들어가진다. 거기서 상세한 로직을 볼 수 있다.

 

: equals

 

equals는 객체와 객체가 같은 것인지 비교하는 API이다.

 

자식이 부모행세는 가능(있었던 것을 감췄기 때문) , 부모가 자식행세는 그냥은 불가능(없던 걸 만들어야 해서) 그럼 어찌해야 되나

Student s = (Student)obj 이렇게 강제형변환하면 된다. 

 

: finalize

 

finalize는 객체가 소멸될 때 호출되기 약속된 메소드이다. 이 메소드 취지만 이해하면 된다.

많은 자바의 전문가들이 이 메소드의 사용을 여러가지 이유로 인해 만류하고 있다.

 

이 메소드 보단 garbage collection에 대해 알아보자.

인스턴스를 만드는 것은 내부적으로 컴퓨터의 메모리를 사용하는 것이다. 여기선 (RAM)

램은 가장 빠른 저장 장치이기 때문에 컴퓨터 프로그램들은 이 램에 저장된 후에 동작하게 된다. 하지만 램은 가격이 비싸고 용량이 적기 때문에 램은 컴퓨터에서 가장 소중한 저장 장치라고 할 수 있다. 그러므로 램의 적게 사용하는 프로그램이 좋은 프로그램이다. 그런 이유로 많은 프로그래밍 언어들이 램을 효율적으로 사용하기 위해서 더 이상 사용하지 않는 데이터를 램에서 제거할 수 있는 방법들을 제공한다.

 

하지만 자바에선 제한적으로 제공되고 있다. 왜냐 자동으로 해주기 때문이다.하지만 자바에서는 이러한 방법이 제한적으로 제공되고 있는데 그것은 자동으로 해주기 때문이다. 이 작업을 자동화한 것을 가비지 컬렉션이라고 한다. 이를테면 어떤 인스턴스를 만들었고, 그것을 변수에 담았다. 그런데 그 변수를 사용하는 곳이 더 이상 없다면 이 변수와 변수에 담겨있는 인스턴스는 더 이상 메모리에 머물고 있을 필요가 없는 것이다. 자바는 이를 감지하고 자동으로 쓰지 않은 데이터를 삭제한다. 따라서 개발자가 사용하지 않는 데이터를 직접 삭제하는 작업을 하지 않아도 되는 것이다. 이것은 어려운 메모리 관리로부터 개발자들의 부담을 경감시킨 도약이라고 할 수 있다.

(d2.naver.com/helloworld/1329) , opentutorials.org/course/1223/6241

 

: clone

 

클론은 복제라는 뜻이다. 어떤 객체가 있을 때 그 객체와 같이 복사해주는 기능이 clone 메소드의 역할이다.

 

복제하고 싶은 클래스에 Cloneable 인터페이스를 구현해주면 된다.

clone() 메소드의 접근제어자를 보면 protected이다. 그래서 메소드 호출이 불가 ( s1.clone로는 )

같은 패키지는 상속이 가능하다. 하지만 Object는 다른 패키지 때문에 호출이 불가한 것이다.

 

하려면 public으로 clone()을 상속받으면 된다.

'코딩 > Java' 카테고리의 다른 글

상수와 enum2  (0) 2021.01.09
상수와 enum  (0) 2021.01.08
object 클래스  (0) 2021.01.06
자바 나만의 예외 만들기  (0) 2021.01.06
예외 만들기  (0) 2021.01.05
자바 scanner  (0) 2021.01.02