객체지향 언어의 특성 중 하나인 다형성에 대해 배우는 강의입니다. 다형성이란 여러 가지 형태에 속할 수 있는 성질, 하나의 객체 인스턴스가 여러 가지 자료형을 가질 수 있는 것을 말하는데요. 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
연산자는 해당 인스턴스가 특정 인스턴스가 맞는지 확인할 수 있는 연산자이며 맞으면 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
객체지향 언어의 특성 중 하나인 다형성에 대해 배우는 강의입니다. 다형성이란 여러 가지 형태에 속할 수 있는 성질, 하나의 객체 인스턴스가 여러 가지 자료형을 가질 수 있는 것을 말하는데요. 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
연산자는 해당 인스턴스가 특정 인스턴스가 맞는지 확인할 수 있는 연산자이며 맞으면 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