[Java 9-4 Car App] 클래스와 클래스의 관계 : 객체 관계

임승현·2022년 10월 16일

Java

목록 보기
32/126

🐧클래스와 클래스의 관계 : 객체 관계

→ UML(Unified Modeling Language)를 사용하여 클래스 다이어그램(Class Diagram)으로 표현

1.일반화 관계(Generalization) : 상속 관계(is a 관계)
→ 클래스 선언시 기존 클래스를 상속받아 작성
→ 사원클래스와 관리자클래스 - 관리자는 사원이다.(O) 사원은 관리자이다(X)
2.실체화 관계(Realization) : 상속 관계(is a 관계)
→ 클래스 선언시 인터페이스를 상속받아 작성
→ 인터페이스 : 클래스보다 추상적으로 표현된 자료형
3.연관관계(Association) 또는 직접연관관계(Direct Association) : 포함 관계(has a 관계)
→ 클래스 선언시 필드를 참조변수로 선언하여 객체를 저장한 관계
→ Computer <--- CPU + MainBoard + Memory
4.집합연관관계(Aggregation) : 포함관계의 객체간의 생명주기가 다른 경우
→ Computer --- Printer
5.복합연관관계(Composition) : 포함관계의 객체간의 생명주기가 같은 경우
→ Game --- Character
6.의존관계(Dependency) : 포함관계 - 참조필드에 저장된 객체가 변경될 수 있는 관계
→ TV --- RemoteControl

package association;

//자동차정보(모델명,생산년도,엔진)를 저장하기 위한 클래스
public class Car {
	private String modelName;
	private int productionYear;
	//엔진정보(Engine 객체)를 저장하기 위한 참조필드 - 포함관계 : Direct Association
	// => 포함관계가 성립되기 위해서는 반드시 생성자 또는 Setter 메소드를 이용하여 참조필드에
	//객체가 저장되도록 설정
	private Engine carEngine;
	
	public Car() {
		// TODO Auto-generated constructor stub
	}

	public Car(String modelName, int productionYear, Engine carEngine) {
		super();
		this.modelName = modelName;
		this.productionYear = productionYear;
		this.carEngine = carEngine;
	}

	public String getModelName() {
		return modelName;
	}

	public void setModelName(String modelName) {
		this.modelName = modelName;
	}

	public int getProductionYear() {
		return productionYear;
	}

	public void setProductionYear(int productionYear) {
		this.productionYear = productionYear;
	}

	public Engine getCarEngine() {
		return carEngine;
	}

	public void setCarEngine(Engine carEngine) {
		this.carEngine = carEngine;
	}
	
	//필드값(자동차정보)을 출력하는 메소드
	public void displayCar() {
		System.out.println("모델명 = "+modelName);
		System.out.println("생산년도 = "+productionYear);
		//System.out.println("엔진 = "+carEngine);
		
		//참조필드에 저장된 객체를 사용하여 메소드 호출
		// => 참조필드에 객체가 저장되어 있지 않은 경우 메소드를 호출하면 NullPointerException 발생
		// => 포함관계로 설정된 객체의 메소드 호출 가능
		//System.out.println("연료타입 = "+carEngine.getFualType());
		//System.out.println("배기량 = "+carEngine.getDisplacement());
		
		carEngine.displayEngine();
	}
}
package association;

public class CarApp {
	public static void main(String[] args) {
		//엔진 생성
		Engine engine=new Engine();
		//engine.displayEngine();
		engine.setFualType("경유");
		engine.setDisplacement(2000);
		
		//자동차 생성
		Car carOne=new Car();
		//carOne.displayCar();
		
		carOne.setModelName("쏘렌토");
		carOne.setProductionYear(2018);
		//자동차에 엔진 포함 - Setter 메소드를 이용하여 참조필드에 객체 저장 : 포함 관계 성립
		carOne.setCarEngine(engine);
		
		carOne.displayCar();
		System.out.println("===============================================================");
		//자동차 생성 >> 엔진 포함 - 생성자를 이용하여 참조필드에 객체 저장 : 포함 관계 성립
		Car carTwo=new Car("싼타페", 2022, new Engine("휘발유", 3000));
		carTwo.displayCar();
		System.out.println("===============================================================");
		System.out.println(carOne.getModelName()+"의 엔진정보 >> ");
		engine.displayEngine();
		System.out.println("===============================================================");
		System.out.println(carTwo.getModelName()+"의 엔진정보 >> ");
		//자동차(Car 객체)에서 엔진정보(Engine 객체)를 반환받아 메소드 호출 
		carTwo.getCarEngine().displayEngine();
		System.out.println("===============================================================");
	}
}
package association;

//엔진정보(연료타입, 배기량)를 저장하기 위한 클래스
public class Engine {
	private String fualType;
	private int displacement;
	
	public Engine() {
		// TODO Auto-generated constructor stub
	}

	public Engine(String fualType, int displacement) {
		super();
		this.fualType = fualType;
		this.displacement = displacement;
	}

	public String getFualType() {
		return fualType;
	}

	public void setFualType(String fualType) {
		this.fualType = fualType;
	}

	public int getDisplacement() {
		return displacement;
	}

	public void setDisplacement(int displacement) {
		this.displacement = displacement;
	}
	
	//필드값(엔진정보)를 출력하는 메소드
	public void displayEngine() {
		System.out.println("엔진타입 = "+fualType);
		System.out.println("배기량 = "+displacement);
	}
}

0개의 댓글