Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발자이야기

객체지향개념 다형성(Polymorphism) 본문

JAVA/객체지향프로그래밍

객체지향개념 다형성(Polymorphism)

개발자가되고싶어 2021. 6. 22. 00:10
다형성

 

이번엔 객체지향개념의 다형성에 대해 알아보겠습니다.

interface 를 이용한 다형성을 코드로 알아봅시다.

 

interface는 단순히 구현의 목적 달성을 위한 골격을 미리 잡아놓는다 정도로만 생각합시다.

좀더 자세한 설명은 코드를 작성하며 진행하겠습니다.

 

우리는 다양한것들을 항상 마주합니다. 

큰틀의 무언가와 파생되는 많은것들이 있습니다.

 

아래의 코드를 한번 보겠습니다.

public class Coffee {
    public String getCoffee() {
        return "아메리카노";
    }
}

public class CoffeeMain {
    public static void main(String[] args) {
        Coffee coffee = new Coffee();
        System.out.println(coffee.getCoffee());
    }
}

출력
아메리카노

커피의 종류는 무궁무진 합니다. 누구나 커피 하면 아메리카노를 떠올리진 않을 것 입니다.

Coffee class를 Coffee 타입으로 인스턴스화 시켰습니다. 참조변수인 coffee 는 무조건 아메리카노 일 것입니다. 정말 재미없는 코드네요..

interface

interface는 추상적인 개념으로 미리 추상적인 메소드나 변수를 만들어 놓고 구현을 강제할 수 있습니다.

interface 를 구현한 구현체들은 Override를 통해 interface에 정의된 추상적인 것들은 무조건 구현해야 합니다. 

결국 위의 내용을 생각해보면 같은 interface를 구현한 구현체들은 동일한 메소드를 가지게 되며 공통점이 생기는 것 입니다. 

(java8 버전에 추가된 default메소드는 구현체에서 구현하지 않아도 됩니다.) 

 

우리는 Coffee 라는 존재를 interface로 만들 수 있습니다.

아래와 같이 말이죠

public interface Coffee {
    String getCoffee(); //추상메소드 정의
}

public class CafeLatte implements Coffee {
    @Override
    public String getCoffee() { //추상메소드 구현
        return "카페라떼";
    }
}

이제 Coffee는 더이상 class가 아니며 interface가 되었습니다. 이제 interface를 상속받아 구현하는 구현체들을 만들어 주면 됩니다. 

interface 내에 존재하는 추상메소드 들은 상속받은 곳에서 구현이 강제됩니다. 위의 getCoffee 메소드 처럼요!

 

public class CoffeeMain {
    public static void main(String[] args) {
        Coffee coffee = new CafeLatte();
        System.out.println(coffee.getCoffee());
    }
}

출력
카페라떼

이제 위와같이 사용할 수 있습니다. coffee 의 참조변수 타입이 Coffee interface로 CafeLatte 클래스를 인스턴스화 할 수 있습니다. 이것이 다형성의 핵심입니다.

Coffee coffee = new CafeLatte();
Coffee coffee = new Americano();
Coffee coffee = new ColdBrew();

위와같이 Coffee 인터페이스를 구현한 구현체라면 모두 동일하게 인스턴스화 할 수 있으며 동일한 목적하에 사용할 수 있습니다.

 

interface 는 동일한 목적을 가진 것들의 구현을 강제하여 서로 같게 할 수 있습니다. 

interface에 정의되어있는 추상적인 것들을 모두 동일하게 사용할 수 있습니다. 

 

java 다형성에 대해 알아봤습니다. 다형성은 객체지향개념에서 가장 중요한 개념이라 생각합니다.

어떤 객체든 추상적인 것에 의존하라 라는것을 기억하시기 바랍니다.

 

틀린점은 지적 부탁드리며, 읽어주셔서 감사합니다.

'JAVA > 객체지향프로그래밍' 카테고리의 다른 글

객체지향개념 캡슐화(Encapsulation)  (0) 2021.06.21