1일 1CS(Computer Science)

응집도와 결합도에 대해서 설명해주세요.

표자 2025. 5. 30. 10:06

🏗️ 응집도와 결합도: 좋은 코드의 핵심 원리

안녕하세요! 오늘은 백엔드 개발에서 꼭 알아야 할 응집도결합도에 대해 알아보겠습니다 😊

🤝 응집도(Cohesion)란?

응집도는 하나의 모듈 안에서 구성요소들이 얼마나 밀접하게 관련되어 있는지를 나타냅니다.

일상생활 예시 🏠

  • 높은 응집도: 화장실에는 변기, 세면대, 샤워기 등 모두 '위생'과 관련된 것들만 있음
  • 낮은 응집도: 화장실에 냉장고, TV, 책상이 함께 있다면? 🤔

Node.js 코드 예시

// ❌ 낮은 응집도 - 사용자 관련 기능이 뒤섞여 있음
class UserManager {
  validateEmail(email) { /* ... */ }
  sendEmail(to, subject) { /* ... */ }
  calculateTax(amount) { /* ... */ } // 왜 여기에?
}

// ✅ 높은 응집도 - 사용자 검증만 담당
class UserValidator {
  validateEmail(email) { /* ... */ }
  validatePassword(password) { /* ... */ }
}

🔗 결합도(Coupling)란?

결합도는 서로 다른 모듈들이 얼마나 많이 의존하고 있는지를 나타냅니다.

일상생활 예시 🚗

  • 높은 결합도: 자동차 엔진과 바퀴가 용접되어 있다면? 바퀴 교체 시 엔진까지 분해해야 함
  • 낮은 결합도: 볼트로 연결되어 있어서 바퀴만 쉽게 교체 가능 ✨

Next.js API 코드 예시

// ❌ 높은 결합도
const getUserData = async () => {
  const db = new MySQL(); // DB에 직접 의존
  return await db.query('SELECT * FROM users');
}

// ✅ 낮은 결합도
const getUserData = async (userRepository) => {
  return await userRepository.findAll(); // 인터페이스에 의존
}

🔒 캡슐화(Encapsulation)

객체의 내부 구현을 숨기고 필요한 부분만 외부에 노출하는 것입니다.

일상생활 예시 📱

스마트폰을 사용할 때 내부 회로를 몰라도 터치만으로 작동하죠? 이게 바로 캡슐화입니다!

React 컴포넌트 예시

// ✅ 캡슐화된 컴포넌트
const UserProfile = ({ userId }) => {
  const [user, setUser] = useState(null);
  
  // 내부 로직은 숨김
  const fetchUser = async () => { /* ... */ };
  
  // 필요한 UI만 노출
  return <div>{user?.name}</div>;
};

🎯 왜 중요할까요?

높은 응집도의 장점 ✨

  • 코드 이해하기 쉬움
  • 버그 찾기 쉬움
  • 재사용성 증가

낮은 결합도의 장점 🚀

  • 테스트하기 쉬움
  • 변경 시 다른 모듈에 영향 적음
  • 유지보수 용이

💡 실전 팁

1. 단일 책임 원칙 적용

각 모듈은 하나의 책임만 가져야 합니다.

2. 의존성 주입 활용

// Express.js에서 의존성 주입
app.get('/users', (req, res) => {
  const userService = new UserService(userRepository);
  // ...
});

3. 인터페이스 활용

TypeScript를 사용한다면 인터페이스로 결합도를 낮출 수 있습니다.

🎊 마무리

좋은 설계 = 높은 응집도 + 낮은 결합도 + 적절한 캡슐화

마치 잘 정리된 서랍처럼, 관련된 것들끼리 모아두고(높은 응집도), 서랍들 사이의 의존성은 최소화하며(낮은 결합도), 각 서랍의 내용물은 적절히 숨기는(캡슐화) 것이 좋은 코드의 비결입니다! 🗂️

이 원칙들을 지키면 변경에 유연하고 테스트하기 쉬운 코드를 만들 수 있어요. 여러분의 Next.js 프로젝트에서도 이 원칙들을 적용해보세요! 💪

 

 


 

응집도와 결합도에 대해서 설명해주세요.

백엔드와 관련된 질문이에요.

응집도(Cohesion) 는 모듈에 포함된 내부 요소들이 연관되어 있는 정도를 나타냅니다. 결합도(Coupling) 는 의존성의 정도를 나타내며, 다른 모듈에 대해 얼마나 많은 지식을 갖고 있는지를 나타냅니다.

 

응집도와 결합도는 변경과 관련이 깊으며, 일반적으로 좋은 설계란 높은 응집도와 낮은 결합도를 가진 모듈로 구성된 설계를 의미합니다. 객체의 행동에서 객체가 알고 있는 모든 정보를 사용하거나, 변경이 존재하는 경우 특정 모듈만 수정되면 응집도가 높다고 판단할 수 있습니다. 또한, 특정 모듈을 변경하는 경우에 다른 모듈도 변경해야 하는 상황에서는 결합도가 높다고 판단할 수 있습니다.

캡슐화의 정도가 응집도와 결합도에 영향을 미치는데요. 캡슐화를 지키면, 모듈 안의 응집도는 높아지고 모듈 사이의 결합도는 낮아집니다. 따라서, 응집도와 결합도를 고려하기 전에 먼저 캡슐화를 향상하기 위해 노력해야 합니다.

캡슐화는 무엇인가요? 😀

객체 내부의 세부적인 사항을 감추는 것을 캡슐화라고 합니다. 캡슐화의 목적은 변경하기 쉬운 객체를 만드는 것입니다. 캡슐화를 통해 객체 내부로의 접근을 제한하면 객체와 객체 사이의 결합도를 낮출 수 있기 때문에 설계를 더욱 쉽게 변경할 수 있습니다. 만약 캡슐화가 약화되어 있다면, 클라이언트 코드로 변경이 전파되어 변경이 쉽지 않을 수 있습니다. 그리고, 협력을 재사용하기 어려운 상황을 만들어낼 수 있는데요. 이러한 상황을 예방하기 위해서 캡슐화는 객체지향 프로그래밍에서 기본기로 여겨집니다.

728x90