-
16. Object 클래스개발자 수업/Java 2021. 10. 13. 22:09
1. Object 클래스 -- 모든 클래스의 최상위 클래스
2. java.lang 패키지
1) 프로그래밍 시 import 하지 않아도 자동으로 import 됨
2) 많이 사용하는 기본 클래스들이 속한 패키지
3) String, System, Math, Integer ...
3. 모든 클래스는 Object 클래스를 상속 받음
1) 모든 클래스는 Object 클래스의 메서드 중 일부는 재정의해서 사용할 수 있음
2) 컴파일러가 extends Object를 추가함
class Book => class Book extends Object
4. toString() 메서드
1) 객체의 정보를 String으로 바꾸어서 사용할 때 쓰임(재정의)
2) String, Integer 클래스는 이미 재정의 되어 있음public class Book { private String title; private String author; public Book(String title, String author) { // super(); this.title = title; this.author = author; } @Override public String toString() { return title + ", " + author; } public static void main(String[] args) { Book book = new Book("도커에서 웅앵ㅇ웅", "앨튼 어쩌구"); System.out.println(book); System.out.println(book.toString()); // toString 오버라이드 해야 "도커에서 웅앵ㅇ웅", "앨튼 어쩌구" 출력 가능 System.out.println(); String str = new String("test"); System.out.println(str); // test System.out.println(str.toString()); // test } }
5. equals() 메서드
1) 두 인스턴스의 주소 값을 비교하여 true/false 반환
2) 재정의하여 두 인스턴스가 논리적으로 동일함의 여부를 구현함
3) 인스턴스가 다르더라도 논리적으로 동일한 경우 true를 반환하도록 재정의 할 수 있음/* * java.lang 패키지 * - Object 클래스 * - Class 클래스 * - String 클래스, StringBuffer, StringBuilder 클래스 * - */ public class Student implements Cloneable { private int studentNum; private String studentName; public Student(int studentNum, String studentName) { // super(); this.studentNum = studentNum; this.studentName = studentName; } @Override public String toString() { return studentNum + ", " + studentName; } @Override public boolean equals(Object obj) { if(obj instanceof Student) { Student stu = (Student)obj; if(this.studentNum == stu.studentNum) return true; else return false; } return false; } @Override public int hashCode() { return studentNum; } @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } } public class EqualsTest { public static void main(String[] args) throws CloneNotSupportedException { Student stu1 = new Student(20211013, "Lee"); Student stu2 = new Student(20211013, "Lee"); System.out.println(stu1 == stu2); // 주소값 비교해서 false System.out.println(stu1.equals(stu2)); // 논리적으로 같다는 것으로 재정의해서 true System.out.println(stu1.hashCode()); // 20211013 재정의해서 학번 출력 System.out.println(stu2.hashCode()); // 20211013 System.out.println(System.identityHashCode(stu1)); //377478451 System.out.println(System.identityHashCode(stu2)); //513169028 System.out.println("-----아래는 참고사항-----"); String str1 = new String("abc"); String str2 = new String("abc"); System.out.println(str1.equals(str2)); // true System.out.println(str1.hashCode()); // 96354 System.out.println(str2.hashCode()); // 96354 Integer integer = 100; // Integer integer2 = new Integer(100); Integer integer2 = 100; System.out.println(integer.equals(integer2)); // true System.out.println(integer.hashCode()); // 100 System.out.println(integer2.hashCode()); // 100 System.out.println("-----Clone()-----"); System.out.println(stu1); // 20211013, Lee Student copyStudent = (Student)stu1.clone(); System.out.println(copyStudent); // 20211013, Lee } }
6. hashCode() 메서드
1) hashCode()는 인스턴스의 저장 주소를 반환함
2) 힙메모리에 인스턴스가 저장되는 방식이 hash 방식임
3) 두 인스턴스가 같다는 것은?
- equals()
- hashCode()
: 논리적으로 동일함을 위해 equals() 메서드를 재정의, hashCode() 메서드도 재정의하여 동일한 hashCode 값이 반환되도록 함
7. clone() 메서드
1) 객체의 원본을 복제하는데 사용하는 메서드
2) 해당 클래스의 clone() 메서드를 사용하는 것을 허용한다는 의미로 cloneable 인터페이스를 명시해 줌
3) OOP의 캡슐화, 정보은닉 관점에서 위배될 수 있음'개발자 수업 > Java' 카테고리의 다른 글
18. Class 클래스 (0) 2021.10.14 17. String 클래스 (0) 2021.10.13 과제2 - CarTest (0) 2021.10.13 15. 추상 클래스와 인터페이스 (0) 2021.10.13 14. 다형성 (0) 2021.10.11