먼저 다형성의 사전적 의미를 알아보...자.
대체로 아래와 같은 내용으로 다형성을 설명하고 있다.
프로그램 언어의 각 요소들(상수, 변수, 식, 오브젝트, 함수, 메소드 등)이 다양한 자료형(type)에 속하는 것이 허가되는 성질을 가리킨다.
by.위키피디아
다형성이란 하나의 객체가 또 다른 여러 객체로 구현되어 실행되는 것을 말한다.
맞는 말들이다. 맞는 말들이긴한데... 이게 뭔가... 와 닿지 않는다. 🤔
솔직히 위키피디아 설명은 읽을 수록 더 헷갈리는 것 같다. 🤯
추상적인 단어로 다형성을 설명하려고 해서 그런것 같다. 개발자는 코드로 보는 게 편하니, 좀 더 실제적인 예시로 다형성을 살펴보자. 🤭
"하나의 클래스를 상속받아 여러 클래스를 만든다." 사실 엄청 쉬운 예시이고 실무에서도 누구나 흔하게 사용할 수 있는 방식인데, 이게 다형성이다.
자동차를 상속받아서 현대차와 기아차를 만든 이것 ㅎㅎ
class Car { ... }
class Hyundai extends Car { ... }
class Kia extends Car { ... }
Car의 기능과 성질을 이어 받아서, 서로 다른 클래스가 되었다. 이렇게 구현 가능한 것을 다형성이라고 한다.
이번엔 뭔가 실무스러운 예시를 살펴보자.
UserRepository
라는 사용자의 데이터에 대한 인터페이스가 있고, 이것을 MySQL로 구현했다.
근데 갑자기 팀장님이 PostgreSQL을 쓴다고 한다.
그렇다면, 구현체를 다시 개발해야한다. 근데 다시 MySQL로 돌아갈 수도 있다고 한다.
그러면... 2개 다 구현해놓자. ㅎ
뭐 이런 상황이 주어졌다고 가정해보자. ㅎㅎㅎ 그러면 하나의 인터페이스로 2개의 구현체가 만들어진다. 이게 다형성이다.
즉, 하나의 개념을 받아서 서로 다른 N개의 개념이 만들어지는 것 을 다형성이라고 하는 것이다.
interface UserRepository {
public createUser()
public updateUser()
public deleteUser()
public getUser()
}
class UserRepositoryMySQL implements UserRepository {
@Override
createUser() { ... }
...
@Override
getUser() { ... }
}
class UserRepositoryPostgre implements UserRepository {
@Override
createUser() { ... }
...
@Override
getUser() { ... }
}
다형성이라는 개념은 오랫동안 내 머리에서 떠돌기만 하고 잘 와 닿지 않던 개념이다. 🤭
그래서 내가 쉽게 이해해보고자 이렇게 글을 썼고, 내가 쉽게 이해한다면 분명히 다른 사람에게도 조금은 도움이 될 수도 있지 않을까 싶다 ㅎㅎㅎ