객체 지향 프로그래밍(OOP)이란?

ubiies·2023년 5월 12일
0

JAVA

목록 보기
1/4

스프링을 들어가기 전에, 가장 핵심적인 개념인 객체 지향에 대하여 자세히 짚고 넘어가자!


Object Oriented Programming 객체 지향 프로그래밍

먼저 객체 지향 프로그래밍에 대한 개념을 짚기 전에 절차 지향 프로그래밍과 무슨 차이가 학교 가는 과정을 통해 알아보자.

  • 절차 지향 프로그래밍 과정
  1. 아침에 일어났다. (시작)
  2. 밥을 먹는다.
  3. 씻는다.
  4. 옷을 입는다.
  5. 버스를 탄다.
  6. 학교에 도착한다. (끝)

  • 객체 지향 프로그래밍 과정

절차 지향 프로그래밍의 경우 시작과 끝이 정해져 있고, 시간의 흐름에 따라 진행된다. 하지만 객체 지향 프로그래밍은 시간에 구애받지 않고 객체 간의 협력을 통해 구현된다.

말로만 들었을 땐 절차 지향이 훨씬 간편해 보이지만, 사실적으로 표현이 가능한 것은 바로 객체 지향 프로그래밍이다. 현실은 모두 객체로 이루어져 있기 때문에 우리에게 친숙한 것은 바로 객체 지향 프로그래밍이다.

따라서 객체 지향 프로그래밍이란?

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


객체 지향 프로그래밍의 장점

  1. 유연하고 변경에 용이하다.
  2. 코드의 재사용성이 용이하다.
  3. 대규모 프로젝트에 적합하다.
  4. 유지보수가 쉽다.

객체 지향 프로그래밍의 특징

  1. 추상화
  2. 캡슐화
  3. 상속
  4. 다형성
    • 오버로딩
    • 오버라이딩

SOLID 좋은 객체 지향 설계의 5가지 원칙

클린 코드로 유명한 로버트 마틴이 제시한 좋은 객체 설계의 5가지 원칙에 대하여 정리해보자.

1. SRP, 단일 책임의 원칙

  • 하나의 클래스는 하나의 책임만 가져야 한다.
    문맥과 상황에 따라, 책임에 대한 범위를 적절하게 조절하는 것이 중요하다. 코드의 변경이 있을 때 파급 효과가 적을수록 단일 책임 원칙을 잘 따른 것이다.
    ex) UI 변경, 객체의 생성과 사용을 분리

2. OCP, 개방-폐쇄의 원칙

  • 소프트웨어 요소는 확장에 열려있고, 변경에 닫혀있어야 한다.하지만 확장을 위해서는 당연히 기존 코드의 변경이 필요하다. 바로 이럴 때 객체 지향 프로그래밍의 특징인 다형성을 활용해야 한다.

3. LSP, 리스코프 원칙

  • 프로그램의 객체는 프로그램의 정확성을 깨트리지 않으면서 하위타입의 인스턴스를 바꿀 수 있어야 한다.
    다형성에서 하위 클래스는 인터페이스 규약을 다 지켜야 한다는 것, 다형성을 지원하기 위한 원칙으로 인터페이스로 구현한 구현체를 믿고 사용하려면 이 원칙이 필요하다.

4. ISP, 인터페이스 분리 원칙

  • 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
    이 원칙을 지킬 시 인터페이스가 명확해지고, 대체 가능성이 높아지며 구현하기 쉬워진다.

5. DIP, 의존 관계 원칙

  • 프로그래머는 추상화에 의존해야하며, 구체화에 의존하면 안된다. 의존상 주입은 이 원칙을 따르는 방법 중 하나이다.
    쉽게 이야기해서 구현 클래스에 의존하지 말고 인터페이스에 의존하라는 말이다. 객체 세상도 클라이언트가 인터페이스에 의존해야 유연하게 구현체를 변경할 수 있다.

Spring과 객체 지향

스프링에서는 다형성이 매우 중요하며 다형성을 극대화하여 이용할 수 있도록 도와준다. 스프링에서 이야기하는 제어의 역전(IoC), 의존 관계 주입(DI)은 다형성을 활영하여 인터페이스와 객체, 즉 역할과 구현을 편리하게 다룰 수 있도록 지원한다.

정리

정리하자면, 객체 지향의 핵심은 바로 다형성이다.

0개의 댓글