Programming

[언그래머]일흔여섯번째 아티클_객체 지향....... 결합도......

송코딩 songcoding 2024. 3. 22. 07:59

안녕하세요 ㅇㅕㄹㅓㅂㅜㄴ

ㄱㅣㅁㅅㅗㅇㅇㅏㅇㅣㅂㄴㅣㄷㅏ

 

 

ㅋㅋㅋㅋㅋㅋ

아침부터 애가 이상하다 생각하시겠지만, 맞긴합니다.

 

ㅋㅋㅋㅋ없는 짤이 없네 @구글

 

 

 

 

1️⃣ 여러분 김송아입니다.

2️⃣ ㅇㅕㄹㅓㅂㅜㄴ ㄱㅣㅁㅅㅗㅇㅇㅏㅇㅣㅂㄴㅣㄷㅏ

 

자, 이 두가지에서 어떤 차이점이 느껴지시나요?

 

 

 

같이 붙어있어야 하는 형태가 떨어져있으니 불편하고,
누구랑 붙어야 할 지도 헷갈립니다.

 

이게 바로 제가 말씀드리고 싶은 결합도 입니다.

 

 

 

 

⚠️ 결합도란?

영어로 커플링 (Couplering💍 아니고 Coupling입니다ㅋㅋㅋ)

서로에게 의존하는 정도를 나타냅니다. 

 

의존한다는 말, 제가 굉장히 좋아하는 말이죠.
저와 같이 스프링 공부를 해보신 분들은 아시겠지만
의존한다는 말은 그냥 '사용한다'라고 바꿔서 말하면 된다고 늘 주장하는 한 사람이기 때문입니다.

 

 

 

 

 

그럼 서로 의존하는 정도가 많아진다는 뜻은?

맞아요. 서로를 많이 사용한다는 말로 바꿔서 읽을 수 있겠죠.

 

 

많이 사용한다?🤔

자, 일상 생활에서 생각해볼게요.

제가 핸드폰에 의존한다고 표현해봅시다.

그렇다는 말은 저는 핸드폰을 많이 사용한다는 말일 거고,

 

그럼 여러분! 일반적으로 이 뜻은..

제가 핸드폰을 하나의 기능만 사용한다는 것 보다

"핸드폰의 여러 기능들을 많은 시간동안 사용할 가능성"이 더 높을 것 같은데 어떻게 생각하시나요?

 

운동할 때도 핸드폰의 A 어플을 사용하고

영상을 볼 때도 핸드폰의 B 어플을 사용하고

명상을 할 때도 핸드폰의 C 어플을 사용하는 것이죠.

 

 

 

그럼 한번 더 생각해보죠!

여러분 제가 운동하는 방법이 바뀌면 A 어플을 그대로 사용할 까요? 

 

아니겠죠. 저의 바뀐 운동법에 맞는 D 어플을 찾아 헤매거나

A 어플에 저에게 맞는 새로운 기능을 만들어 달라고 사장님을 찾아가 건의 드리거나(?)

일겁니다.

 

 

즉, 제가 바뀌면 핸드폰이 가진 기능들, 어플들도 바뀌어야 한다는 겁니다.

 

 

 

이게 바로 결합도입니다.

 

결합도가 높으면, 한쪽이 바뀌면 같이 바뀌어야 한다는 거에요.

 

 

Q. 혹시 그럼 객체 지향 세상에서 결합도가 높으면 좋을까요 여러분? 🤔

 

우리 세상에 빗대어 생각해보죠. 왜냐구요?

제가 말하고, 제가 좋아하는 또 하나의 문장이 있거든요.

 

이 세상은 모두 객체이다. 우리 세상은 객체 지향이다!

 

 

 

그럼 이건.. 우리 인생도 자세히 보면 힘들다는 뜻인가😇ㅋㅋㅋㅋ

 

 

 

하나의 객체 안에서도 생각해볼게요,

만약 김송아라는 객체가 가진 기능이 X,Y,Z 있다고 치고

이 기능 세가지는 서로 연결되어 있다고 보겠습니다.

 

예를 들어..👀
김송아가 X 일을 수행한 결과를 Y에 사용하고,
Y 일을 수행한 결과를 Z에 사용한다고 생각해볼까요?

 

 

혹시 장단점이 느껴지시나요?

일단 단점부터 얘기해볼게요,

 

세가지의 일이 서로 영향을 주고 있으니,

👍🏻 하나가 바뀌면 다른 두개도 바뀌어야 할 가능성이 높아보입니다.

👎🏻 반대로, 결합이 되어 있으니 끈끈해보여요. 하나의 루틴처럼 사용할 수 있어서 편해보이네요.

 

 

 

 

Q. 자 여러분, 그럼 우리는 무조건 X, Y, Z를 서로 의존하지 못 하게 떼어내야 한다고 주장할 수 있을까요?

그러기엔 서로 사용하기 때문에 주는 장점이 있어서, 당당하진 못할 것 같습니다.

 

 

바로 이 시선입니다🔥

 

객체 지향에서는 각 모듈들 끼리 서로 사용하는 정도에 따라 결합도가 높다고 표현합니다.

그런데 여러분? 만약 그 사용하는 정도가 정말 필요한 부분이라면요?

 

예를 들어 볼게요,

클린 코드를 지향하고자 복~잡한 조건문을 메소드로 추출해서 A 메소드가 B를 호출하게 되었다고 봅시다. 

public void A() {
    if B() {
        //
    }
}

public boolean B() {
    return _____;
}

 

 

 

Q. 여러분 이걸 결합도가 높다 라고 표현할 수 있을까요?

 

제가 생각하는 결합도는,

반드시 필요한 상황이라면 (위와 같은) 결합도가 높아서 불편하다는 표현보다는
딱 필요한 만큼의 결합도를 가진다고 말씀드리고 싶어요.

 

 

 

결합도가 높다는 것은 '불필요한 사용'이 많다는 뜻이라고 정의하고 싶달까요😉

 

만약 인터페이스, 캡슐화와 같은 객체 지향의 멋진 특징들을 이용해서 결합을 느슨하게 만들 수 있는 여지가 있다?

그럼 이건 지금 상태로는 '불필요한 사용'이 있다는 거니까 결합도가 높다 라고 표현할 수 있겠죠.

 

하지만 지금 상태로도 충분히 서로 딱 필요한 만큼만 사용, 결합하고 있으며

더이상 느슨하게 만들 여지가 없다면 저는 그건 낮은 결합도라고 본다는 겁니다!

 

 

 

물~론, 제 개인적인 의견이기 때문에 정답이라고 말씀드릴 수는 없겠죠.

하지만 저 뿐 아니라 여러분들께서 반드시 생각해보셔야 하는 부분이기에,

 

 

사실 이건 어제 헤어진 우리 30명의 부사수들(?)과 실시간 강의에서 얘기 나누던 내용에서 선정된 아티클 주제랍니다.

여러분!! 보고 있나 🥹

원래 지난 아티클이었어야 했는데, 한 회 늦어졌지만 그만큼 기다려주셔서 감사합니다🫶🏻

 

 

-

 

 

요즘 꽂힌 말 인데 여러분들이랑 공유 해도 되나요? (사실 안 물어보고 그냥 공유 하는 중)

 

아이러니 하게도

'언젠가 죽을 건데' 라는 한 미국 배우님의 말이 왜이리 힘이 되는지 모르겠어요.

 

막연한 끝이 있다는 생각에 슬프다고만 생각했는데,

이 생각이 되려 그 끝 뒤에는 내가 모르니까ㅋㅋㅋㅋ 하고 싶은 대로 다 하고 살아라 라는 뜻이랍니다ㅋㅋ

 

 

 

여러분들도 하고 싶은 거 다하고,

어떤 일에도 용기 나는 하루가 되셨으면 좋겠습니다.

 

저는 특히 술을 많이 먹으면 (?) 용기가 그렇게 나던데

그 용기는 다음날 숙취와 함께 사라지더라구요 하하😇

 

ㅋㅋㅋㅋㅋㅋ

 

 

맨정신에 용기가 샘솟는 그날에도,

여러분들과 함께 하기를 진심으로 바라며!

 

 

용기 있는 하루 되시길 바래요!

 

감사합니다.

김송아 드림