프로그래밍/자바(java) 융합개발자 2차

[취성패] 자바 배우기 - 선수학습(Object 클래스)

aSpring 2020. 12. 13. 20:49
728x90
728x90

[toString 메서드]

1. Object 클래스 개요

- 자바의 최상위 클래스는 java.lang.Object 클래스 : jave.lang패키지 안에 Object클래스가 있음

- 자바의 모든 클래스는 Object 클래스로부터 상속 받음

- 새로 정의되는 모든 클래스는 extends 키워드가 없어도 묵시적으로 Object 클래스로부터 상속 받음

- Object 클래스에는 toString() 메서드와 equals() 메서드가 정의되어 있음

 

- toString 메서드

public String toString()

객체의 문자열을 반환

 

- equals 메서드

public boolean equals(Object obj)

두 객체의 내용을 비교하여 참, 거짓을 반환

 

 

2. toString 메서드 활용

- toString 메서드는 객체의 정보를 문자열 형태로 반환

- 간단한 클래스의 객체를 생성하여 toString 메서드 호출

class House {

 double size;

 String houename;

 public House() {

   System.out.println("집 클래스 생성자");

 }

 public static void main(String args[]) {

   House house = new House();

   System.out.println(house.toString());  //toString 생략 가능

 }

}

- 예제의 경우 Object 클래스에 정의된 toString 메서드가 호출되며 클래스명과 해쉬코드의 조합이 출력됨

- 클래스의 특성에 따라 다른 문자열을 출력하려면 toString 메서드를 다음과 같이 오버라이딩하여 구현해야 함

public String toString() { 새로 만들고자 하는 기능정의 } -> 기존의 Object class의 toString 메서드가 호출되지 X

 

 

[equals 메서드]

1. equals 메서드 개요

- 자바의 기본 데이테형(int, float, double 등)에 대해서 비교할 경우 값이 같으면 true

int num1 = 1, num2 = 1;

if (num1 == num2) //true

   System.out.println("두 정수는 같다");

 

- String 클래스와 같은 객체의 내용에 대해서 비교할 경우 동일한 메모리에 할당되었는지를 판단하므로 "==" 연산자를 사용하면 false

String str1 = new String("자바");

String str2 = new String("자바");

if (str1 == str2)  //false -> 동일한 메모리에 할당X -> equals를 이용하면 true가 반환됨

   System.out.println("두 문자열은 같다.");

 

- 두 객체변수가 동일한 메모리에 생성되었을 경우 "==" 연산자 비교 시 true

String str1 = new String("자바");

String str2 = str1;

if (str1 == str2) //true

   System.out.println("두 문자열은 같다.");

 

 

2. equals 메서드 활용

- String 클래스의 문자열 내용을 비교하는 경우

String str1 = new String("자바");

String str2 = new String("자바");

if (str1.equals(str2)) //true

   System.out.println("두 문자열은 같다.");

 

- String 클래스가 아닌 객체의 내용을 비교할 경우

class Car {

  String carName = "티코";   -> String 타입의 carName이라는 멤버 변수 생성

}

 

Car car1 = new Car();

Car car2 = new Car();

if(car1.equals(car2)) //두 객체의 내용이 같더라도 false

  System.out.println("두 객체의 내용은 같다");

- 위와 같이 객체의 내용을 비교하기 위해서는 equals 메서드를 오버라이딩하여 구체적으로 비교하여야 함

 

+ 예제

public class Car {

 String carName;

 public Car(String str) {  -> 생성자

   carName = str;

 }

 public boolean equals(Object obj) {  -> 비교할 객체 obj

   Car tmp = (Car)obj;

   if (carName.equals(tmp.carName))

     return true;

   else

     return false;

 }

}

public class EqTest {

 public static void main(String args[]) {

   Car car1 = new Car("티코");

   Car car2 = new Car("티코");

   if (car1.equals(car2))

     System.out.println("두 객체의 내용은 같다");

   else

     Systme.out.println("두 객체의 내용은 다르다");

 }

}

-> 두 객체의 내용은 같다

 

 

[toString과 equals 메서드 사용 예]

public class Exam17_1 {

   public static void main(String args[]) {

      Exam17_1 exam= new Exam17_1();

      System.out.println(exam.toString());  // Exam17_1@58f9d3

      String str1 = new String("자바");

      String str2 = new String("자바");

      Systme.out.println(str1 == str2);     // 저장된 메모리 위치가 다르므로 false

      String str3 = str1;

      System.out.println(str1 == str3);     // 동일한 메모리를 사용하므로 true

    }

}

728x90
728x90