엔지니어로 가는 길

Java 코드로 객체 지향과 절차 지향의 차이 살펴보기 본문

프로그래밍

Java 코드로 객체 지향과 절차 지향의 차이 살펴보기

탐p슨 2021. 10. 2. 15:01
728x90

목차

Introduction

절차적인 도형 클래스

객체적인 도형 클래스

객체 지향적인 코드 VS 절차 지향적인 코드

 

Reference

Introduction

객체는 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개한다.

자료 구조*는 자료를 그대로 공개하며 별다른 함수는 제공하지 않는다.

*여기서 말하는 자료 구조는 List나 Set과 같은 인터페이스가 아니라 정말 어떤 자료를 저장하기만 하는 클래스를 말하는 것 같다(이 글은 클린 코드의 일부 내용을 발췌한 글이다). C 언어의 struct와 유사할 것 같다. 이 글 내내 자료 구조는 이러한 뜻을 가진다.

구체적인 예시를 통해서 살펴보자.

절차적인 도형 클래스

 

위의 코드에서 도형 클래스는 절차적이다.

Geometry 클래스는 두 가지 도형 클래스를 다룬다. 각 도형 클래스는 간단한 자료 구조다. 즉, 아무 메서드도 제공하지 않는다. 도형이 동작하는 방식은 Geometry 클래스에서 구현한다.

만약 Geometry 클래스에 둘레 길이를 구하는 perimeter() 함수를 추가하고 싶다면도형 클래스는 아무 영향도 받지 않는다. 도형 클래스에 의존하는 다른 클래스도 마찬가지다.

반대로 새 도형을 추가하고 싶다면? Geometry 클래스에 속한 모든 함수를 고쳐야 한다.

객체적인 도형 클래스


Geometry 클래스는 필요 없다. 그러므로 새 도형을 추가해도 기존 함수에 아무런 영향을 미치지 않는다.

하지만 새 함수를 추가하고 싶다면 도형 클래스를 전부 고쳐야 한다.

객체 지향적인 코드 VS 절차 지향적인 코드

객체와 자료 구조는 근본적으로 양분된다.

자료 구조를 사용하는 절차적인 코드는 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽다. 반면, 객체 지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다.

반대쪽도 참이다.

절차적인 코드는 새로운 자료 구조를 추가하기 어렵다. 그러려면 모든 함수를 고쳐야 한다. 객체 지향 코드는 새로운 함수를 추가하기 어렵다. 그러려면 모든 클래스를 고쳐야 한다.

다시 말해, 객체 지향 코드에서 어려운 변경은 절차적인 코드에서 쉬우며, 절차적인 코드에서 어려운 변경은 객체 지향 코드에서 쉽다.

복잡한 시스템을 짜다 보면 새로운 함수가 아니라 새로운 자료 타입이 필요한 경우가 생긴다. 이때는 클래스와 갹체 지향 기법이 적합하다. 반면, 새로운 자료 타입이 아니라 새로운 함수가 필요한 경우도 생긴다. 이때는 절차적인 코드와 자료 구조가 적합하다.

모든 것이 객체라는 생각은 미신이다. 때로는 단순한 자료 구조와 절차적인 코드가 가장 적합한 상황도 있다.

Reference

클린 코드(로버트 C. 마틴) 6장 객체와 자료 구조

728x90

'프로그래밍' 카테고리의 다른 글

Origin, SOP 그리고 CORS  (0) 2021.10.12
퍼사드 패턴(Facade Pattern)이란?  (0) 2020.10.06
Common Gateway Interface(CGI)란 무엇인가  (0) 2020.08.18
Comments