JAVA 속성 벼락치기 (3): Object, Class, String

JAVA 속성 벼락치기 (3): Object, Class, String

01. Object Class의 개념

Object 클래스란 자바에 존재하는 모든 클래스들의 최상위 패키지로, 명시적으로 import하지 않아도 자동으로 import된다. String, Integer, System 등 자주 사용하는 기본 클래스들이 포함되어있는 패키지이며 우리 String이나 System을 별도로 import하지 않아도 에러가 뜨지 않는 것은 컴파일러에서 우리가 만든 클래스가 Object 클래스를 상속한다는 문구를 삽입해주기 때문이다.

String 클래스에 존재하는 toString메서드 등을 오버라이딩하여 사용하는 경우가 잦다. 우리가 Object를 print하려 시도할 경우, 자바 컴파일러는 자동적으로 toString 메서드를 실행해서 객체의 정보를 문자화하여 리턴한다. 그런데 기본 이 toString메서드는 기본적으로 객체의 주소값을 문자화하여 리턴해주도록 되어있는데 인스턴스 등을 공부하는 경우가 아니라면 사실 이 주소값은 별다른 의미가 없다. 따라서 toString 메서드가 각 객체의 필드값을 리턴하도록 오버라이딩하여 사용하는 경우가 많다.

toString 오버라이딩 안한상태 이런식으로 오버라이딩 해놓고 출력하면 이렇게 나온다.

02. Object 클래스의 메소드 활용하기

(1) equals

참조 변수에서의 equals 메소드는 기본적으로 두 인스턴스의 주소값을 비교하여 T/F를 판단한다. 하지만 기본 타입 변수에서의 equals가 그러하듯 인스턴스 주소가 달라도 논리적으로 동일할 경우 동일한 객체로 취급해야 하는 경우가 많다.

특정 클래스에서 equals를 이런 식으로 재정의하여 studentId가 같을 경우 인스턴스 주소가 다르더라도 동일한 객체라는 결과를 리턴하도록 만들어줄 수 있다.

(2) hashCode

equals 메소드를 오버라이딩하는 경우에는 보통 hashCode 메소드도 함께 오버라이딩한다. (hashCode는 기본타입변수에서는 주소값이 아닌 value를 직접 리턴하도록 오버라이딩이 되어있다고 한다.) hashCode를 오버라이딩했지만 객체의 주소값이 필요할 경우 오버라이딩이 불가능한 System.identityHashCode 메소드를 이용하여 얻어낼 수 있다.

(3) clone

clone 메서드는 객체의 정보를 복사하는데 쓰이는 메서드이다. 그러나 아무 객체나 복제할 수 있는 것은 아니며, 클래스 자체에서 Clonable 인터페이스를 상속받은 객체만 clone이 가능하다.

코드는 인강 수업자료에서

실행시켜보면 객체 정보를 전부 복사해놨으니 equals(오버라이딩됨)로는 true라고 나오지만 새로운 객체를 생성한 것이기 때문에 주소값은 다르다. 이 과정에서 메모리 낭비가 발생할 가능성이 있다. 따라서 String 변수를 변경해야 할 경우 처음부터 String이 아닌 Stringbuffer나 Stringbuilder 클래스로 선언하는 것이 효과적이다.

Stringbuffer와 Stringbuilder는 내부적으로 가변적인 char[]변수를 지니며, 문자열이 변경될 경우 새로운 인스턴스를 생성하지 않고 기존의 char[]변수를 변경한다.

03. String, Stringbuffer, StringBuilder (가변 String)

한 번 생성된 String은 immutable, 즉 변경될 수 없다. 따라서 concat메서드로 새로운 String을 연결하면 기존의 String 변수에 대상 String이 연결되는것이 아니라 새로운 String 객체가 생긴다.

단일 쓰레드 프로그램에서는 Stringbuilder를 사용하는 것이 좋지만 멀티 쓰레드 프로그래밍에서는 동기화를 보장하는 Stringbuffer를 사용하는 것이 좋다.

(+) 덧붙여 Java 13부터는 Textblock이라는 기능을 제공하는데, 이는 JSON 객체 생성시 매우 유용하다.

참고자료:

https://www.javatpoint.com/

패스트캠퍼스 Java/Spring 마스터 초격차 패키지 [자바와 객체지향] 파트

from http://hardblackpencil.tistory.com/61 by ccl(A) rewrite - 2021-09-29 19:26:51