콘텐츠로 이동

2021 04 13

2021-04-13

다형성

  • 정의 - 프로그램 언어 각 요소(상수, 변수, 식, 객체, 메소드 등)이 다양한 자료형에 속하는 것이 허가되는 성질 - "하나의 타입에 여러 객체를 대입할 수 있는 성질"
  • 장점 - 기능을 확장하거나, 객체를 변경해야 할 때, 타입의 변경 없이 객체의 주입만으로 수정 가능 - 상속을 사용한다면, 중복 코드도 없앨 수 있다. - 이는 객체 지향 설계와 가까워 질 수 있음 - 객체 지향 설계가 뭔데? - 각 책임을 완수하는 객체들을 협력시켜 프로그램을 작성하는 것 - 유지 보수와 "확장"에 용이한 설계 패러다임 - 변화에 유연한 SW를 만들기 위해 사용!
  • 다형성 구현 방법 1. 오버로딩 - 여러 종류의 타입을 받아들여 같은 기능을 수행하도록 함 - 요구사항 변경 시, 모든 메서드에서 수정을 해줘야함 :( 2. 오버라이딩 - 상위 클래스의 메서드를 하위 클래스에서 재정의 하는 것 - 추상 클래스 & 인터페이스 - 기능의 확장과 객체의 수정에 유연한 구조 가질 수 있음
  • 실제 사용되는 구현 클래스가 변경되었음에도, 그 타입(추상화된 타입!)을 사용하는 코드가 영향을 받지 않는 것은 다형성 덕분!

추상화

  • 정의 - 데이터/프로세스 등을 의미가 비슷한 개념이나 표현으로 정의해 나가는 과정 + 구현 상세는 감추기 - 사용자에게 불필요한 디테일을 감춤 - 객체에서 어떤 메서드만 어떻게 사용할 수 있는지 알고 있음 - 내부 동작까지는 사용하는 입장에서 몰라도 됨 - 인터페이스에 의존하고, 구체적인 구현에는 의존하지 않는 것 - 상세한 구현을 생각이 가능한 수준의 덩어리로 만드는 과정
  • 장점 - 상세한 구현이 아닌, 공통된 개념과 관계에 집중할 수 있음 - 큰 수준에서 시스템을 이해할 수 있도록 함 - 각 클래스가 제공하는 기능은 개념적으로 완전히 동일하다!