본문 바로가기
프로그래밍 패러다임/객체 지향 프로그래밍

OOP.2.상속과 다형성

by 시니성 2023. 7. 14.

이번 글에서 알아볼 객체지향의 특징은 상속과 다형성 입니다.

 

먼저 추상화와 캡슐화를 통해 정의한 객체(클래스)들은 다양한 관계를 갖게 되는데요.

그 중 상위와 하위 구조를 가지게 되는 하이어라키 구조에 속한 관계들이 있습니다.

 

상속은 대표적인 하이어라키 구조입니다.

여러 클래스들의 공통적이고 일반적인 특성을 추출해 좀 더 추상화 레벨이 높아 일반적인 상위 클래스로 정의 할 수 있습니다. 그 후 하위 클래스 정의시 중복되는 부분은 재정의 없이 상위 클래스의 필드와 메소드를 '상속'받아 사용할 수 있습니다.

JAVA에서는 Extends라는 키워드로 상속을 지원하고 단일 상속만을 지원합니다.

java는 상속을 편하게 지원해주는  super와 this라는 키워드를 제공함으로써 부모 클래스로 부터 물려받은 다양한 필드와 메소드를 편하게 참조해 사용할 수 있습니다.

 

다형성을 한마디로 표현 한다면 아래와 같습니다.

 

'하나의 형태로 다양한 표현(기능)이 가능하다'

다형성을 지원하는 개념인 오버 로딩(OverLoading, 이하 O/L)과 오버 라이딩(OverRiding, O/R)을 순서대로 알아보겠습니다.

먼저 O/L은 하나의 메소드명에 파라미터 값을 다르게 설정함으로서 다른 기능을 부여하는 것입니다.

O/R은 상위 클래스의 메소드를 재정의하거나 구현 함으로써 하나의 메소드형태로 다양한 기능을 표현하는 것 입니다. 상위클래스에서 기능을 구현하지 않고 하위클래스에서 반드시 구현하도록 O/R을 강제하는 메소드를 추상 메소드(Abstract Method)라고 부릅니다.

추상 메소드에서 추상이란 구체적인 기능은 정의하지않고 메소드명만 추상적으로 정의해놓은 상태를 의미합니다.

이러한 추상메소드가 포함된 클래스를 추상 클래스라고 부르며, 추상 메소드만으로 정의된 클래스를 인터페이스 라고 부릅니다.

 

인터페이스는 다양한 활용의 예가 있지만 한가지를 들어보자면, 전통적인 MVC패턴을 사용해 Web App을 만들 경우 컨트롤 레이어와 비즈니스 로직 레이어의 결합도를 떨어뜨림으로서 코드의 유지보수를 용이하게 만드는 경우가 있습니다.

인터페이스라는 하나의 형태를 통해 다양한 기능을 가진 구현체들을 만들 수 있는데, 컨트롤 레이어에서 인터페이스에 의존하게 함으로서 서비스 레이어의 구현체가 변경되더라도 컨트롤 레이어의 코드는 수정할 필요가 없도록 느슨한 결합을 유지하게 해줍니다.