본문 바로가기

프로그래밍언어/Java

[Java 기본] 좋은 객체 지향 프로그래밍이란?

객체 지향 프로그래밍


객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위 즉 "객체" 들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다. 

객체지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용됩니다. 

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

 

유연하고, 변경이 용이한 프로그램이란?


레고 블럭을 조립하듯이, 또는 컴퓨터 부품 갈아 끼우듯이 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 프로그램이다. 

그럼 어떻게 유연하고, 변경이 용이하게 프로그램을 개발해야 할까? 바로 다형성을 이용하면 된다. 

 

다형성 실세계 비유


역할과 구현으로 세상을 구분해보자. 역할은 인터페이스고 구현은 인터페이스를 구현한 객체이다. 

운전자와 자동차를 생각해보자. 

운전자는 K3를 타다가 아반떼로 차를 바꿔도 운전을 할 수 있다. 운전자라는 역할의 입장에서는 자동차를 바꿔도 운전자에게 영향을 주지 않는다. 자동차라는 역할이 있기 때문이다. 자동차 역할의 인터페이스를 따라서 자동차들이 이를 구현했기 때문이다. 

자동차를 바꾼다고 해도 이런 변경이 운전자에게 영향을 주지 않는다. 역할과 구현을 구분하면 자동차를 무한대로 확장할 수 있다. 

 

 

역할과 구현을 분리


역할과 구현으로 구분하면 세상이 단순해지고, 유연해지며 변경도 편리해진다. 

  • 클라이언트는 대상의 역할만 알면 된다. 
  • 클라이언트는 구현 대상의 내부 구조를 몰라도 된다. 
  • 클라이언트는 구현 대상의 내부 구조가 변경되어도 영향을 받지 않는다. 
  • 클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다. 
  • 역할 = 인터페이스, 구현 = 인터페이스를 구현한 클래스 
  • 객체 설계시 역할(인터페이스)를 먼저 부여하고, 그 역할을 수행하는 구현 객체 만들기

 

 

* 인프런 '김영한의 실전 자바 - 기본편'을 참고하여 작성하였습니다.