[자바 무료 강의] 웰시코기는 개다 - 다형성 - 코드라떼
Lesson List button
코스자바로 배우는 프로그래밍
hamburger button
강의웰시코기는 개다 - 다형성최종수정일 2021-11-21
아이콘약 6분

객체지향 언어의 특성 중 하나인 다형성에 대해 배우는 강의입니다. 다형성이란 여러 가지 형태에 속할 수 있는 성질, 하나의 객체 인스턴스가 여러 가지 자료형을 가질 수 있는 것을 말하는데요. is-a 관계를 생각해 보면 좀 더 쉽습니다. 이번 강의에서 다형성에 대해 부숴보죠.

추가 노트

다형성


객체지향 언어의 특성중 하나인 다형성에 대해서 알아봅시다.


다형성이란 여러가지 형태에 속할 수 있는 성질, 하나의 객체 인스턴스가 여러가지 자료형을 가질 수 있는 것을 말합니다.

다형성을 논할 때 is-a 관계에 대해서 익숙해져야 합니다.

  • 산소는 기체이다.기체는 산소이다.

  • 웰시코기는 개이다.개는 웰시코기이다.

  • Java는 프로그래밍 언어이다.프로그래밍 언어는 Java이다.

public class Dog {
    protected String color;

    public void bite() {
        System.out.println("깨물다");
    }

    public void bark() {
        System.out.println("짖는다");
    }
}

public class Bulldog extends Dog {

}

public class Retriever extends Dog {
    public void swim() {
        System.out.println("수영하다");
    }
}

Bulldog 클래스는 Dog 클래스를 상속받고 있고, Retriever 클래스도 Dog 클래스를 상속받고 있습니다. 이러한 상속 구조가 있을 때 다형성을 이용할 수 있습니다.

Bulldog bulldog = new Bulldog();
Dog dog = new BullDog();

// 또는

Retriever retriever = new Retriever();
Dog dog = new Retriever();

다형성을 가지고 무엇을 할 수 있을까요? 라고 궁금하실 수 있습니다. 이 부분은 이후의 강의에서 추상화라는 개념과 결합이 되므로 그때 더 자세히 얘기가 진행됩니다.


자식 객체는 부모 객체의 요소를 가지고 메모리 공간에 적재

그림

Retriever 인스턴스를 생성 시 부모 클래스인 Dog 클래스의 요소도 포함된 만큼 메모리를 할당하여 적재됩니다. 그리고 참조 자료형 변수는 단순히 인스턴스에 접근할 수 있는 메모리 주소만 저장합니다.


객체의 형 변환

강의에서 이미 설명했듯이 인스턴스를 생성할 때 자료형을 따라가는 것이 아니라 new 키워드를 이용하여 생성한 인스턴스가 메모리에 적재됩니다.

객체의 형 변환은 '형 변환하는 자료형으로 사용하겠다' 라는 '의미'만 존재합니다.

인스턴스 자체가 변환되는 것이 아닙니다. 그 이유는 참조 자료형은 단순히 참조값만 저장하기 때문에 실제로는 생성했던 인스턴스를 사용하기 때문입니다.

Dog dog = new Retriever();
Retriever retriever = (Retriever)dog;
retriever.swim();

Dog dog = new Bulldog();
Bulldog bulldog = (Bulldog)dog;

Dog dog = new Dog();
Retirever retriever = (Retriever)dog; // 에러 발생, 개는 리트리버가 될 수 없다.

instanceof 연산자

(변수 또는 인스턴스) instanceof (클래스이름)

instanceOf 연산자는 해당 인스턴스가 특정 인스턴스가 맞는지 확인할 수 있는 연산자이며 맞으면 true, 틀리면 false를 반환합니다.

Dog dog = new Retriever();

System.out.println(dog instanceof Retriever); // true
System.out.println(dog instanceof Dog); // true
System.out.println(dog instanceof Bulldog); // false
도전자 질문
작성된 질문이 없습니다
이용약관|개인정보취급방침
알유티씨클래스|대표, 개인정보보호책임자 : 이병록
이메일 : cs@codelatte.io
사업자등록번호 : 824-06-01921
통신판매업신고 : 2021-성남분당C-0740
주소 : 경기도 성남시 분당구 대왕판교로645번길 12, 9층 24호
파일
파일파일
Root
파일

Output
root$
Lesson List button
코스자바로 배우는 프로그래밍
hamburger button
강의웰시코기는 개다 - 다형성최종수정일 2021-11-21
아이콘약 6분

객체지향 언어의 특성 중 하나인 다형성에 대해 배우는 강의입니다. 다형성이란 여러 가지 형태에 속할 수 있는 성질, 하나의 객체 인스턴스가 여러 가지 자료형을 가질 수 있는 것을 말하는데요. is-a 관계를 생각해 보면 좀 더 쉽습니다. 이번 강의에서 다형성에 대해 부숴보죠.

추가 노트

다형성


객체지향 언어의 특성중 하나인 다형성에 대해서 알아봅시다.


다형성이란 여러가지 형태에 속할 수 있는 성질, 하나의 객체 인스턴스가 여러가지 자료형을 가질 수 있는 것을 말합니다.

다형성을 논할 때 is-a 관계에 대해서 익숙해져야 합니다.

  • 산소는 기체이다.기체는 산소이다.

  • 웰시코기는 개이다.개는 웰시코기이다.

  • Java는 프로그래밍 언어이다.프로그래밍 언어는 Java이다.

public class Dog {
    protected String color;

    public void bite() {
        System.out.println("깨물다");
    }

    public void bark() {
        System.out.println("짖는다");
    }
}

public class Bulldog extends Dog {

}

public class Retriever extends Dog {
    public void swim() {
        System.out.println("수영하다");
    }
}

Bulldog 클래스는 Dog 클래스를 상속받고 있고, Retriever 클래스도 Dog 클래스를 상속받고 있습니다. 이러한 상속 구조가 있을 때 다형성을 이용할 수 있습니다.

Bulldog bulldog = new Bulldog();
Dog dog = new BullDog();

// 또는

Retriever retriever = new Retriever();
Dog dog = new Retriever();

다형성을 가지고 무엇을 할 수 있을까요? 라고 궁금하실 수 있습니다. 이 부분은 이후의 강의에서 추상화라는 개념과 결합이 되므로 그때 더 자세히 얘기가 진행됩니다.


자식 객체는 부모 객체의 요소를 가지고 메모리 공간에 적재

그림

Retriever 인스턴스를 생성 시 부모 클래스인 Dog 클래스의 요소도 포함된 만큼 메모리를 할당하여 적재됩니다. 그리고 참조 자료형 변수는 단순히 인스턴스에 접근할 수 있는 메모리 주소만 저장합니다.


객체의 형 변환

강의에서 이미 설명했듯이 인스턴스를 생성할 때 자료형을 따라가는 것이 아니라 new 키워드를 이용하여 생성한 인스턴스가 메모리에 적재됩니다.

객체의 형 변환은 '형 변환하는 자료형으로 사용하겠다' 라는 '의미'만 존재합니다.

인스턴스 자체가 변환되는 것이 아닙니다. 그 이유는 참조 자료형은 단순히 참조값만 저장하기 때문에 실제로는 생성했던 인스턴스를 사용하기 때문입니다.

Dog dog = new Retriever();
Retriever retriever = (Retriever)dog;
retriever.swim();

Dog dog = new Bulldog();
Bulldog bulldog = (Bulldog)dog;

Dog dog = new Dog();
Retirever retriever = (Retriever)dog; // 에러 발생, 개는 리트리버가 될 수 없다.

instanceof 연산자

(변수 또는 인스턴스) instanceof (클래스이름)

instanceOf 연산자는 해당 인스턴스가 특정 인스턴스가 맞는지 확인할 수 있는 연산자이며 맞으면 true, 틀리면 false를 반환합니다.

Dog dog = new Retriever();

System.out.println(dog instanceof Retriever); // true
System.out.println(dog instanceof Dog); // true
System.out.println(dog instanceof Bulldog); // false
도전자 질문
작성된 질문이 없습니다
이용약관|개인정보취급방침
알유티씨클래스|대표, 개인정보보호책임자 : 이병록
이메일 : cs@codelatte.io|운영시간 09:00 - 18:00(평일)
사업자등록번호 : 824-06-01921|통신판매업신고 : 2021-성남분당C-0740
주소 : 경기도 성남시 분당구 대왕판교로645번길 12, 9층 24호(경기창조혁신센터)
파일
파일파일
Root
파일

Output
root$