본문 바로가기
JavaScript/Spring

[spring 이해하기] spring framework 이해하기 1 - 결합도란?

by Alkaloid 2022. 1. 19.
반응형

프로그래밍을 하다보면 결합도나 응집도와 같은 단어를 많이 듣게 됩니다.

그럼 결합도와 응집도가 뭘까요?

 

결합도는 모듈과 모듈 상호 의존 정도

응집도는 모듈내 기능적인 응집 정도

라고 이야기 할수 있습니다.

 

그래서 이게 spring이랑 무슨 상관이 있는지? 라고 의문이 드실거예요.

spring은 이 결합도를 최소화하는데 목적이 있습니다.

예를 들어 볼께요.

main.java라는 파일안에 모든 코드가 다 들어있을때, DB쿼리 부분이 이상하면 해당 파일 자체를 수정해야 합니다.

그럼 여기서 main.java를 처음본 사람이 수정한다고 했을때, 유지보수 시간이 오래 걸리게 됩니다.

또한 하나를 수정함으로써 다른 문제가 발생할 수 있어요.

 

그렇기 때문에 spring은 mvc패턴을 적용하여 여러 파일로 나누어 효율적으로 관리를 하기 위해 사용합니다.

mvc패턴은 다음에 자세히 다뤄 보도록 할게요.

 

본론으로 들어가서!

 

결합도가 높으면 어떻게 될까? 

말로 설명하는거보다 코드로 보는게 이해가 빠르실거예요.

위의 코드를 보시면 SamsungTV라는 클래스를 만들었습니다.

그 클래스안에는 4개의 메소드가 존재하고, 각 메소드마다 다른 출력값을 가지고 있죠.

 

이와 비슷하게 LgTV를 만들어 볼께요.

LgTV라는 클래스를 만들었고, SamsungTV와 마찬가지로 4개의 메소드가 존재합니다.

다른점은 클래스명과 메소드가 다르죠.

 

그럼 tv시청을 원하는 user클래스도 하나 만들겠습니다.

user는 main코드로 위 클래스파일과는 다르게 생겼어요.

어디가 다른지 잘 보시면 public static void main(String[] args) 라는 것이 있습니다.

 

즉 이코드는 main코드라는 거예요.  프로그램이 여기서부터 시작을 합니다.

 

그럼 2개의 클래스와 1개의 main을 만들어 실행을 해볼까요?

아래와 같이 출력 물이 나오네요.

 

그런데, SamsungTV가 아니라 LgTV를 보고 싶다면 어떡해야 할까요?

main의 SamsungTV tv = new SamsungTV()를 LgTV로 바꾸고,

밑에 메소드 또한 LgTV에 작성했던 메소드로 바꾸겠습니다.

 

 

결과가 다르게 나옵니다.

사용자는 삼성tv에서 LgTV로 바꾸고 싶을뿐인데 main코드 대부분을 수정했습니다.

만약 사용자가 저만 있는게 아니라, 많은 사람들이 있다면? 클라이언트 모두를 수정해야 합니다.

 

이처럼 결합도가 높으면 유지보수하기 되게 힘들어 집니다.

다음은 결합도를 낮췄을때 같은 코드로 얼마나 간단하게 수정이 되는지 확인을 해보겠습니다.

 

 

반응형

 

반응형