Java 기초 class(3) - 클래스 안에 객체
728x90
JDK : 1.8.0_261 버전 JRE : 1.8.0_261 버전 JAVA VERSION : 8 업데이트 261 Eclipse IDE VERSION : 2020-06버전 |
목표
클래스 안에 다른 클래스의 객체를 선언해보고 사용해 본다.
자동차와 소유주의 관계를 생각하여 코드 구조를 생성한다.
코드
package ex08Class;
class Car{
//[맴버상수]
public static final String AUTO = "자동";
public static final String MANUAL = "수동";
//[맴버변수]
String carGear = AUTO;//미션
String carModel;//모델명
int carYear;//연식
Human owner; // 소유주
/*
소유주 : Human 클래스를 기반으로 하는 맴버 벼수로
초기화를 위해 이름, 나이, 에너지 세가지의 값이
필요함,
이와같이 클래스를 구성할 때 또 다른 객체를 맴버변수로
선언할 수 있다.
*/
//맴버 메소드
void drive() {
System.out.println(owner.name + "이(가)" + carModel + "을 운전한다.");
}
/*
객체의 초기화를 담당하는 메소드로 아래는 항상 같은 값으로만
초기화 된다는 한계를 가지고 있다.
*/
void initialize() {
carModel = "람보르기니";
carYear = 2017;
owner = new Human("캡틴로져스",30, 10);
}
/*
위와 동일한 이름의 함수로 오버로딩에 의해 정의된 초기화 메소드
초기화를 진행하는 역할은 동일하나, 메개변수를 통해 다양한
형태의 객체를 초기화 할 수 있다.
*/
void initialize(String model, int year, String name, int age, int energy) {
carModel = model;
carYear = year;
owner = new Human(name, age, energy);
/*
또 다른 객체가 맴버변수로 정의 되었으므로, 객체를 생성한후
각각의 맴버변수를 초기화 해야 한다.
*/
}
//해당 객체의 정보를 디스플레이 해줌
void showCarInfo() {
System.out.println("[차량정보]");
System.out.printf("모델명 : %s\n", carModel);
System.out.printf("연식 : %d\n", carYear);
System.out.printf("기어 : %s\n", carGear);
owner.showState();
}
}//end fo Car class
public class E03CarMain {
public static void main(String[] args) {
//자동차1 객체 생성
Car car1 = new Car();
System.out.println("[초기화메소드 호출전]");
/*
객체가 초기화가 되지 않았을 경우
변수는 null값이 반환되고 함수는 에러가 뜬다
*/
System.out.println("car1.owner = " + car1.owner);
//car1.drive();
/*
에러발생(자동차 소유주를 표현하는 Human 객체가
초기화 되지 않는 상태에서 출력을 시도하여
런타임 에러가 발생된다.)
*/
System.out.println("[초기화메소드 호출후]");
car1.initialize(); //고정된 내용으로 초기화 진행됨
car1.drive();
car1.showCarInfo();
//자동차2 객체 생성 : 객체생성후 맴버변수에 직접 접근하여 초기화 한다.
Car car2 = new Car();
car2.carGear = Car.MANUAL;
car2.carModel = "밴틀리";
car2.carYear = 2018;
car2.owner = new Human("토니스타크", 52, 8);
System.out.println("자동차정보와 소유자 정보 같이 보기");
car2.showCarInfo();
//세번째 자동차 객체 생성 : 매개변수가 있는 초기화 메소드를 이용하여 초기화를 진행
Car car3 = new Car();
car3.initialize("스포츠카", 2012, "성유겸", 8, 10);
car3.showCarInfo();
}
}
Car 클래스 안에 Human 이라는 자료형으로 owner객체를 선언했습니다. 이런 구조일 경우에 owner의 초기화를 진행하지 않으면 Car객체을 생성하고 사용할 때 오류가 납니다. 먼저 객체를 초기화 해주도록 합시다. 여기서는 initialize() 함수에서 초기화 해주고 하나의 사람밖에 넣을 수 없는 한계가 있다고 주석에 써놓았습니다. 이를 해결하기 위해 생성자에서 클래스 객체를 매개변수로 넘겨주는 방식을 사용합니다. 이는 뒤에가서 이야기 하겠습니다. 생성자가 없으니깐 main함수에서 값을 한번 더 명시해야 하는 단점이 보입니다.
결과 값
'Java > Java_기초부터 _끝까지' 카테고리의 다른 글
Java 기초 class(5) - 생성자 (0) | 2020.11.06 |
---|---|
Java 기초 class(4) (0) | 2020.11.06 |
Java 기초 class(2) - 다른 파일 (0) | 2020.11.05 |
Java 기초 class(1) - 추상화 (0) | 2020.11.05 |
Java 기초 StringBuffer (0) | 2020.10.27 |