본문 바로가기

Java/Java 2

[Java 실습] 4. 객체지향 개념과 자바

반응형

Q1. 클래스와 인스턴스 생성

public class Car {
    private String color;
    private String model;
    private int power;
    private int curSpeed;

    public Car() {
        curSpeed = 0;
    }

    public Car(String color, String model, int power) {
        this.color = color;
        this.model = model;
        this.power = power;
    }

    public void go() {
        if (power < 200) {
            curSpeed += 10;
        } else if (power >= 200) {
            curSpeed += 20;
        }
        System.out.printf("Accelerate %s, Current Speed %d\n", model, curSpeed);
    }

    public void stop() {
        curSpeed = 0;
    }
    public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}
	public String getModel() {
		return model;
	}
	public void setModel(String model) {
		this.model = model;
	}
	public int getPower() {
		return power;
	}
	public void setPower(int power) {
		this.power = power;
	}
}
  • 기본 생성자에서는 속도를 0 으로 초기화.
  • 차량을 가속하기 위해 go() 메서드를 호출하면 파워에 따라 속도를 다르게 증가 시켜 마력에 따른 성능차가 발생.
  • break() 는 속도를 0 으로 만들어 차를 정차

 CarGame 클래스를 만들어 여러 자동차를 생성

 

public class CarGame {
    public static void main(String[] args){
        Car c1 = new Car();
        c1.setColor("RED");
        c1.setModel("Hyundai Sonata");
        c1.setPower(180);

        Car c2 = new Car("BLUE","BMW 520",210);
        c1.go();
        c2.go();
    }
}
  • 각각 기본생성자와 파라미터를 이용해 자동차 인스턴스를 생성.
  • 생성된 자동차 인스턴스를 go() 메서드로 전진시켜 서로 다른 현재 속도 확인.

자동차 인스턴스를 생성하는 두 가지 방법

        Car c1 = new Car();
        c1.setColor("RED");
        c1.setModel("Hyundai Sonata");
        c1.setPower(180);

        Car c2 = new Car("BLUE","BMW 520",210);


Q2. 상속관계와 오버라이딩 구현

public class Gun {
    protected String model;       // model name of gun
    protected int bulletCount;    // total count of bullet

    public void fire() {
        System.out.println(model + "=>");
        bulletCount -= 1;
    }

    public Gun(String model) {
        bulletCount = 10;
        this.model = model;
    }
}
  • 기본 생성자에서는 총알을 10발로 초기화.
  • fire() 메서드는 총알을 발사하고 총알 카운트를 1 감소.
  • 멤버필드들은 서브 클래스에서 사용해야 하므로 protected로 설정.
  • 생성자에서 인자를 받아 총기 모델을 설정

Gun 을 상속받는 두개의 서로다른 총기를 생성 

public class AssaultRifle extends Gun {
    public void fire() {
        bulletCount -= 5;
        System.out.printf("%s => => => => => , %d\n",model, bulletCount);
    }

    public AssaultRifle(String model) {
    	super(model);
        bulletCount = 40;
    }	
}
  • AssaultRifle 은 돌격소총으로 연발이 가능하므로 한번 발사에 5발이 동시에 나가도록 fire() 를 오버라이딩.
  • 연발로 발사 되므로 인스턴스 생성시 기본 총알을 40발로 수정.
  • 생성자에서 슈퍼클래스의 생성자를 호출.
public class ShotGun extends Gun {
    public void fire() {    	
        bulletCount -= 1;
    	System.out.printf("%s =}}} , %d\n",model, bulletCount);
    }
    
    public ShotGun(String model) {
    	super(model);
    }
}
  • ShotGun 은 근거리에서 효과를 지니는 산탄총으로 강력하지만 짧고 넓게 발사됨.
  • 단발이며 기본 총알수는 Gun 과 동일.
  • 생성자에서 슈펴클래스의 생성자를 호출.

메인 프로그램은 GunGame 클래스로 다음과 같이 Gun 타입 객체를 생성해 fire() 메서드를 호출

public class GunGame {
	public static void main(String[] args) {
		Gun gun = new Gun("Glock");
		Gun gun2 = new ShotGun("S12K");
		Gun gun3 = new AssaultRifle("M416");
		
		gun.fire();
		gun2.fire();
		gun3.fire();
	}

}

 


Q3. 추상클래스와 인터페이스를 이용해 프로그램 구조 설계와 구현

Pet 인터페이스와 Robot 추상클래스를 구현

public interface Pet {
    void bark();
}
  • 애완동물에 따라 짖는 소리가 다르므로 bark() 메서드를 구현하도록 정의.
public abstract class Robot {
    private String name;

    void move() {
        System.out.println("Robot moved !!");
    }

    abstract void charging();

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}
  • 로봇의 이름을 지정할 수 있도록 멤버변수 추가
  • 로봇을 이동시키는 move() 메서드는 구현
  • 로봇을 충전시키기 방법은 다양할 수 있으므로 charging() 메서로 구현할 수 있도록 추상메서드로 선언

Robot 추상클래스를 상속받고 Pet 인터페이스를 구현하는 RobotDog 클래스를 생성

이클립스와 같은 개발도구를 사용하면 자동으로 구현해야 하는 메서드들의 기본 코드 블럭이 생성

 

public class RobotDog extends Robot implements Pet {

    @Override
    public void bark() {
        System.out.println("Woof Woof~~");
    }

    @Override
    void charging() {
        System.out.println(getName() + " go to charging station");
    }

    public static void main(String[] args) {
        RobotDog rd = new RobotDog();
        rd.setName("robo dog");
        rd.bark();
        rd.move();
        rd.charging();
    }
}
  • robo dog 이라는 이름으로 로봇 강아지 인스턴스 생성
  • 메서드들을 사용해 동작 확인

반응형

'Java > Java 2' 카테고리의 다른 글

[Java 실습] 5. 자바 중급 활용  (0) 2021.10.01
[Java] 5. 자바 중급 활용  (0) 2021.07.16
[Java] 4. 객체지향 개념과 자바  (0) 2021.07.15
[Java 실습] 3. 자바 기본문법2  (0) 2021.07.15
[Java] 3. 자바 기본문법 2  (0) 2021.07.15