개발자들은 의존성, 연관 관계에 대한 이야기를 흔하게 들을 수 있습니다. 저는 이 용어에 익숙하지 않을 때 많이 헷갈렸던 것 같습니다. 여러 가지 관계에 대해 다이어그램으로 표현하는 방법이 다양해서 혼란스러웠는데요. 저와 같은 경험을 하시는 분들이 계실 것 같아서 클래스의 다양한 관계들 중 연관 관계부터 정리해보려고 합니다. 만약 명확히 정리가 되어있지 않으시다면 이 글이 도움이 되실 거예요!
클래스 의존성이란?
클래스와 클래스 사이에 의존성을 가진다는 것이 무엇인지 생각해 봅시다.
“A 클래스는 B 클래스에 의존한다.”
이 문장이 의미하는 건 무엇일까요? 개발자로서 공부를 하다 보면 굉장히 자주 마주치는 문장입니다. 그렇기에 깔끔하게 정리하고 넘어갈 필요가 있습니다. 쉽게 설명해 보겠습니다. 클래스 A를 설계할 때 클래스 B를 사용해서 만든다고 가정해볼게요. 그러면 클래스 A는 클래스 B가 없으면 구현할 수가 없겠죠? 그러면 클래스 A는 클래스 B에 의존성을 갖고 있는 것입니다. 다르게 말하면 클래스 A가 클래스 B를 참조하고 있는 것이구요. 간단하죠? 예시 코드를 한 번 보겠습니다.
class A {
private final B obj;
A (B obj) {
this.obj = obj;
}
String nameOfB() {
return obj.getName();
}
}
class B {
String name;
B (String name) {
this.name = name;
}
String getName() {
return name;
}
}
위 코드에서 클래스 A는 클래스 B의 인스턴스를 생성자의 인자로 받아서 사용하고 있습니다. 클래스 A 안에서 클래스 B의 인스턴스를 생성하든, 메서드의 인자로 클래스 B의 인스턴스를 받아서 사용하든 간에, 클래스 A가 클래스 B를 사용하고 있으므로 클래스 B가 없으면 안 되는 상태입니다. 클래스 A는 클래스 B에 의존하고 있는 게 틀림없습니다.
클래스 의존성과 관계 표현
클래스 A가 클래스 B에 의존한다는 것이 무엇을 의미하는 지는 알게 되었습니다. 이제 두 클래스가 서로 맺고 있는 관계에 대해서 얘기해 볼 차례인데요. 관계는 크게 연관/상속/의존 관계로 나뉘어집니다.
예시 코드와 같은 경우를 “클래스 A는 클래스 B와 연관 관계에 있다” 라고 말합니다. 클래스 A가 클래스 B의 참조 변수를 필드로 가지고 있는 상태를 말하는데요. 그림으로 표현하면 아래와 같습니다.
클래스 A가 클래스 B의 참조 변수를 필드로 갖고 있음을 그림으로 간단히 표현하고 싶을 때 위와 같이 그려주면 됩니다.
이런 걸 클래스 다이어그램이라고 합니다. 화살촉의 방향으로 의존성의 방향을 나타내고, 화살촉의 모양(▷, >, ◇, … )과 선의 모양(점선, 실선)으로 다양한 관계를 나타냅니다. 종류가 많기 때문에 자주 쓰이는 것들 위주로 알아두는 것이 좋은데, 연관 관계는 매우 자주 등장합니다. 공부하다가 이런 그림이 나오면 예시로 작성된 코드의 형태를 떠올려 보도록 합시다.
※ 참고로 책을 읽거나 다른 사람과 의사소통을 하다 보면, 반드시 의미 구분이 필요한 상황이 아닌 경우 실선인지 점선인지에 따라 달라지는 의미를 굳이 나누어 표현하지 않는 경우도 많습니다. 불필요하게 자세한 표현은 오히려 듣는 사람에게 혼란스러움을 줄 수도 있기 때문입니다. 그림을 그리는 궁극적인 목적은 의사소통을 원활하게 하기 위함이라는 사실을 기억하세요! 여러 책에서 저자의 편의에 따라 간략히 표현하고 있는 경우들이 있기 때문에 이 사실을 알고 계신다면 당황하지 않을 수 있으실 거예요.
명료한 글이네요.
좋게 봐주셔서 감사합니다! 🙂