정의
- 프로그램 언어 각 요소(상수, 변수, 식, 객체, 메소드 등)이 다양한 자료형에 속하는 것이 허가되는 성질
- "하나의 타입에 여러 객체를 대입할 수 있는 성질"
장점
- 기능을 확장하거나, 객체를 변경해야 할 때, 타입의 변경 없이 객체의 주입만으로 수정 가능
- 상속을 사용한다면, 중복 코드도 없앨 수 있다.
- 이는 객체 지향 설계와 가까워 질 수 있음
- 객체 지향 설계가 뭔데?
- 각 책임을 완수하는 객체들을 협력시켜 프로그램을 작성하는 것
- 유지 보수와 "확장"에 용이한 설계 패러다임
- 변화에 유연한 SW를 만들기 위해 사용!
다형성 구현 방법
1. 오버로딩
- 여러 종류의 타입을 받아들여 같은 기능을 수행하도록 함
- 요구사항 변경 시, 모든 메서드에서 수정을 해줘야함 :(
2. 오버라이딩
- 상위 클래스의 메서드를 하위 클래스에서 재정의 하는 것
- 추상 클래스 & 인터페이스
- 기능의 확장과 객체의 수정에 유연한 구조 가질 수 있음
실제 사용되는 구현 클래스가 변경되었음에도, 그 타입(추상화된 타입!)을 사용하는 코드가 영향을 받지 않는 것은 다형성 덕분!
정의
- 데이터/프로세스 등을 의미가 비슷한 개념이나 표현으로 정의해 나가는 과정 + 구현 상세는 감추기
- 사용자에게 불필요한 디테일을 감춤
- 객체에서 어떤 메서드만 어떻게 사용할 수 있는지 알고 있음
- 내부 동작까지는 사용하는 입장에서 몰라도 됨
- 인터페이스에 의존하고, 구체적인 구현에는 의존하지 않는 것
- 상세한 구현을 생각이 가능한 수준의 덩어리로 만드는 과정
장점
- 상세한 구현이 아닌, 공통된 개념과 관계에 집중할 수 있음
- 큰 수준에서 시스템을 이해할 수 있도록 함
- 각 클래스가 제공하는 기능은 개념적으로 완전히 동일하다!