마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

결합도가 강해진다 느슨해진다가 이해가 잘 안되네요..

0 추천
보통 interface나 추상클래스를 활용하면

클래스간의 결합도를 느슨하게 할 수 있다는 말들이 잇는데

또 그냥 A a = new A();이런식으로 객체를생성하면

결합도가 너무 강하다

이런말이 잇는데 이해가 잘 안됩니다...

조언 부탁드려요.
갸아악 (21,260 포인트) 님이 2013년 8월 7일 질문

2개의 답변

0 추천
 
채택된 답변
예전부터 님의 질문을 살펴본 사람으로써

최대한 쉽게 답변해 드리겠습니다.

 

abstract class A {

   public void doSomething();

}

 

interface IA {

  public void doNothing();

}

 

class B extends A implements IA {

  public void doSomething() { 동작1 }

  public void doNothing() { 아무것도 안함 }

}

 

class C extends A implements IA { // 결국 B를 상속받는것과 같지만 이해를 돕기 위해 이렇게 적습니다.

  public void doSomething() { 동작2 }

  public void doNothing() { 아무것도 안함... 은 훼이크다! }

}

 

이렇게 해 놓으면 경우에 따라

 

A variable;

IA variable2;

if (true) {

   variable = new B();

   variable2 = new C();

} else {

  variable = new C();

  variable2 = new B();

}

variable.doSomething();

variable2.doNothing();

 

처럼 작성하여 같은 변수로 조건에 따라 코드수를 절약하여 얼마든지 다른 동작을 하게 할수 있습니다.

이렇게 유동성 있는 형태를 느슨한 결합이라고 합니다.

하지만 이렇게 하면 다형성이라는 이슈가 생기는데.. 그것에 대해서는 스스로 알아 보시기 바랍니다.
퐁풍 (8,740 포인트) 님이 2013년 8월 7일 답변
갸아악님이 2014년 4월 2일 채택됨
0 추천
오늘 읽은 글이라 한번 설명해드리겠습니다.

토비 스프링 3.1 을 참고 했고. 1장에 나오는 내용입니다. 그림과 예제 코드가 있다면 쉽게 설명이 될텐데

글로만 가능할지 모르겠네요.

 

1. DAO : DB 에 정보를 넣고 뺴고 하는 모듈

DAO 가 하나 존재할때 그안에는 어떤 정보를 DB 와 통신하여 데이터를 넣고 뺼겁니다. CRUD 같은것을 하죠

CRUD 4개의 함수가 존재한다했을때 각각함수속에. DB 커넥션 로직이 들어갑니다.

그럼 4번 같은 코드가 중복되겠죠?

그럼 이것을 함수로 빼냅니다.(리팩토링-메소드추출기법)

 

2. DAO 를 배포한뒤 DB 커넥션을 각각 이용자마다 다르게 쓰려면?

DAO 를 만들어 회사에 팔았는데. 1에서 빼낸 커넥션 함수가. 삼성에선 오라클을 쓰고. LG 는 MYSQL 을쓰면

커넥션 함수부분을 각각 수정해야겠죠.

그럼 커넥션함수를 추상메서드로 구현합니다. 그럼 DAO 를 상속받은 SAMSUNGDAO 등은..커넥션함수를 세부구현해야죠.

(이것은 팩토리메서드/템플릿메서드 패턴입니다)

하지만 상속을 쓰는것은 결합도가 강합니다. 객체지향에서 결합도가 강한것은 좋지 않습니다.

개방폐쇠원칙(낮은결합도 높은응집도).

DAO 가 또 다른목적으로 다른곳에서 상속에 이용된다면. 한모듈에 여러책임을 가지는 구조가 되며. 여러 기능/책임을 가진 슈퍼클래스를 상속받은 서브클래스는 역시나 같은 여러기능/책임을 똑같이 상속 받게 될겁니다.

이것이 결합도가 강한것이죠. 위가 바뀌면 아래도 커지는. 영향이 아래로 아래로 퍼지게 되는.

 

3.그리하여 낮은 결합도를 위해 인터페이스를 도입합니다.

커넥션함수로 커넥션오브젝트를 가져오는것을 상속이 아닌 인터페이스로 가져오는겁니다.

 

책을 보시면 더욱 잘설명이 될텐데. 꼭한번보시길
AND chobo (4,690 포인트) 님이 2013년 8월 7일 답변
이야 님께서 답글 달아주신거 우연치않게 다시 보게 되엇는데
명댓글입니다.
늦었지만 감사드립니다.
...