본문 바로가기
JAVA학원공부

예제

by 요리하다그만둠 2022. 6. 2.

출력 결과)

4륜구동 하이브리드 엔진을 결합합니다.

스파이크 타이어 바퀴를 결합합니다.

하이텐강 차체를 결합합니다.

차량 제작을 완성하였습니다.

Test 프로그램)

작성요령)

1. Car 인터페이스를 작성합니다.

2. 위를 구현하는 CarImpl 클래스를 작성하되 오버라이딩(overriding)되는 메서드들을 작성합니다.

메서드의 구현부(body)는 일단 놓아두고 다른 클래스들을 작성한 이후에 완성하도록 합니다.

3. 부속품에 해당되는 Body, Engine, Wheel 클래스를 각각 작성합니다.

1) 먼저 클래스를 작성한 후 생성자를 작성하되, 테스트 클래스(Assembling)에서의 호출 사례와 같이

적용되려면 오버로딩된 생성자가 필요하므로 인자를 받아서 멤버 필드를 초기화하도록 작성합니다.

2) 또한 각 클래스의 멤버 메서드들은 테스트 클래스(Assembling) 클래스 출력 사례를 참조하여

멤버 필드와 더불어서 "~을(를) 결합합니다"라는 메시지가 처리되도록 조치합니다.

4. 다시 CarImpl 구현 클래스로 돌아와서 오버로딩 생성자에 위에서 작성한 부분품 클래스들을 활용하여 코드를 완성합니다.

1) 각 자동차 조립과 관련된 멤버 메서드들은 has-a 관계로 설정된 각각 해당되는 부속품 클래스들의

멤버 메서드들을 호출하도록 조치합니다.

2) 최종 조립을 완성하는 completeCar 메서드에서는 위에서 구현한 자신의 멤버 메서드들을 다시 호출하고

"차량 제작을 완성하였습니다." 라는 메시지로 마감처리하여 완성하도록 합니다.

5. 주어진 테스트 클래스를 보기와 같이 그대로 작성하여 테스트를 실행합니다.

6. CASE툴(UML 다이어그램툴)을 활용하여 문제의 보기와 같이 다이어그램이 형성되는지 점검합니다.

 

 

먼저 패키지를 만들고 추상클레스를 만들어준다.

package com.javateam.car.Car;

public interface Car {
	
	// 엔진조립
	default void cornbineEngine() {
	}
	// 차체 조립
	default void cornbineBody() {
	}
	// 바퀴 조립
	default void cornbineWheel() {
	}
	// 자동차 조립 완성
	default void completeCar() {
	}
}

그리고 부품들을 담당할 클래스를 만들어준다.

package com.javateam.car.modules;

import com.javateam.car.CarImpl;


public class Body extends CarImpl{
	// 필드 생성
	String bodyNmae;
	// 생성자
	public Body(String bodyNmae) {
		
		this.bodyNmae = bodyNmae;
		
	}
	
	public void combine() {
		System.out.println(bodyNmae + " 차체를 결합합니다.");
	}
}

Body

package com.javateam.car.modules;

import com.javateam.car.CarImpl;

public class Engine extends CarImpl{
	// 필드 생성
	String engineName;
	// 생성자
	public Engine(String engineName) {
		
		this.engineName = engineName;
	}
	public void combine() {
		System.out.println(engineName + "을 결합합니다.");
	}
}

Engine

package com.javateam.car.modules;

import com.javateam.car.CarImpl;

public class Wheel extends CarImpl{
	// 필드 생성
	String wheelName;
	// 생성자
	public Wheel(String wheelName) {
		
		this.wheelName = wheelName;
	}
	public void combine() {
		System.out.println(wheelName + " 바퀴를 결합합니다.");
	}
}

Wheel

다만들고난후 CarImpl 클래스를 만들어서 이어 붙여준다.

package com.javateam.car;

import com.javateam.car.Car.Car;
import com.javateam.car.modules.Body;
import com.javateam.car.modules.Engine;
import com.javateam.car.modules.Wheel;

public class CarImpl implements Car {
	Body body;
	Engine engine;
	Wheel wheel;
	
	// 기본생성자
	public CarImpl() {
		
	};
	// 오버라이딩될 생성자 
	public CarImpl(Body body, Engine engine, Wheel wheel) {
		this.body = body;
		this.engine = engine;
		this.wheel = wheel;
	}

	@Override
	public void cornbineEngine() {
		engine.combine();
	}
	@Override
	public void cornbineBody() {
		body.combine();
	}
	@Override
	public void cornbineWheel() {
		wheel.combine();
	}
	@Override
	public void completeCar() {
		this.cornbineBody();
		this.cornbineEngine();
		this.cornbineWheel();
		System.out.println("차량 제작이 완료 되었습니다.");
	}

	
}

후에 구동 클래스 Assembling작성

package com.javateam.car.modules.test;

import com.javateam.car.modules.*;
import com.javateam.car.Car.Car;
import com.javateam.car.CarImpl;

public class Assembling{

	public static void main(String[] args) {
		
		Car car = new CarImpl(new Body("하이텐강"), 
				new Engine("4륜구동 하이브리드 엔진"), 
				new Wheel("스파이크 타이어"));
		
		car.completeCar();
	}

}

'JAVA학원공부' 카테고리의 다른 글

프로젝트 lombok 사용  (0) 2022.09.26
쇼핑몰 프로젝트.1  (0) 2022.09.26
2022/05/27 문자열 공부  (0) 2022.05.27
2022/05/24  (0) 2022.05.24