본문 바로가기

국비과정/JAVA

20230614 _[9일차]_03. 객체2

[ 여러개의 클래스 생성 ]

 

package jun14;
// 사람을 만들어 보겠습니다.

class Human{
	// 필드
	String name;	// 인스턴스 변수_ 선언만 하면 사용가능
	byte age;
	String addr;
	String ssn;
	
	// 메소드 : 되돌려주는 타입, void는 되돌려주는 값이 없을때.
	public double what() {
		return 3;
	}
	
	public boolean eat() {
		return 1+1 == 3;
	}
	
	public int sleep() {		// 메서드 타입이 int면 return값도 int로 맞춰줘야함!
		return 1;
	}
	
	public void work() {
		System.out.println(name + "Zzzzzz");	// name : 인스턴스 변수_ 선언만 하면 사용가능
		String ng = "홍길동";
		name = ng;
//		String name1;	// name1 : 지역변수 _ 사용불가(초기화필요)
		System.out.println(name);
	}	
}

public class CM01 {
	public static void main(String[] args) {

		int num1 = 10;	// 지역변수
		System.out.println(num1);	// 10
		
		Human human = new Human();
		human.eat();	// 인스턴스.메소드명()
		System.out.println(human.eat());	// false
		
		human.toString();	// * Object에 있습니다. 최상위 타입입니다.
		
		int sleep = human.sleep();
		System.out.println(sleep);	// 1
			
	}
}

 


Object 최상위타입 (클래스의 상위타입)
human.  자동완성에서 상위타입인 Human / object 표시해줌

 

아래처럼 출력시켜보면 아래와 같은 결과가 나온다.

System.out.println( human.toString(); ) 

************************
jun14.Human@6f2b958e

 

toString() 의 정의를 살펴보면 리턴값이 아래와 같다.

           클래스 이름 + 해시코드

    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
 

* 해시코드 : 객체를 식별하는 데 사용되는 정수 값

만약 Human 클래스에 명시적으로 hashCode() 메소드를 오버라이드하지 않았다면, Object 클래스의 기본 hashCode() 구현이 호출된다. 이 기본 구현은 객체의 내부 메모리 주소를 기반으로 한 해시 코드를 생성.

                                                               인스턴스의 위치 주소


 

package jun14;

class Human{

	String name;	
	byte age;
	String addr;
	String ssn;
	
	public double what() {
		return 3;
	}
	
	public boolean eat() {
		return 1+1 == 3;
	}
	
	public int sleep() {
		return 1;
	}
	
	public void work() {
		System.out.println(name + "Zzzzzz");
		String ng = "홍길동";
		name = ng;
		System.out.println(name);
	}	
}

public class CM01 {
	public static void main(String[] args) {

		Human human = new Human();
		human.work();	// Human클래스의 work메서드 실행
        
		System.out.println(human.name);	// work메서드가 실행되지 않으면 결과값은 null
		
//		System.out.println(human.work());	// 반환타입이 void라 실행되지 않음
		System.out.println(human.sleep());	// 반환타입이 int라 1 출력
		
	}
}

nullZzzzzz	// 여기에서 name은 인스턴스 변수(선언만하고 초기화x)
홍길동
홍길동
1

[ 클래스 참조_ 같은 패키지]

 

package jun14;

class Apple{
	
	String color;
	int age;
	
	public void info() {
		System.out.println("색상 : " + color);
		System.out.println("나이 : " + age);
	}	
}

public class String03 {
	public static void main(String[] args) {

		Apple apple = new Apple();
		Apple apple2 = new Apple();
		
	}

}

package jun14;

class Human{
	
	public double what() {
		return 3;
	}
		....
	
	public void work() {
		System.out.println(name + "Zzzzzz");
		String ng = "홍길동";
		name = ng;
		System.out.println(name);
	
		String name;	
		byte age;
		String addr;
		String ssn;		// 인스턴스 변수 선언 위치는 상관없음. 클래스 내부에만 써주면됨.
						// 보기좋게 상단에 써줄뿐..
    
    }	  
}

public class CM01 {
	public static void main(String[] args) {

		Human human = new Human();
		....

		Apple a1 = new Apple();	// 다른 파일에 있는 Apple 클래스 인스턴스화 가능.
		System.out.println(a1.age);	 // 0  => int age로 선언만 해서 초기값인 0이 출력.
	
		// 같은 package(jun14)에 있으면 가능.
	}

}

** 정리 **

package jun14  -> Public class CM01, class Human

                         -> Public class String03, class Apple

package apple  -> Public class CM02

 

 

[ 클래스 참조_ 다른 패키지] _ public에 따라 import 여부 달라짐

 

package apple;

import jun14.CM01;
import jun14.String03;		// // 관련성 있는 클래스끼리 모아두기

public class CM02 {
	public static void main(String[] args) {

//		Apple apple = new Apple();		// 다른package - 불가능
		CM01 cm01 = new CM01();			// 다른package, 근데 public - 가능
								// 상단에 해당 package import!
		
//		Human human = new Human();
		String03 str03 = new String03();
		
	}

}

* CM01, String03 에서 ctrl + space 하면 해당 패키지에서 가져올 수 있음.

 

* java.util도 다른 패키지에서 import 해서 가져오는거!!


[ 여러개의 메서드 생성 ]

 

public class Calc

> plus 메서드  -> 연산

> public main 메서드  -> (plus메서드)실행

 

package calc;

public class Calc {
	// 필드
	// 생성자
	// 메소드
	
	int plus(int num1, int num2) {	// 같은타입은 콤마로 계속 나열가능
		System.out.println("출력문 : 계산을 시작합니다.");
		return num1 + num2;	// 매개변수 두개(num1&num2)를 넣어서 하나의 값을 반환. 
	}
	
	public static void main(String[] args) {
		
		Calc calc = new Calc();	// 자기 자신을 객체로 만들기
		
		int result = calc.plus(15, 20);
		System.out.println(result);	// 15 + 20
		
		String name = "가나다라마";
		int result2 = calc.plus(15, name.length());
		System.out.println(result2);	// 15 + 5 = 20

	}
}

** return하나의 값만 반환가능. 여러개의 값은 배열형태로 반환가능.


출력문 : 계산을 시작합니다.
35
출력문 : 계산을 시작합니다.
20