[JAVA]18일차(자바의 주요(중요) 클래스/Object 클래스)

정효진·2021년 8월 9일
0

Developer Study

목록 보기
25/47
post-thumbnail

8월9일(월)

Test121~Test133

◼ 자바의 주요(중요) 클래스

▪ 개요

일반적으로 클래스는 하나만 존재하는 것이 아니라
같은 종류의 클래스를 여러개 묶어서 사용하게 되는데
이러한 클래스나 인터페이스의 묶음을 패키지(package)라고 한다.
Sun(Oracle)사에서는 자바 프로그램을
효율적으로 작성할 수 있도록 자바 표준 패키지를 제공하며,
자바 표준 패키지에는 그래픽, 네트워크, 데이터베이스 등의
다양하고 유용한 클래스들이 포함되어 있다.

◼ import 구문

자바 표준 패키지나 사용자에 의해 외부에서 만들어진 패키지를 사용하기 위해서는
컴파일을 수행하기에 앞서 프로그램에 포함시키는 과정이 필요한데,
이 때 『import』문을 이용하여 패키지 또는 
클래스를 프로그램에 포함시키게 된다.
하지만, 『java.lang.*』패키지는 자바 프로그램에 기본적으로
import 되어 있기 때문에 이 패키지의 클래스들은 import 하지 않고
바로 사용하는 것이 가능하다.

import 문은 반드시 클래스 설계 구문 전에 선언되어 있어야 하며
형식은 다음과 같은 두 가지가 있다.

import [static] 패키지.클래스;
import [static] 패키지.*;

※ JDK 1.5 부터는 import 다음에 『static』키워드를 붙임으로써
   정적으로 패키지를 import 할 수 있는 기능을 제공하게 되었다.
   만약 패키지를 정적으로 import 한 경우라면 모든 접근 가능한
   메소드와 멤버 변수들은 접두사(ex -> ob, br, sc 처럼...)를 붙이지 않고
   사용하는 것이 가능하다.

◼ Object 클래스

『java.lang.Object』클래스는 자바 클래스의 최상위 클래스로
자바 표준 패키지 클래스나 사용자에 의해 작성된 모~~~~~~~든 클래스는
기본적으로 이 클래스로부터 상속받는다.
따라서 자바의 모든 클래스는 『java.lang.Object』 클래스의
메소드를 가지고 있으며, 바로 사용하는 것이 가능하다.

※ Java Platform, Standard Edition 8 API Specification URL
http://docs.oracle.com/javase/8/docs/api/
즐겨찾기 해두기!

▪ Object 클래스 코드 설명1📝

// import java.lang.*;
// -> import java.lang.Object;

public class Test122 //extends Object
{
	/*
	Object 클래스로부터 상속받은 멤버들...
	...

	toString()
	{
		...;
	}
	*/
	public static void main(String[] args)
	{
		Test122 ob = new Test122();
		
		//br.readLine();
		//sc.next();
		//객체.xxx();
		//-- 해당 객체를 생성시키는 대상 클래스의 메소드 xxx() 호출~!!!

		//Rect ob.Rect();
		//ob.input();
		//-- ob 객체를 생성시키는 대상 클래스 -> Rect 클래스
		//	Rect 클래스에 정의되어 있는 input() 메소드 호출

		// 객체.xxx();
		//-- 해당 객체를 생성시키는 대상 클래스에 
		//   xxx() 메소드가 존재하지 않을 때....
		// -> 에러 발생
		
		//System.out.println(ob.test());
		//--==>> 에러 발생(컴파일 에러) test()를 안만들었으니까

		System.out.println(ob.toString());
		//--==>> Test122@15db9742      얘는 우리눈에 보이지 않지만 Test122에 존재한다! 위에 주석처리한곳!
		//-- 자바가 객체를 내부적으로 구분하기 위해 임의로 부여하는 식별 번호
		//-- 에러 발생하지 않는 상황
		//    -> toString() 메소드가 Test122 클래스에 존재
		//		-> Object 클래스로부터 상속

		System.out.println(ob);
		//--==>> Test122@15db9742
		//시스템안에 아웃안에 프린트엘엔 안에도 오브젝트가 포함

	}
}

▪ Test122 와 비교~!!! 코드 설명📝

// ※ Test122 와 비교~!!!

// import java.lang.*;

public class Test123 //extends Object
{
	/*
	...
	
	public String toString()
	{
		...;
	}

	...
	*/
	
	@Override
	public String toString()
	{
		return "재정의한 toString()...";
	}
	public static void main(String[] args)
	{
		Test123 ob = new Test123();
		System.out.println(ob.toString());
		//--==>> 재정의한 toString()...

		System.out.println(ob);
		//--==>> 재정의한 toString()...
	}
}

▪ Object 클래스 코드 설명2📝

class Test //extends Object
{
	/*
	public boolean equals(object obj)
	{
		...;
	}
	*/
	private int a = 10;
	
	public void write()
	{
		System.out.println("a : " + a);
	}
}


public class Test124
{
	public static void main(String[] args)
	{
		Test ob1 = new Test();
		Test ob2 = new Test();

		System.out.println("10 == 9 : " + (10 == 9));
		//--==>> 10 == 9 : false
		//-- 『==』 비교연산자는 피연산자의 크기를 비교함을 확인(관찰)

		int a = 10;
		int b = 10;
		System.out.println("a == b : " + (a == b));
		//--==>> a == b : true
		//-- 『==』 비교연산자는 피연산자의 크기를 비교함을 확인(관찰)

		System.out.println("ob1 == ob2 : " + (ob1 == ob2));
		//--==>> ob1 == ob2 : false     --> 같은 Test타입이지만 크기가 다르게 나옴!
		//-- 객체(Test 즉, Object)들을 비교하는 과정에서 사용하는 『==』 연산자는
		//	 크기를 비교하는 것이 아니라 객체의 주소값을 비교(할당되는 주소값을 다름!!)
		//		check~!!!

		System.out.println("ob1.equals() : " + (ob1.equals(ob2)));
		System.out.println("ob2.equals() : " + (ob2.equals(ob1)));
		//--==>> ob1.equals() : false
		//		 ob2.equals() : false
		//-- 『==』 연산자와 Object 클래스가 갖고있는 『equals()』  메소드는
		//	  동일한 개념으로 객체의 주소값을 비교

		System.out.println();
		System.out.println("-----------------------------------------------");
		System.out.println();

		System.out.println("ob1            :" + ob1);
		System.out.println("ob1.toString() :" + ob1.toString());
		//--==>> ob1            :Test@15db9742
		//		 ob1.toString() :Test@15db9742

		System.out.println("ob2           :" + ob2);
		System.out.println("ob2.toString() :" + ob2.toString());
		//--==>> ob2           :Test@6d06d69c
		//		 ob2.toString() :Test@6d06d69c

	}
}

클래스명@해시코드

  • 해시코드(hashcode)
    : 자바 내부적으로 객체를 구분하기 위해 사용하는 것.
    메모리의 주소값으로 생각하면 절대로 안된다.
    hashcode(해시코드)가 같다고 같은 객체는 아니다.

▪ Object 클래스 코드 설명3📝

class NewCar
{
	private int velocity;    //-- 자동차의 속도
	private int wheelNum;	 //-- 자동차의 바퀴 갯수
	private String carName;  //-- 자동차의 이름


	NewCar(int speed, String name, int wheel)
	{
		velocity = speed;
		carName = name;
		wheelNum = wheel;
	}


}

public class Test125
{
	public static void main(String[] args)
	{
		//NewCar nCar1 = new NewCar();   //-- 사용자정의 생성자를 위에서 만들어서 이렇게 만들수 없음
		NewCar nCar1 = new NewCar(100, "k5", 4);
		NewCar nCar2 = new NewCar(120, "미니쿠퍼",4);

		// equals()
		System.out.println("1-1 : " + nCar1.equals(nCar2));
		System.out.println("1-2 : " + (nCar1 == nCar2));
		//--==>> 1-1 : false
		//		 1-2 : false
		//주소가 다르다!

		NewCar nCar3 = nCar1;  //-- 객체 복사  -> 얕은 의미 복사(참조형)
							   //  -> 주소값 복사

		System.out.println("2-1 : " + nCar1.equals(nCar3));
		System.out.println("2-2 : " + (nCar1 == nCar3));
		//--==>> 2-1 : true
		//		 2-2 : true
		////주소가 같다!

		// toString()
		System.out.println("3-1 : " + nCar1.toString());
		System.out.println("3-2 : " + nCar2.toString());
		System.out.println("3-3 : " + nCar3.toString());
		//--==>> 3-1 : NewCar@15db9742
		//		 3-2 : NewCar@6d06d69c
		//		 3-3 : NewCar@15db9742

		//hashCode()
		System.out.println("4-1 : "  + nCar1.hashCode());
		System.out.println("4-2 : "  + nCar2.hashCode());
		System.out.println("4-3 : "  + nCar3.hashCode());
		//--==>> 4-1 : 366712642
		//		 4-2 : 1829164700
		//		 4-3 : 366712642
		//-- 결과값을 16진수 형태로 바꾸게 되면
		//   『toString』메소드가 반환한 결과값 확인 가능
		//		  hashcode(해시코드)가 같다고 같은 객체는 아니다.


		//getClass()
		System.out.println("5-1 : " +nCar1.getClass());
		System.out.println("5-2 : " +nCar2.getClass());
		System.out.println("5-3 : " +nCar3.getClass());
		//--==>> 5-1 : class NewCar
		//		 5-2 : class NewCar
		//		 5-3 : class NewCar
		//-- 생성된 객체를 통해 
		//	 기반 설계도 클래스를 확인할 수있는 기능을 가진 메소드

		

		// clone()       //-- 객체 복사

		// finalize()    // 객체 직렬화

		// 기타 나머지 메소드는 스레드 처리와 관련이 있다.



	}
}
profile
개발새발

0개의 댓글

관련 채용 정보