본문 바로가기
스터디/오브젝트

1장 - 객체, 설계

by 검은도자기 2023. 2. 26.

개요

티켓 판매 애플리케이션을 구현 후 이 코드에 어떤 문제가 있으며 어떻게 해결하는지에 대해 소개합니다.

 

 

무엇이 문제일까?

어떤 문제점이 있는지 알려주기 위해 로버트 마틴이라는 사람이 말한 소프트웨어 모듈이 가져야 하는 세 가지 기능에 대하여 설명해 줍니다.

 

모듈이란?

크기와 상관없이 클래스나 패키지, 라이브러리와 같이 프로그램을 구성하는 임의의 요소를 의미합니다.

 

모든 소프트웨어 모듈에는 세 가지 목적이 있습니다.

 

첫 번째 목적은 실행 중에 제대로 동작하는 것

 

두 번째 목적은 변경을 위해 존재하는 것 → 대부분의 모듈은 생명주기 동안 변경되기 때문에 간단한 작업만으로도 변경이 가능해야 합니다.

 

세 번째 목적은 코드를 읽는 사람과 의사소통하는 것 → 모듈은 특별한 훈련 없이도 개발자가 쉽게 읽고 이해할 수 있어야 합니다.

 

앞에 작성한 코드는 필요한 기능을 오류 없이 정확하게 수행하고 있기에 제대로 동작해야 한다는 제약은 만족하나 변경 용이성(변경에 취약한 코드)과 읽는 사람과의 의사소통(예상을 빗나가는 코드)이라는 목적을 만족시키지 못합니다.

 

 

어떻게 개선을 할까?

책에서 제안하는 방식은 캡슐화를 사용하여 객체를 자율적인 존재가 되도록 설계를 변경하면 된다고 합니다.

 

캡슐화란 무엇인가?

개념적이나 물리적으로 객체 내부의 세부적인 사항을 감추는 것을 캡슐화라고 부릅니다.

 

캡슐화를 통해 객체 내부로의 접근을 제한하면 객체와 객체 사이의 결합도를 낮출 수 있기 때문에 설계를 좀 더 쉽게 변경할 수 있게 됩니다.

 

 

절차지향 vs 객체지향

절차적 프로그래밍이란?

프로세스와 데이터를 별도의 모듈에 위치시키는 방식

 

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

데이터와 프로세스가 동일한 모듈 내부에 위치하도록 프로그래밍하는 방식

 

왜 갑자기 프로그래밍 방식을 설명할까?

개인적인 생각은 수정 전 코드가 절차적 프로그래밍 방식으로 되어 있습니다.

절차적 프로그래밍은 프로세스가 필요한 모든 데이터에 의존해야 한다는 근본적인 문제점 때문에 변경에 취약할 수밖에 없습니다.

이것을 개선한 방식이 객체지향 방식이기 때문에 나온 게 아닐까 싶습니다.

 

 

객체지향 설계란?

소프트웨어를 구성하는 모든 객체들이 자율적으로 행동하는 설계 방식을 말합니다.

훌륭한 객체지향 설계의 핵심 중 하나는 캡슐화를 이용해 의존성을 적절히 관리함으로써 객체 사이의 결합도를 낮추는 것입니다.

 

우리는 오늘 완성해야 하는 기능을 구현하는 코드를 짜야하는 동시에 내일 쉽게 변경할 수 있는 코드를 짜야합니다.

데이터와 프로세스를 하나의 덩어리로 모으는 것은 훌륭한 객체지향 설계로 가는 첫걸음이며, 진정한 객체지향으로 나아가는 길은 협력하는 객체들 사이의 의존성을 적절하게 조절함으로써 변경에 용이한 설계를 만드는 것입니다.

 

 

마무리

오늘은 오브젝트 책을 스터디하면서 제가 중요하다고 생각한 부분을 제 입맛에 맞춰 정리를 해보았습니다.

1장을 읽고 느낀 점은 코드를 작성할 때 절차지향의 단점들을 고려하며 짜야 나중에 유지보수하기 편하겠구나 하고 느꼈습니다. 

이번 포스팅은 마무리하면서 다음 포스팅에서 뵙겠습니다.

 

 

참고

http://www.yes24.com/Product/Goods/74219491

'스터디 > 오브젝트' 카테고리의 다른 글

6장 - 메시지와 인터페이스  (0) 2023.04.17
5장 - 책임 할당하기  (0) 2023.04.10
4장 - 설계 품질과 트레이드오프  (0) 2023.03.28
3장 - 협력, 책임, 역할  (2) 2023.03.12
2장 - 협력, 객체, 클래스  (0) 2023.03.05