본문 바로가기

Programming/JAVA

상속(7) - 필드의 다형성 2

java logo image

 

 

 

앞선 예제에서, 간단히 Tire와 Car 클래스를 예시로 들어 필드 값의 다형성을 살펴보았습니다. 이제 본격적으로 상세 코드 작성을 통해 다형성을 활용한 프로그램을 짜보도록 하겠습니다. 일단 Tire 클래스를 먼저 설계해 보겠습니다. Tire 클래스가 갖는 필드와 생성자, 메서드에 대해서 아래와 같이 요약해 보았습니다. 아래의 요약 내용을 통해서 Tire 클래스를 작성해 볼까요?

 

 


 

 

Tire 클래스

필드
· maxRotation : 최대 회전 수. 타이어의 수명을 의미하며, 이 수치에 도달하면 타이어는 망가진다.
· accumulatedRotation : 누적 회전 수. roll( ) 호출 시 1씩 증가해 누적되며, 이 수치가 maxRotation이 되면 망가진다.
· location : 타이어의 위치를 의미한다.

 

생성자
·
Tire의 생성자는 location, maxRotation을 파라미터로 가지며 이를 받아 Tire 객체의 필드 값을 지정한다.

 

메서드
· roll 
 
- 실행할 때마다 accumulatedRotation 값을 1씩 증가시킨다.
  - accumulatedRotation 값이 maxRotation 보다 작을 경우에
    > 남아있는 회전 수를 출력하고, true를 리턴한다.
  - accumulatedRotation 값이 maxRotation 값에 도달하게 되면
    > 타이어가 망가졌음을 알리고, false를 리턴한다.

 

위의 내용을 반영한 코드는 다음과 같습니다.

 

public class Tire {
	// 필드
	public int maxRotation;
	public int accumulatedRotation;
	public String location;
	
	// 생성자
	public Tire(String location, int maxRotation) {
		this.location = location;
		this.maxRotation = maxRotation;
	}
	
	// 메서드
	public boolean roll() {
		++accumulatedRotation;
		if(accumulatedRotation < maxRotation) {
			System.out.println(location + "남은 수명: " + 
			(maxRotation - accumulatedRotation) + "회");
			
			return true;
		} else {
			System.out.println("***" + location + "펑크" + "***");
			
			return false;
		}
	}
}

 

 

 


 

○ Car 클래스

 

필드
· Tire 타입 인스턴스 4개를 선언하며 초기값은 아래와 같다.
   > frontLeftTire : 앞왼쪽, 6회
   > frontRightTire : 앞오른쪽, 2회
   > backLeftTire : 뒤왼쪽, 3회
   > backRightTire : 뒤오른쪽, 4회

 

메서드
· stop
  
- "자동차가 멈춥니다." 스트링 단순 출력
· run
  - "자동차가 달립니다."를 호출 시 기본으로 출력한다.
  - 조건문에 이슈가 없을 경우에는(타이어에 이상 없음) 0을 리턴한다.
  - if문을 통해 네 개의 타이어의 roll을 호출하고, 그 결과 만일 특정 타이어에서 펑크가 날 경우 false가 리턴된다면
    > stop을 호출하고
    > 타이어 인스턴스 종류에 따라 1~4를 호출한다. (앞왼쪽 1, 앞오른쪽 2, 뒤왼쪽 3, 뒤오른쪽 4)
   

 

위의 내용을 반영한 코드는 다음과 같습니다.

 

public class Car {
	
	Tire frontLeftTire = new Tire("앞왼쪽", 6);
	Tire frontRightTire = new Tire("앞오른쪽", 2);
	Tire backLeftTire = new Tire("뒤왼쪽", 3);
	Tire backRightTire = new Tire("뒤오른쪽", 4);
	
	
	int run() {
		System.out.println("자동차가 달립니다.");
		
		if(frontLeftTire.roll() == false) {
			stop();
			return 1;
		}
		
		if(frontRightTire.roll() == false) {
			stop();
			return 2;
		}
		
		if(backLeftTire.roll() == false) {
			stop();
			return 3;
		}
		
		if(backRightTire.roll() == false) {
			stop();
			return 4;
		}
		
		return 0;
	}
	
	void stop() {
		System.out.println("자동차가 멈춥니다.");
	}
}

 

Tire의 자식 클래스와 실행 클래스 내용은 다음 아티클에서 살펴보도록 하겠습니다.