Java | 객체 지향 프로그래밍과 다형성

Lumpen·2025년 4월 13일
0

Java

목록 보기
17/38

객체 지향의 특징

  • 추상화
  • 캡슐화
  • 상속
  • *다형성

프로그램을 여러개의 독립된 단위(객체)들의 모임으로 파악한다
각 객체는 서로 메시지를 주고 받아 데이터를 처리할 수 있다(협력)

유연하고 변경이 용이하기 떄문에 대규모 소프트웨어 개발에 많이 사용된다

객체를 사용하는 다른 객체를 클라이언트라고 한다

역할과 구현을 분리

프로그램을 역할과 구현으로 구분하면 단순해지고 유연해져 변경이 용이하다

  • 클라이언트는 대상의 역할(인터페이스)만 알면 된다
  • 클라이언트는 구현 대상의 내부 구조를 몰라도 된다
  • 클라이언트는 구현 대상의 내부 구조가 변경되어도 영향을 받지 않는다
  • 클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다

자바에서의 구현

다형성을 활용하여 역할은 인터페이스, 구현은 인터페이스의 구현 객체(클래스)

객체는 항상 협력하는 대상이 되고
메시지로 소통한다는 것을 항상 기억해야 한다

클라이언트가 요청을 하면
인터페이스를 호출하고
인터페이스를 구현하여 의존하고 있는 다형성 객체의 메서드가 실행된다

인터페이스는 껍데기라면서 왜 인터페이스에 의존한다고 표현하는지 궁금했는데
실제 사용도 메모리 관점에서도 다형성에 의해 인터페이스에 의존한다라고 표현하는게 정확하네..

객체지향의 장점

  • 실세계에서의 역활과 구현을 다형성을 통해 객체로 설계하고, 만들 수 있다
  • 유연하다
  • 확장 가능한 설계
  • 외부에 영향을 주지 않는 변경 가능

이런 장점들을 위해서는 인터페이스를 안정적으로 잘 설계하는 것이 중요하다

객체 지향

  • 다형성이 가장 중요하다
  • 디자인 패턴 대부분은 다형성을 활용하는 것이다
  • 스프링의 핵심인 제어의 역전(IoC), 의존성 주입(DI) 또한 다형성
  • 다형성을 잘 활용해야 한다

다형성 - 역할과 구현

운전자는 자동차의 모델이 뭔지 몰라도
자동차를 운전할 수 있다

운전자가 차를 바꿔도 다른 차를 운전할 수 있듯이 하는 것

아반뗴를 운전하는데 아반뗴 면허증을 발급받는 것이 아니라
자동차 운전면허증을 발급 받는 것과 같다

운전자 -> 자동차(인터페이스) 의 관계가 있고
아반떼, K3 등은 자동차 인터페이스를 구현한 구현 객체가 된다
자동차라는 인터페이스를 구현만 하면
운전자와 자동차의 관계는 어떤 차종이 와도 계속 유지될 수 있다

이게 다형성의 강력한 장점이다

역할과 구현을 분리하는 것의 한계

  • 역할 자체가 변경되면 클라이언트와 서버 모두 큰 변경 발생

의존 관계 주입

다른 인스턴스에서 제공하는 set 메서드를 사용하여
객체의 참조를 다른 객체에서 하도록 하는 것

profile
떠돌이 생활을 하는. 실업자, 부랑 생활을 하는

0개의 댓글