PLOD

[Java] 추상 클래스(Abstract class) , 메서드(Method) 본문

개발 공부/Java

[Java] 추상 클래스(Abstract class) , 메서드(Method)

훌룽이 2022. 11. 9. 14:15

그림에서 선만 딴 부분을 부모 클래스, 자식클래스는 부모클래스의 선을 기반으로 세밀하게 묘사할 수 있다

메서드 사용의 장점

1. 코드 재사용: 메서드는 특정 기능을 캡슐화하므로, 필요할 때마다 그 기능을 다시 작성할 필요 없이 해당 메서드를 호출함으로써 코드를 재사용할 수 있다.
2. 코드의 가독성: 이름이 부여된 메서드는 코드가 수행하는 작업을 명확하게 나타내므로, 코드를 읽는 사람에게 추 가적인 문맥을 제공한다.
3. 모듈성: 큰 프로그램을 작은, 관리 가능한 부분으로 나눌 수 있다. 이는 코드의 가독성을 향상시키고 디버깅을 쉽 게 만든다.
4. 코드 유지 관리: 메서드를 사용하면, 코드의 특정 부분에서 문제가 발생하거나 업데이트가 필요한 경우 해당 메서 드만 수정하면 된다. 이렇게 하면 전체 코드 베이스에 영향을 주지 않고 변경 사항을 적용할 수 있다.
5. 재사용성과 확장성: 잘 설계된 메서드는 다른 프로그램이나 프로젝트에서도 재사용할 수 있으며, 새로운 기능을 추가하거나 기존 기능을 확장하는 데 유용하다.
6. 추상화: 메서드를 사용하는 곳에서는 메서드의 구현을 몰라도 된다. 프로그램의 다른 부분에서는 복잡한 내부 작 업에 대해 알 필요 없이 메서드를 사용할 수 있다.
7. 테스트와 디버깅 용이성: 개별 메서드는 독립적으로 테스트하고 디버그할 수 있다. 이는 코드의 문제를 신속하게 찾고 수정하는 데 도움이 된다.

추상메서드의 의미

"추상" 사전적 의미로 "여러가지 사물이나 개념에 공통되는 특성이나 속성따위를 추출하여 파악하는 작용"이라는 의미이다.

 

추상화 : 클래스간의 공통점을 찾아내서 공통의 부모를 설계하는 작업
구체화 : 상속을 통해 클래스를 설계, 확장하는 작업

 

여러 객체에 공통되는 사항을 추출하여 부모 클래스에 선언 및 구현을 하고 자식 클래스에는 특징을 구현하여 기능을 확장한다. 이 내용만 보면 상속의 개념과 동일하게 보일 것이다. 

 

추상클래스의 장점은 부모클래스에서 공통 부분을 구현과 설계가 완료되면 자식 클래스에서 상속받아 기능
을 확장 할 때 편리하다.  자식 클래스에서 추상 메서드를 반드시 구현하도록 강요하여 이는 프로그램의 표준화 정도를 
높히고 공통사항이 부모클래스에 관리되어 개발 및 유지보수에 용이하다

1. vehicle 

package test04;
//부모 클래스
abstract class vehicle {
	int vehicleNum = 0;
	int money;
	String vehicleName;


	public vehicle(int vehicleNum, int money, String vehicleName) {
		super();
		this.vehicleNum = vehicleNum;
		this.money = money;
		this.vehicleName = vehicleName;
	}
	public void board() {
		System.out.println("탑승하다");
	}
	abstract void pay();
	
	abstract void move();
	
	
	abstract void vehicleInfo();
}

2. texi

package test04;
// vehicle 자식클래스 
public class texi extends vehicle{

	public texi(int vehicleNum, int money, String vehicleName) {
		super(vehicleNum, money, vehicleName);
		// TODO Auto-generated constructor stub
	}

	@Override
	void pay() {
		System.out.println(money + "원이 필요합니다");
		
		
	}

	@Override
	void move() {
		System.out.println(vehicleNum+ "번" + vehicleName +"가 움직입니다.");
		
	}

	@Override
	void vehicleInfo() {
		System.out.println("차량번호 : " + vehicleNum);
		System.out.println("차종 : " + vehicleName);
		System.out.println("요금 : " + money);
		
	}
	
	
}

3. bus

package test04;
//vehicle 자식클래스 
public class bus extends vehicle{
	
	public bus(int vehicleNum, int money, String vehicleName) {
		super(vehicleNum, money, vehicleName);
		// TODO Auto-generated constructor stub
	}

	@Override
	void pay() {
		System.out.println(money + "원이 필요합니다");
		
		
	}

	@Override
	void move() {
		System.out.println(vehicleNum+ "번" + vehicleName +"가 움직입니다.");
		
	}

	@Override
	void vehicleInfo() {
		System.out.println("차량번호 : " + vehicleNum);
		System.out.println("차종 : " + vehicleName);
		System.out.println("요금 : " + money);
		
	}

}

4. test(main class)

package test04;

public class vehicleTest {

	public static void main(String[] args) {
		vehicle texi01 = new texi(100, 1000, "택시");
		vehicle bus01 = new bus(200, 1500, "버스");
		
		texi texi02 = new texi(101, 1200, "모범택시");
		bus bus02 = new bus(201, 2000, "리무진");
		
		texi01.pay();
		texi02.pay();
		bus01.pay();
		bus02.pay();
		
		texi01.move();
		texi02.move();
		bus01.move();
		bus02.move();
		
		texi01.vehicleInfo();
		texi02.vehicleInfo();
		bus01.vehicleInfo();
		bus02.vehicleInfo();
	}

}

5. result

더보기

1000원이 필요합니다
1200원이 필요합니다
1500원이 필요합니다
2000원이 필요합니다
100번택시가 움직입니다.
101번모범택시가 움직입니다.
200번버스가 움직입니다.
201번리무진가 움직입니다.
차량번호 : 100
차종 : 택시
요금 : 1000
차량번호 : 101
차종 : 모범택시
요금 : 1200
차량번호 : 200
차종 : 버스
요금 : 1500
차량번호 : 201
차종 : 리무진
요금 : 2000

Comments