글 작성자: 취업중인 피터팬
728x90
JDK : 1.8.0_261 버전
JRE : 1.8.0_261 버전
JAVA VERSION : 8 업데이트 261
Eclipse IDE VERSION : 2020-06버전

 

목표

클래스를 외부 파일에 만들고 객체를 생성해본다.

 


 

 

코드

 

human.java

package ex08Class;
/*
 시나리오] 
 다음에 주어진 조건으로 '사람'을 추상화 하시오
 -속성 : 이름, 나이, 에너지
 -행동 : 걷는다, 생각한다, 먹는다, 현재상태 표현
 -행동의 조건
 	먹으면 에너지가 2증가
 	걸으면 에너지가 1감소
 	생각하면 에너지가 2감소
 	단, 에너지의 최대/최소 범위는 0~10(사람은 무한이 먹을 수 없으며,
 	에너지가 마이너스가 되면 죽은것과 같기때문)
 */

public class Human {
	
	String name;
	int age;
	int energy;
	
	public Human(String name, int age, int energy) {
		this.name = name;
		this.age = age;
		this.energy = energy;
	}
	
	void eat() {
		if(energy >= 9) {
			energy = 10;
			System.out.println("에너지의 최대값은 10입니다. 10으로 고정됩니다.");
		}
		else {
			energy +=2;
			System.out.println("에너지가 2 증가하였습니다.");
		}
	}
	
	void walk() {
		if(energy <= 0) {
			energy = 0;
			System.out.println("energy의 최소값은 0입니다. 0으로 고정됩니다.");
		}
		else {
			energy --;
			System.out.println("energy의 값이 1 감소했습니다.");
		}
	}
	
	void thinking() {
		if(energy <= 0) {
			energy = 0;
			System.out.println("energy의 최소값은 0입니다. 0으로 고정됩니다.");
		}
		else {
			energy -= 2;
			System.out.println("energy의 값이 2 감소했습니다.");
		}
	}
	
	void showState() {
		System.out.println("=====님의 현재 상태는 ====");
		System.out.println("이름 :" + name);
		System.out.println("나이 :" + age);
		System.out.println("에너지 : " + energy);
		System.out.println("=======================");
	}

}

 

E02HumanMain

package ex08Class;

/*
 해당 예제에서는 Human클래스를 외부 파일로 선언하였다.
 동일한 패키지에 정의된다면 컴파일러는 해당 클래스를 찾아서 
 즉시 객체(인스턴스)화 할 수 있다. 
 만약 다른 패키지에 선언된 클래스라면 반드시 import선어을 해줘야 한다.
 */
public class E02HumanMain {

	public static void main(String[] args) {
		Human human = new Human("피노키오", 24, 7);
		
		human.showState();
		human.eat();
		human.thinking();
		human.showState();
		
		for(int i = 1; i <= 20; i++) {
			human.walk();
		}
		
		for(int i = 1; i<=20; i++) {
			human.eat();
		}
		
		human.showState();
	}
}

 

패키지 구조

 

이번 프로그램을 구현하는데 필요한 파일은 2개입니다. 앞으로 점점 더 늘어날 겁니다. 보통 파일 하나의 클래스 하나가 구조적으로 좋은 코딩입니다.

이번 코딩에서 중요한 부분이 나왔는데 생성자의 개념입니다. 생성자란 반환값이 없고 클래스와 똑같은 메소드를 이야기 합니다. 생성자에서는 보통 매개변수를 초기화 해주는 역할을 합니다.(사실 안해줘도 상관은 없지만 관례적으로 그렇게 합니다.) 생성자가 왜 중요한지 말씀드리면 객체를 생성하면 가장 먼저 컴퓨터가 그 객체를 초기화 시킨 클래스를 가서 실행시키는 것이 생성자입니다.! 이건 가장 중요한 개념입니다. 이것때문에 많이 헷갈려하고 어려워 하는데 외우시면 됩니다. 객체를 생성하면 컴퓨터는 가장먼저 클래스의 생성자를 찾아간다!  

 

객체를 어떻게 생성했는지 알아봅시다. 

Human human = new Human("피노키오", 24, 7);

이렇게 객체를 생성했습니다. 근데 앞에 내용가 달라진 점이 있습니다.

Person person = new Person();

뭐가 달라졌는지 아시겠나요? 뒤에 Person()에 괄호에는 아무 것도 없지만 Human() 괄호에는 값이 3개나 들어있습니다. 이것의 비밀은 바로 생성자에 있습니다. Human객체의 생성자에는 매개변수가 3개가 있습니다.

public Human(String name, int age, int energy) <= 괄호에 들어있는게 매개변수입니다. 

컴퓨터는 Human human = new Human("피노키오", 24, 7);가 됐든 Person person = new Person();가 됐든 저 문장을 실행하면 가장먼저 찾아가는 건 해당 클래스의 생성자라고 했습니다. Person의 클래스에는 생성자가 우리눈에는 보이지 않지만 디폴트 생성자가 있습니다. 아무일도 하지 않고 아무것도 초기화 해주지 않지만 ()괄호안에 아무것도 없다면 디폴트 생성자를 찾아서 실행합니다. 두번째 생성자의 매개변수가 다르다면 한 클래스에서 생성자를 2개이상 만들 수있습니다. 다만 객체를 생성할 때 매개변수의 갯수만 내가 생성한 생성자의 매개변수의 개수랑 맞춰주면 됩니다. 

 

 

결과 값

깃허브 링크(모든 코드와 프로젝트가 들어있습니다.)
https://github.com/pinocchio9702

'Java > Java_기초부터 _끝까지' 카테고리의 다른 글

Java 기초 class(4)  (0) 2020.11.06
Java 기초 class(3) - 클래스 안에 객체  (0) 2020.11.06
Java 기초 class(1) - 추상화  (0) 2020.11.05
Java 기초 StringBuffer  (0) 2020.10.27
Java 기초 String함수들  (0) 2020.10.27