본문 바로가기
OOP

[객체지향과 스프링의 이해] 0. Intro

by 민휘 2023. 5. 30.

이 글은 2023 GDSC Sookmyung Core Member Session을 텍스트로 정리한 것입니다. (사실 대본 작성하는 김에 쓴거예요-!!) 영상으로 보고 싶으신 분들은 이 링크를 참고해주세요. 대부분의 내용은 조영호 님의 <객체지향의 사실과 오해>, <오브젝트>, 이일민 님의 <토비의 스프링 vol1>을 참고했습니다.

 


 

소개글

 

안녕하세요. <객체지향과 스프링에 대한 이해>라는 주제로 세션을 진행하였습니다. 이 세션은 객체지향의 가치와 목적을 다루고, 객체지향적인 코드를 얻기 위해서 어떤 시도를 할 수 있는지 알아봅니다. 그리고 객체지향이라는 가치가 스프링에서 어떤 의미를 가지는지, 스프링을 제대로 사용하기 위해서는 어떻게 코드를 작성해야하는지 등을 다룹니다.

 

이 세션은 코드로 이해하는 객체지향, 객체지향으로 이해하는 스프링이라는 두 가지 주제로 구성되며, 첫번째 주제에서는 절차지향적인 코드를 객체지향적으로 개선해나가는 과정에서 객체지향의 핵심 개념과 기법을 알아봅니다. 두번째 주제에선 앞에서 이해한 객체지향이라는 가치를 어떻게 스프링이 활용하고 우리에게 제공하는지 알아봅니다.

 

(아직 경험이 많지 않은지라 예제 코드가 부족할 수 있습니다. 피드백 환영!!🫶)

 

Intro - 패러다임

 

본격적인 내용에 들어가기 앞서, 패러다임이라는 용어에 대해 생각해보려고 합니다. 오늘 다룰 주제가 OOP, 객체지향 프로그래밍 패러다임이기 때문입니다.

 

패러다임은 칼 세이건이 그의 저서 <과학혁명의 구조>에서 처음 제시한 용어입니다. (이번 발표를 준비한다고 이 책을 읽어봤는데요, 2장까지 읽고 재미 없어서 덮었답니다) 패러다임은 과학적 이론 체계가 변화하는 과정을 설명하기 위한 용어이지만, 오늘날에는 어떤 한 시대 사람들의 견해나 사고를 근본적으로 규정하고 있는 테두리로서의 인식의 체계, 또는 사물에 대한 이론적인 틀이나 체계를 의미하는 개념을 뜻합니다. 즉, 사회 구성원들이 공유하는 가치관을 가리키는 단어입니다.

 

패러다임이 사회 구성원이 공유하는 가치관이라면, 프로그래밍 패러다임도 쉽게 연상할 수 있습니다. 프로그래머들이 공유하는 가치관입니다. 프로그래머들은 많은 일을 하지만, 대부분은 코드를 작성하는 일을 합니다. 그래서 프로그래밍 패러다임은 주로 코드의 좋고 나쁨을 판단하는 기준을 제시하는 가치관입니다. 같은 프로그래밍 패러다임을 공유한다는 것은 코드를 바라볼 때 같은 기준을 가지고 평가한다는 뜻이 됩니다.

 

우리가 살펴볼 객체지향 프로그래밍 패러다임도 여기에 속합니다. 객체지향 외에도 절차지향형, 함수형, 도메인, 비동기 등 다양한 패러다임이 존재합니다. 이 패러다임은 각기 다른 가치를 지향합니다. 재미있는 점은 과학적 패러다임은 서로를 대체하는 방식으로 발전하지만, 프로그래밍 패러다임은 서로 공존할 수 있다는 점입니다. 절차지향적인 C에 객체지향적인 클래스를 도입한 C++, 전통적인 객체지향 언어이지만 함수형 문법을 도입한 Java 등이 떠오릅니다. 최근에 나온 프로그래밍 언어는 다양한 상황에서도 사용할 수 있도록 다중 패러다임을 지원합니다. JVM 계열의 언어인 Kotlin은 객체지향, 함수형, 명령형, 선언형, 병행 프로그래밍을 지원한다네요. 인프라 구성에 많이 사용되는 GO는 명령형, 함수형, 객체지향, 병렬 프로그래밍을 지원합니다.

 

그렇다면 객체지향 패러다임이 제시하는 좋은 코드의 기준은 무엇일까요? 바로 “객체”를 지향한다는 것입니다. 이 무슨 네이버 블로그 같은 허무맹랑 발언인가요? 객체지향 패러다임은 애플리케이션의 기능을 작게 쪼개 객체들에 할당하고, 이 객체들의 상호 작용으로 애플리케이션의 기능을 완성합니다. 객체지향적인 가치를 지키는 코드는 결국 잦은 요구사항 변경과 수정을 유연하게 수용할 수 있으며, 확장 가능한 설계가 가능해집니다. 객체지향을 이해하면 확장성을 중요하게 생각하는 시스템의 설계 기법을 이해하는데 도움이 됩니다.