개발/Java

멀티캠퍼스 [현대 이지웰] Java 상속?, 다형성? 이게 다 뭘까?

taecostudy76 2025. 8. 11. 18:34

 

 

오늘은 정말 중요한 개념인 상속에 대해서 얘기를 해볼까해요.

 

상속은 자바에서 절대 모르면 안되는 개념인데요.

그럼 먼저 상속이 어떤 개념인지 알려드릴게요!

 

 

상속은 기존 클래스의 필드와 메서드를 새로운 클래스에서 재사용하게 해주는 개념이에요.

쉽게 말해서 부모 클래스의 코드를 재사용 하는거죠!

 

상속의 장점은 코드 재사용을 통해서 중복을 줄일 수 있어요.

유지보수가 편리해요. 부모 코드를 수정 시 자식 클래스에도 반영이 돼요.

다형성 기능을 사용할 수 있는데요. 같은 타입으로 여러 객체를 처리할 수 있는 장점이 있어요.

 

그러면 상속이 어떤 편리함을 주는지 직접 코드로 작성하면서 상속을 사용할 때와 사용하지 않을 때를 비교해볼게요.

 

Car1과 Car2의 클래스를 만들었어요.

두 클래스 모두 carName과 move 메소드가 있어요.

 

 

CarMain에서 두 클래스로 인스턴스를 만들고 각 기능들을 호출 했어요.

 

 

그럼 결과는 이렇게 나오겠죠?

이런식으로 코드를 작성해도 간단하게 만들 수 있어요.

하지만 두 인스턴스 안에 같은 메소드가 있죠?

이제 move 메소드를 새로운 CarParent에 넣어고, 원래 있던 Car1, Car2의 move 메소드는 없앨거예요.

 

 

새로운 클래스 CarParent를 만들고 그 안에 move 메소드을 넣었어요.

 

 

그러면 이렇게 에러가 뜨겠죠?

현재 Car1, Car2에는 move 메소드가 없으니까요.

이제는 Car1, Car2 클래스에 CarParent를 상속시킬 거예요.

 

 

이렇게 클래스 옆에 extends CarParent를 적으면 돼요.

그러면 자식 클래스들이 CarParent를 상속 받게 돼요.

 

 

그러면 이제 에러가 안뜨게 돼요!!

실행 결과도 똑같아요.

 

그러면 왜 이렇게 될까요?

 

 

위 그림을 보면서 설명을 해볼게요!

CarMain에서 car1 인스턴스를 만들었어요. 그 안에는 참조값이 들어있고 그 참조값 x001를 따라 가보면

자신의 타입인 Car1과 상속받은 CarParent 두 객체가 모두 생성돼요.

그리고 CarMain에서 car1Name() 메소드를 호출하게 되면 Car1 자신의 타입에서 그 메소드를 찾아 실행하게 돼요.

move()메소드를 호출하면 어떻게 될까요?

똑같이 먼저 Car1 자신의 타입에서 그 메소드를 찾게 되는데요.

만약에 해당 메소드가 없으면 자신이 상속 받은 부모타입에서 그 메소드를 찾아 호출하게 돼요.

이해가 됐을까요?

 

자 이제 다형성에 대해서 설명을 해볼거예요!
객체지향 프로그램밍에서 가장 중요한 것은 캡슐화, 상속, 다형성이 3가지인에요.

다형성은 이름 그대로 다양한 형태, 여러 형태를 뜻해요.

 

그래서 프로그래밍에서는 한 객체가 여러 타입의 객체로 취급될 수 있다는 것을 뜻하는데요.

어떻게 사용되는지 코드와 함께 설명을 해볼게요.

 

 

 

이렇게 3개의 클래스를 만들었어요.

 

 

메인에서 이렇게 호출을 하게 되면 

 

 

이렇게 결과가 나오게 되겠죠?

위 메인 코드를 보면 반복되는게 보이시죠? 그래서 메인에 메소드를 만들어 줄거예요.

 

이렇게 밑에 새로운 메소드를 만들어줬어요.

이렇게 만든 메소드를 실행 시키면 똑같은 결과 값이 나오게 돼요.

하지만 SoundAnimal의 매개변수의 타입이 Cow이기 때문에 다른 Dog나 Cat은 사용할 수 가 없겠죠?

다른 타입이니까요! 그러면 결국 또 다른 Dog 타입의 메소드, Cat 타입의 메소드를 만들어야 해요. 

그러면 또 많은 반복 작업을 해야해요. 그래서 다형성을 활용해서 이를 해결해 볼게요!

 

 

먼저 Animal 이라는 부모 클래스를 만들어 줬어요. 그리고 여기에는 sound() 메소드를 만들었어요.

Dog, Cat, Cow 클래스 에는 extends Animal로 상속을 받게 했어요.

 

 

메인 페이지에서는 이렇게 수정을 했어요.

SoundAnimal 메소드에서 매개변수의 타입을 Animal로 만들었어요.

그러면 다른 나머지 자식 타입의 인스턴스들은 Animal를 상속 받고 있으니 Animal 타입으로 업캐스팅이 될 수 있겠죠?

그러면 여러 메소드를 굳이 만들지 않고 하나의 메소드를 사용하여 Animal 하나의 객체로 여러 타입의 객체로 변환되는 것처럼

사용을 할 수 있어요.

 

다형성을 활용하면 불필요한 중복을 줄일 수 있어 굉장히 효율적으로 코드를 작성할 수 있어요!!

처음 이론을 접했을 때 굉장히 이해하기 힘들어요.

꾸준히 연습이 필요하고 예제를 직접 만들어서 다형성을 활용해 코드를 작성하다보면 금방 익숙해 질 수 있을 거예요!!