JAVA/JAVA Basic

[ JAVA ] 상속(Inheritance)

IT록흐 2021. 6. 18. 21:34
반응형

 

 

상속을 공부하면서

JAVA를 조금 더 이해할 수 있었다.

 

상속의 목적은

불필요한 코드 사용

줄이는데에 있다.

 

 

'자동차' 클래스는 A라는 특징을 가진다. 테슬라도 자동차 브랜드이다. 그래서 테슬라는 A + α 특징을 가진다. 자동차가 테슬라뿐이라면 그다지 낭비가 되지 않겠지만, 자동차는 도요타, 현대, 기아, 볼보... 여러 브랜드가 있다. 브랜드마다 A라는 특징을 공통으로 갖고 이를 코드로 구현하면 중복되는 코드가 정말 많을 것이다.

 

이를 방지하기 위해 '상속'이라는 개념을 사용한다.

 

< 부모 클래스 >

public class Car {

	int speed;
	
	public void speedUp() {
		speed += 1;
	}
	
	public final void stop() {
		
		System.out.println("차를 멈춤");
		
		for(int i =0 ;;i++) {
			
			if(speed < 10) {
				speed =0;
				System.out.println("현재 속력 : " + speed);
				break;
			}
			else {
	            System.out.println("현재 속력 : " + speed);
				speed -= 20;
						}
		}
	}	
}

 

 

<자식 클래스>

public class Tesla extends Car{
	
	String cartype = "Electronic Car";
	
    @Override
	public void speedUp() {
		speed += 10;
	}
}

 

 

Tesla 클래스는 Car 클래스를 extends 로 상속받아, Car 클래스에 구현된 필드와 메소드를 그대로 받는다. 그래서 Tesla 클래스에는 중복하여 Car클래스의 필드와 메소드를 작성할 필요가 없다.

 

이것이 바로 불필요한 코드를 줄이는 '상속'(inheritance)의 목적이다.

 

상속이라고 해서 부모로부터 받은 메소드를 그대로 사용할 필요는 없다. 자식 클래스 형편에 맞게 메소드를 재정의 할 수 있는데 이를 '오버라이드(Override)'라고 한다.

 

JAVA는 상속받은 메소드를 자유롭게 재정의 할 수 있다. 하지만 몇몇 개의 메소드들은 처음 설정 그대로 유지해야만 하는 것들이 있다. 이런 메소드들은 final로 설정하여 재정의를 막을 수 있다. public final void stop()

 

<Main 클래스>

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Tesla t1 = new Tesla();
		
	    System.out.println("가속 시작! ");
		while(t1.speed <100) {
			t1.speedUp(); // 가속
			System.out.println("테슬라 현재 속력 : " + t1.speed);
		}
		
		System.out.println();
		t1.stop();
	}
}

 

<출력결과>

 

 

 

 

 

Telsa 객체 t1을 생성하여 부모로부터 상속받은 필드와 메소드를 사용해보았다. Car 클래스에서 speedUp()은 속력을 1씩 올리지만 테슬라는 속력을 10씩 올리도록 오버라이드 했었다.

 

그 결과 테슬라 객체는 재정의대로 속력을 10씩 올렸다. 하지만 final로 정의된 stop()은 재정의하지 못했으니 Car 클래스에 작성된대로 20씩 속력을 줄였다.

 

이번 포스팅은 상속이 필요한 이유를 담고 있다면 다음 포스팅은 상속이 일어나는 구체적인 과정을 살펴볼까한다.

 

 

 


정리

 

 

상속은 불필요한 중복 코드 사용을 피하기 위해 사용된다.

 

 

 

 

 

 

 

반응형

'JAVA > JAVA Basic' 카테고리의 다른 글

[ JAVA ] 다형성  (0) 2021.06.18
[ JAVA ] JAVA와 C언어의 차이  (0) 2021.06.18
[ JAVA ] 싱글톤패턴(singleton) 그리고 final  (0) 2021.06.18
[ JAVA ] static 알아보기  (0) 2021.06.18
[ JAVA ] 객체의 생성과 호출  (0) 2021.06.18