Web/SrpingBoot

스프링과 객체 지향 프로그래밍 - 다형성 관점

나는나는용 2024. 4. 24. 00:51
728x90

객체 지향 프로그래밍

프로그램을 유연하고 변경이 용이하게 만들음. → 대규모 소프트웨어 개발에 많이 사용.

 

컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나,

여러개의 독립된 단위,

즉 "객체들의 모임"으로  파악하고자 하는 것.

 

각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있음.

 

역할과 구현의 분리

세상을,

역할 & 구현으로 구분해보자.

→ 세상이 단순해지고, 유연해지며, 변경도 편리해진다!

 

클라이언트에게는 다음의 장점이 있다.

  • 대상의 역할(인터페이스)만 알면 된다. (이거 자동차?ㅇㅇ 그럼 됐음. 운전 가능.)
  • 구현 대상의 내부 구조를 몰라도 된다. (내부구조 알아야만 운전을 할 수 있는게 아니니까)
  • 구현 대상의 내부 구조가 변경되어도 영향을 받지 않는다. (내부구조 바뀌어도 자동차 역할만 하면 됨)
  • 구현 대상 자체를 변경해도 영향을 받지 않는다. (k5나, 아반떼나~ 노상관)

 

자바 언어

역할 & 구현으로 구분해보자.

 

실세계의 '역할·구현'이라는 편리한 컨셉을, 다형성을 통해 객체 세상으로 가져올 수 있다.

이제, 자바 언어의 다형성을 활용하여 객체 세상으로 가져와보자.

 

역할 = 인터페이스

구현 = 인터페이스를 구현한 클래스, 구현 객체.

 

객체 설계시 역할과 구현을 명확히 분리하여 설계할것.

→ 역할(인터페이스)을 먼저 부여하고, 그 역할을 수행하는 구현 객체 만들것. (중요도 : 역할 >>>> 구현)

먼저, 인터페이스를 안정적으로 잘 설계할것.

 

위 분리를 통해 다음의 장점을 얻을 수 있다.

  • 유연하고, 변경이 용이하다.
  • 확장 가능한 설계.
  • 클라이언트에게 영향을 주지 않는 변경이 가능하다.

 

한계

역할(인터페이스) 자체가 변하면, 클라이언트, 서버 모두에 큰 변경이 발생한다.

ex) 자동차가 비행기가 된다?(기능, 운전기사,···) / 연극 자체가 변경된다?(대본,배우,···) / USB 인터페이스

∴ 인터페이스를 안정적으로 잘 설계하는 것이 중요하다.(변화가 없는 방식으로 설계, 변화있더라도 인터페이스 자체는 안흔들리게)

 

다형성

자바 언어의 다형성 = 객체지향의 꽃

 

{ 오버로딩 : 메서드를 여러개 정의한다. ("여러개 많이, 초과해서 로딩했다.") }

 

오버라이딩 : 메서드를 재정의한다. ("기능을 타서 넘어버린다.")

메서드 실행시 오버라이딩 된 메서드가 실행됨.

다형성으로 인터페이스를 구현한 객체를 실행 시점에 유연하게 변경 가능.

(물론, 클래스 상속 관계도 다형성, 오버라이딩 적용 가능.)

다형성의 본질

 

인터페이스를 구현한, 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.

클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경할 수 있다.

 

다형성 본질을 이해하려면 '협력'이라는 객체사이의 관계에서 시작해야한다.

 

객체의 협력 관계

혼자 있는 객체는 없다.

 

클라이언트 : 요청

서버 : 응답

 

수많은 '객체 클라이언트''객체 서버'는 서로 협력 관계를 가진다.

 

 

스프링과 객체 지향

'객체지향'에서는 '다형성'이 가장 중요하다.

'스프링'의 사용으로 '구현을 편리하게 변경'할 수 있다.

 

스프링다형성을 극대화해서 이용할 수 있게 도와준다(역할과 구현을 편리하게 다룰 수 있도록 지원한다.)

제어의 역전(IoC)의존관계 주입(DI)

 

 

 

 

근데 사실 다형성말고 중요한게 하나 더 있음ㅋ

그게 뭐냐면,,,

 

설계 원칙 다섯가지, 'SOLID'.....

는 다음편에~~

728x90