강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

자스비님의 프로필 이미지
자스비

작성한 질문수

오브젝트 - 기초편

3-1. 객체지향 설계 원칙

3-1 강의 질문입니다.

해결된 질문

작성

·

71

1

안녕하세요. 강의 너무 잘 듣고 있습니다.

궁금한 점이 생겨 질문을 드리게 되었는데요.

3-1강의 1:00에서 데이터가 하나의 모듈 안에 모여있으면 코드를 수정하기가 어렵다고 하셨는데, 이 부분이 잘 이해가 되지 않습니다.

지금까지 데이터와 프로세스를 서로 다른 모듈로 분리시킨 절차적인 방식에서 프로세스 로직을 데이터를 구현한 모듈로 이동시켜 하나의 모듈 안에 넣는 작업을 했는데, 이와 모순되는 것 같아서 혼동이 왔습니다.

말씀하신 내용이 모든 로직과 데이터를 설계없이 하나의 모듈에 모두 넣은 경우를 말씀하시는 걸까요?

감사합니다 :)

답변 2

1

조영호님의 프로필 이미지
조영호
지식공유자

자스비님 안녕하세요.

좋은 질문 남겨 주셔서 감사합니다.

 

지적하신 부분을 살펴보니 "프로세스와 데이터가 하나의 모듈 안에 모여 있으면 코드를 수정하기 어렵기 때문이죠 "이네요.

강의를 만들 때는 인지하지 못했는데 자스비님의 질문을 받고 보니 제가 잘못 설명한게 맞습니다.

이 부분은 먼저 사과드립니다.

 

말씀하신 것처럼 데이터와 로직이 서로 다른 모듈 안에 분리되어 있기 때문에 관련된 로직을 데이터로 옮겨 하나의 모듈 안에 두는 리팩터링을 수행했습니다.

문맥 상으로 "프로세스와 데이터가 하나의 모듈 안에 모여 있으면 코드를 수정하기 어렵기 때문이죠 "라는 문장은 두 가지중 하나로 수정하는게 맞습니다.

  • 모든 프로세스와 모든 데이터가 하나의 모듈 안에 모여 있으면 코드를 수정하기 어렵기 때문이죠.

  • 프로세스와 데이터가 하나의 모듈 안에 모여 있으면 코드를 수정하기 쉽기 때문이죠.

원래의 의도는 첫 번째 문장에 쓴 것처럼 관련없는 코드들이 하나의 모듈 안에 섞여 있으면 변경이 어렵기 때문에 서로 다른 모듈로 분리하는게 좋다라는 의미를 전달하고 싶었던 것인데 아예 다른 의미가 되어 버렸네요.

문맥의 흐름상으로 봤을 때는 두 번째 문장으로 설명하는게 더 자연스러워 보입니다.

 

이 부분은 다시 재녹음을 할 때 두 번째 문장으로 수정해서 다른 분들이 혼란스럽지 않도록 조치하겠습니다.

 

꼼꼼하게 학습하시고 해당 부분 지적해 주셔서 감사드립니다. 🙂

 

보시다가 이상한 부분이 있으면 언제라도 문의 부탁드릴게요.

 

불금 행복하게 보내세요!

자스비님의 프로필 이미지
자스비
질문자

답변 감사합니다~

즐거운 하루 보내세요!

0

안녕하세요, 인프런 AI 인턴입니다.

자스비님, 강의를 재미있게 들어주시고 질문까지 남겨주셔서 감사합니다. 질문하신 내용에 대해 상세하게 설명드리겠습니다.

3-1강에서 언급한 “데이터가 하나의 모듈 안에 모여있으면 코드를 수정하기가 어렵다”라는 내용은 객체지향 설계에서 잘못된 설계의 사례 중 하나를 지적하는 것입니다. 이때 ‘하나의 모듈’에 모든 데이터와 로직을 모으는 것은 시스템이 변경되거나 확장될 때 다양한 문제가 발생할 수 있음을 의미합니다.

핵심 개념: 높은 응집도와 낮은 결합도

  • 높은 응집도: 관련있는 기능이나 데이터는 함께 묶여지는 것이 이상적입니다. 이는 클래스나 모듈 내에 포함된 데이터와 기능이 얼마나 관련이 깊은지를 나타냅니다.

  • 낮은 결합도: 각 모듈이나 클래스가 서로 최소한의 상호작용으로 독립적인 기능을 수행할 수 있어야 합니다. 이렇게 설계되면 모듈 간의 의존성이 줄어들고, 수정 시 영향을 미치는 범위가 줄어듭니다.

혼동의 해결

자스비님이 말씀하신 절차적 방식에서의 데이터와 프로세스의 분리는 데이터를 중심으로 기능을 구현하는 절차적 프로그래밍의 특징입니다. 반면에 객체지향에서는 데이터를 조작하는 메소드를 데이터와 같은 객체에 포함시킴으로써 데이터를 캡슐화하고, 객체의 책임을 명확히하는 데 중점을 둡니다.

따라서, “모든 로직과 데이터를 설계 없이 하나의 모듈에 넣은 경우”가 아니라, 관련된 데이터와 그 데이터를 조작할 책임 있는 메소드가 함께 있다면 이는 객체지향의 장점을 살린 설계라고 할 수 있습니다. 중요한 것은 데이터와 로직이 의미있게 적절히 결합되어 있을 때, 클래스/모듈의 응집도가 높아지고 유연성과 재사용성이 높아집니다.

보다 구체적인 예제와 개념 이해를 돕기 위해 “객체지향 설계 원칙” 에서 더 깊게 다루고 있으니 참고해 주세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

자스비님의 프로필 이미지
자스비

작성한 질문수

질문하기