본문 바로가기
코딩log/Spring Framework

[Spring Framework]스프링과 객체지향

by 벨크 2023. 1. 8.
반응형

spring.io

객체지향 프로그래밍(Object-Oriented Programming)이란?

앞서 스프링의 핵심 개념이 좋은 객체지향 프로그래밍(Object-Oriented Programming)을 도와주는 프레임워크라고 했는데요. 그렇다면 객체지향이란 무엇일까요? 객체지향 프로그래밍의 정의를 위키에서 찾아보면 다음과 같습니다.

 

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

객체지향 프로그래밍을 공부할 때 가장 많이 듣는 이야기는 "이 세상의 모든 개념은 객체화 할 수 있다." 였습니다. 개념을 객체화 할 수 있다는게 좀 모호한 말인데요. 조금 단순하게 생각하자면, 세상에 존재하는 모든 사물과 추상 구조를 모두 객체라는 형태로 데이터 타입화 시키고, 이를 활용해 프로그래밍 할 수 있는 것이 객체지향 프로그래밍이라고 할 수 있습니다.

객체지향의 핵심

이 세상 모든 것을 객체화 시켜 프로그래밍을 하는 것이 객체 지향 프로그래밍이라면, 객체를 설계할 때 가장 중요한 것은 무엇일까요?어떤 객체인든 유연하고, 변경이 용이해야 하는 것입니다. 이를 다형성(polymorphism) 이라고 합니다.다형성의 핵심은 "역할(인터페이스)과 구현(실제 구현 객체)"을 구분하는 것인데요. 이 둘을 구분해 놓으면 코드의 구현이 바뀌어도 역할(인터페이스)는 유지가 됩니다. 따라서 구현의 내부구조가 바뀌어도 사용자(클라이언트)의 코드를 고칠 필요가 없어지는 것이죠. 따라서 인터페이스를 잘 설계하는 것이 중요합니다.

스프링과 객체지향

그렇다면 실제로 객제지향 프로그래밍을 할 때, 다형성은 얼마나 지켜질 수 있을까요?지키기도 어렵고, 지키려고 하면 엄청나게 많은 노력이 필요합니다.

스프링은 이를 내부적으로 구현하여 많은 노력 없이 다형성을 극대화 시켜주는 프레임워크입니다.

마지막으로 다형성과 좋은 객체지향 설계의 5가지 원칙에 대해 알아보겠습니다.

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

https://www.freecodecamp.org
좋은 객체지향 설계를 위한 5가지 원칙을 줄여서 SOLID 라고 하는데요. 간단하게 하나하나 알아보겠습니다.

  • SRP(The Single Responsibility Principle): 단일 책임 원칙. 특정 객체는 하나의 일만 수행해야 합니다. 그래야 객체가 변경이 되었을 때, 다른 객체나 프로그램에 영향이 없습니다. 객체가 변경되었을 때 파급이 적으면, 단일 책임 원칙을 잘 지키고 있는 것이라고 볼 수 있습니다.
  • OCP(The Open-Closed Principle): 개방ㆍ폐쇄 원칙. 객체는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 바로 다형성을 지켜야한다는 얘기입니다. 인터페이스와 구현을 구분해서 생각하면 알기 쉽습니다. 구현(확장)에는 열려 있으나, 인터페이스(변경)는 닫혀 있어야합니다.
  • LSP(The Liskov Substitution Principle): 리스코프 치환 원칙. 특정 클래스의 서브 클래스는 특정 클래스와 치환 될 수 있어야 합니다. 하위 타입의 클래스를 구현할 때, 인터페이스 규약을 지켜야 한다는 의미로 볼 수 있습니다.
  • ISP(The Interface Segregation Principle): 인터페이스 분리 원칙. 특정 기능만 수행하는 인터페이스 여러개가 범용 기능을 하는 인터페이스 보다 좋다는 원칙입니다.
  • DIP(The Dependency Inversion Principle): 의존관계 역전 원칙. 객체는 추상화에 의지해야지, 구체화에 의존하면 안된다는 원칙입니다. 특정 객첵를 사용하는 사용자(Client)가 객체의 인터페이스에 의존을 해야지, 구현에 의존을 하면 안된다는 원칙입니다.
반응형

댓글