본문 바로가기
  • 개발공부 및 일상적인 내용을 작성하는 블로그 입니다.
JAVA/객체지향

JAVA - 객체지향 프로그래밍(OOP) 특징 - 2

by 방구석 대학생 2022. 1. 23.

 

객체지향 프로그래밍의 특징 - 다형성

객체지향 프로그래밍의 특징인 다형성의 경우 다음과 같은 경우에서 나타나는 것을 확인할 수 있다.

 

1. 상속에서의 다형성(인스턴스 업캐스팅, 메소드 오버라이딩)

2. 인터페이스 구현에서의 다형성

 

1. 상속에서의 다형성

* 클래스 인스턴스 업캐스팅

부모 클래스의 필드와 메소드를 상속받은 자식 클래스로 객체 인스턴스를 만들 경우,

해당 자식 객체 인스턴스를 부모 클래스 타입으로 정의해줄 수 있다.

(반대의 경우는 불가능하다.)

Cat c = new Cat();
Animal a = c; // Cat 객체를 Animal 객체로 해석

 

* 메소드 오버라이딩

상속관계에 있는 클래스들의 경우 부모 클래스에 정의된 메소드를 자식 클래스에서 이름과 파라미터는 같되, 전혀 다른 기능을 수행하는 메소드로 재정의 해줄 수 있다.

이를 메소드 오버라이딩 이라고 한다.(Method Overriding)

 

* Overriding VS Overloading

- Overriding : 상위 클래스에 존재하는 메소드를 하위 클래스에 맞게 재정의 하는것(메소드 이름, 파라미터 수 동일)

- Overloading : 두 메소드가 같은 이름을 가지고 있으나, 파라미터의 수나 자료형이 다른 경우

 

 

2. 인터페이스 구현에서의 다형성

- 하나의 클래스가 여러개의 인터페이스를 구현할 수 있다.

- 이와 같이 하나의 객체가 여러개의 인터페이스를 구현함으로서 다양한 타입으로 해석되는 것을 다형성 이라고 한다.

- 인터페이스를 통한 다형성을 통해 한 인터페이스를 구현하는 서로 다른 클래스를 한 인터페이의 배열로 묶어주는 것도 가능해진다.

interface Sounding{
}

class Dog implements Sounding{
}

class Baby implements Sounding{
}

class Main {
	public static void main(String[] args) {
    	Sounding dog = new Dog();
        Sounding baby = new Baby();
        Sounding[] array = {dog, baby};
        // 서로 다른 클래스로 만들어진 객체 인스턴스 라도 공통된 인터페이스를 구현하고 있다면
        // 해당 인터페이스 타입의 배열로 묶어줄 수 있다.
    }
}

 

* 다형성을 이용할 때 좋은 점?

- 같은 이름의 속성을 유지함 으로서 속성을 사용하기 위한 인터페이스를 유지하고, 메소드 이름을 낭비하지 않게 된다.