[자바 무료 강의] 웰시코기는 개다 - 다형성 - 코드라떼
Lesson List button
코스자바로 배우는 프로그래밍
hamburger button
강의웰시코기는 개다 - 다형성최종수정일 2021-09-30
아이콘약 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("수영하다"); } }
copy

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

Bulldog bulldog = new Bulldog(); Dog dog = new BullDog(); // 또는 Retriever retriever = new Retriever(); Dog dog = new Retriever();
copy

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


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

그림

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; // 에러 발생, 개는 리트리버가 될 수 없다.
copy


instanceof 연산자

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

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

Output
root$
Lesson List button
코스자바로 배우는 프로그래밍
hamburger button
강의웰시코기는 개다 - 다형성최종수정일 2021-09-30
아이콘약 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("수영하다"); } }
copy

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

Bulldog bulldog = new Bulldog(); Dog dog = new BullDog(); // 또는 Retriever retriever = new Retriever(); Dog dog = new Retriever();
copy

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


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

그림

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; // 에러 발생, 개는 리트리버가 될 수 없다.
copy


instanceof 연산자

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

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

Output
root$