ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글