목차
반응형
01. 결합도가 높은 프로그램 - BAD
- 결합도가 높으면 유지보수가 어려움

1) 일종의 DAO클래스
java > xyz.itwill01.old > HelloMessageObject.java
package xyz.itwill01.old;
//객체간의 결합도가 높은 프로그램 - 개발자가 직접 객체 만듦
public class HelloMessageObject {
//일종의 DAO메소드
public String getHelloMessage() {
return "Hello!!!";
}
java > xyz.itwill01.old > HiMessageObject.java
package xyz.itwill01.old;
//객체간의 결합도가 높은 프로그램 - 개발자가 직접 객체 만듦
public class HiMessageObject {
//일종의 DAO메소드
public String getHiMessage() {
return "Hi!!!";
}
}
2) 일종의 Service클래스
java > xyz.itwill01.old > MessagePrint.java
package xyz.itwill01.old;
//일종의 Service클래스의 메소드
//=> Service: 다수의 DAO클래스를 가져다 쓰는 Service클래스 = 모듈화 프로그램 (대형프로그램에 적절)
public class MessagePrint {
//객체와 객체간의 결합도를 매우 높게 만드는 방법임 ..
//=> 이렇게 만들면 기존에 사용했던 1번 메소드를 2번 메소드로 새로 만들어야 함
//1.
public void helloMessagePrint() {
HelloMessageObject object = new HelloMessageObject();
String message = object.getHelloMessage();
System.out.println("message = "+message);
}
//2.
public void hiMessagePrint() {
HiMessageObject object = new HiMessageObject();
String message = object.getHiMessage();
System.out.println("message = "+message);
}
}
3) 일종의 요청처리
java > xyz.itwill01.old > MessagePrintApp.java

package xyz.itwill01.old;
//객체간의 결합도가 높은 프로그램
public class MessagePrintApp {
//일종의 요청처리 메소드
public static void main(String[] args) {
MessagePrint print = new MessagePrint();
//print.helloMessagePrint();
print.hiMessagePrint();
}
}
02. 결합도가 낮은 프로그램 - GOOD
1) 일종의 DAO클래스

(부모) src.main.java > xyz.itwill02.factory > MessageObject.java
package xyz.itwill02.factory;
//인터페이스를 상속받은 클래스는 반드시 인터페이스에 작성된 모든 추상메소드를 오버라이드 선언해야함
//=> 인터페이스를 상속받은 킄래스에 메소드 작성 규칙 제공- 인터페이스 : 작업명세서 역할 (반드시 어떤 일을 해야한다는 작업을 명시를 한 서류)
//인터페이스로 참조변수를 생성하면 참조변수에는 인터페이스를 상속받은 모든 자식클래스의 객체 저장 가능
//=> 인터페이스로 생성된 참조변수로 추상메소드를 호출하면 참조변수에 저장된 자식클래스 객체의
//오버라이드 메소드 호출 - 오버라이드에 의한 다형성 : 객체 간의 결합도 감소 - 유지보수의 효율성 증가
public interface MessageObject {
String getMessage();
}
(자식) src.main.java > xyz.itwill02.factory> HelloMessageObject.java
package xyz.itwill02.factory;
//Factory 클래스에 의해 생성되어 제공되는 클래스는 반드시 인터페이스를 상속받아 작성
//다형성을 이용해 결합도 떨어뜨리기
//객체간의 결합도가 낮은 프로그램
public class HelloMessageObject implements MessageObject{
//일종의 DAO메소드
@Override
public String getMessage() {
return "Hello!!!";
}
}
(자식) src.main.java > xyz.itwill02.factory > HiMessageObject.java
package xyz.itwill02.factory;
//Factory 클래스에 의해 생성되어 제공되는 클래스는 반드시 인터페이스를 상속받아 작성
//다형성을 이용해 결합도 떨어뜨리기
//객체간의 결합도가 낮은 프로그램
public class HiMessageObject implements MessageObject{
//일종의 DAO메소드
@Override
public String getMessage() {
return "Hi!!!";
}
}
2) 💖팩토리클래스 - 대신 객체 생성하는 역할
src.main.java > xyz.itwill02.factory > MessageObjectFactory.java
package xyz.itwill02.factory;
//Factory 디자인 패턴을 이용하여 작성된 클래스 - Factory 클래스 또는 Provider 클래스
//=> 프로그램 개발에 필요한 객체를 생성하여 제공하는 기능의 클래스 - 컨테이너(Container)
//싱글톤 디자인패턴을 가짐
public class MessageObjectFactory {
private static MessageObjectFactory _factory;
private MessageObjectFactory() {
// TODO Auto-generated constructor stub
}
static {
_factory = new MessageObjectFactory();
}
public static MessageObjectFactory getFactory() {
return _factory;
}
//Factory 클래스에 의해 제공될 객체를 구분하기 위한 상수(Constant)
public static final int HELLO_MSG=1;
public static final int HI_MSG=2;
//매개변수로 전달받은 값을 비교하여 프로그램 개발에 필요한 객체를 생성하여 반환하는 메소드
public MessageObject getMessageObject(int messageObject) {
MessageObject object = null;
switch (messageObject) {
case HELLO_MSG:
object=new HelloMessageObject();
break;
case HI_MSG:
object=new HiMessageObject();
break;
}
return object;
}
}
3) 일종의 Service클래스
src.main.java > xyz.itwill02.factory > MessagePrint.java
package xyz.itwill02.factory;
//객체와 객체간의 결합도가 낮음
//일종의 Service클래스의 메소드
//=> Service: 다수의 DAO클래스를 가져다 쓰는 Service클래스 = 모듈화 프로그램 (대형프로그램에 적절)
public class MessagePrint {
public void messagePrint() {
//객체를 직접 생성하여 메소드 호출 - 객체간의 결합도가 높아 유지보수의 효율성 감소
//MessageObject object = new HelloMessageObject();
//프로그램 작성에 필요한 객체를 Factory 클래스로부터 제공받아 메소드 호출
// => IoC(Inversion of Controll) - 제어의 역행 : 대신 누군가가 만들어주세요~
// => 객체 간의 결합도를 낮춰 유지보수의 효율성 증가
//MessageObject object = MessageObjectFactory.getFactory().getMessageObject(1);
MessageObject object = MessageObjectFactory.getFactory().getMessageObject(2);
//인터페이스로 생성된 참조변수의 추상메소드를 호출한 경우 참조변수에 저장도니 자깃 클래스
//객체의 오버라이드 메소드 호출 - 묵시적 객체 형변환 : 오버라이드에 의한 다형성
String message = object.getMessage();
System.out.println("message = "+message);
}
}
4) 일종의 요청처리
java > xyz.itwill02.factory > MessagePrintApp.java

package xyz.itwill02.factory;
//객체간의 결합도가 낮은 프로그램
public class MessagePrintApp {
//일종의 요청처리 메소드
public static void main(String[] args) {
MessagePrint print = new MessagePrint(); //원래는 팩토리에게 달라고 해야함
print.messagePrint();
}
}
반응형
'framework > spring IOC(제어의 역행)' 카테고리의 다른 글
[springIOC] 6. DI | 자동주입 | 자동으로 Inject 하는 법 (0) | 2024.07.28 |
---|---|
[springIOC] 5. DI | 수동주입 | Constructor Injection & Setter Injection (0) | 2024.07.28 |
[springIOC] 4. DI | 수동주입 | 집합객체로 의존성 주입해 객체 생성하는법 (0) | 2024.07.27 |
[springIOC] 3. 스프링 Bean 클래스 생성법 | DL | 룩업기능 (feat. ApplicationContext 객체) (0) | 2024.07.27 |
[springIOC] 2. 결합도가 매우 낮은 프로그램 - 스프링 컨테이너의 역할 및 장점, 스프링빈 (0) | 2024.07.26 |
반응형
01. 결합도가 높은 프로그램 - BAD
- 결합도가 높으면 유지보수가 어려움

1) 일종의 DAO클래스
java > xyz.itwill01.old > HelloMessageObject.java
package xyz.itwill01.old;
//객체간의 결합도가 높은 프로그램 - 개발자가 직접 객체 만듦
public class HelloMessageObject {
//일종의 DAO메소드
public String getHelloMessage() {
return "Hello!!!";
}
java > xyz.itwill01.old > HiMessageObject.java
package xyz.itwill01.old;
//객체간의 결합도가 높은 프로그램 - 개발자가 직접 객체 만듦
public class HiMessageObject {
//일종의 DAO메소드
public String getHiMessage() {
return "Hi!!!";
}
}
2) 일종의 Service클래스
java > xyz.itwill01.old > MessagePrint.java
package xyz.itwill01.old;
//일종의 Service클래스의 메소드
//=> Service: 다수의 DAO클래스를 가져다 쓰는 Service클래스 = 모듈화 프로그램 (대형프로그램에 적절)
public class MessagePrint {
//객체와 객체간의 결합도를 매우 높게 만드는 방법임 ..
//=> 이렇게 만들면 기존에 사용했던 1번 메소드를 2번 메소드로 새로 만들어야 함
//1.
public void helloMessagePrint() {
HelloMessageObject object = new HelloMessageObject();
String message = object.getHelloMessage();
System.out.println("message = "+message);
}
//2.
public void hiMessagePrint() {
HiMessageObject object = new HiMessageObject();
String message = object.getHiMessage();
System.out.println("message = "+message);
}
}
3) 일종의 요청처리
java > xyz.itwill01.old > MessagePrintApp.java

package xyz.itwill01.old;
//객체간의 결합도가 높은 프로그램
public class MessagePrintApp {
//일종의 요청처리 메소드
public static void main(String[] args) {
MessagePrint print = new MessagePrint();
//print.helloMessagePrint();
print.hiMessagePrint();
}
}
02. 결합도가 낮은 프로그램 - GOOD
1) 일종의 DAO클래스

(부모) src.main.java > xyz.itwill02.factory > MessageObject.java
package xyz.itwill02.factory;
//인터페이스를 상속받은 클래스는 반드시 인터페이스에 작성된 모든 추상메소드를 오버라이드 선언해야함
//=> 인터페이스를 상속받은 킄래스에 메소드 작성 규칙 제공- 인터페이스 : 작업명세서 역할 (반드시 어떤 일을 해야한다는 작업을 명시를 한 서류)
//인터페이스로 참조변수를 생성하면 참조변수에는 인터페이스를 상속받은 모든 자식클래스의 객체 저장 가능
//=> 인터페이스로 생성된 참조변수로 추상메소드를 호출하면 참조변수에 저장된 자식클래스 객체의
//오버라이드 메소드 호출 - 오버라이드에 의한 다형성 : 객체 간의 결합도 감소 - 유지보수의 효율성 증가
public interface MessageObject {
String getMessage();
}
(자식) src.main.java > xyz.itwill02.factory> HelloMessageObject.java
package xyz.itwill02.factory;
//Factory 클래스에 의해 생성되어 제공되는 클래스는 반드시 인터페이스를 상속받아 작성
//다형성을 이용해 결합도 떨어뜨리기
//객체간의 결합도가 낮은 프로그램
public class HelloMessageObject implements MessageObject{
//일종의 DAO메소드
@Override
public String getMessage() {
return "Hello!!!";
}
}
(자식) src.main.java > xyz.itwill02.factory > HiMessageObject.java
package xyz.itwill02.factory;
//Factory 클래스에 의해 생성되어 제공되는 클래스는 반드시 인터페이스를 상속받아 작성
//다형성을 이용해 결합도 떨어뜨리기
//객체간의 결합도가 낮은 프로그램
public class HiMessageObject implements MessageObject{
//일종의 DAO메소드
@Override
public String getMessage() {
return "Hi!!!";
}
}
2) 💖팩토리클래스 - 대신 객체 생성하는 역할
src.main.java > xyz.itwill02.factory > MessageObjectFactory.java
package xyz.itwill02.factory;
//Factory 디자인 패턴을 이용하여 작성된 클래스 - Factory 클래스 또는 Provider 클래스
//=> 프로그램 개발에 필요한 객체를 생성하여 제공하는 기능의 클래스 - 컨테이너(Container)
//싱글톤 디자인패턴을 가짐
public class MessageObjectFactory {
private static MessageObjectFactory _factory;
private MessageObjectFactory() {
// TODO Auto-generated constructor stub
}
static {
_factory = new MessageObjectFactory();
}
public static MessageObjectFactory getFactory() {
return _factory;
}
//Factory 클래스에 의해 제공될 객체를 구분하기 위한 상수(Constant)
public static final int HELLO_MSG=1;
public static final int HI_MSG=2;
//매개변수로 전달받은 값을 비교하여 프로그램 개발에 필요한 객체를 생성하여 반환하는 메소드
public MessageObject getMessageObject(int messageObject) {
MessageObject object = null;
switch (messageObject) {
case HELLO_MSG:
object=new HelloMessageObject();
break;
case HI_MSG:
object=new HiMessageObject();
break;
}
return object;
}
}
3) 일종의 Service클래스
src.main.java > xyz.itwill02.factory > MessagePrint.java
package xyz.itwill02.factory;
//객체와 객체간의 결합도가 낮음
//일종의 Service클래스의 메소드
//=> Service: 다수의 DAO클래스를 가져다 쓰는 Service클래스 = 모듈화 프로그램 (대형프로그램에 적절)
public class MessagePrint {
public void messagePrint() {
//객체를 직접 생성하여 메소드 호출 - 객체간의 결합도가 높아 유지보수의 효율성 감소
//MessageObject object = new HelloMessageObject();
//프로그램 작성에 필요한 객체를 Factory 클래스로부터 제공받아 메소드 호출
// => IoC(Inversion of Controll) - 제어의 역행 : 대신 누군가가 만들어주세요~
// => 객체 간의 결합도를 낮춰 유지보수의 효율성 증가
//MessageObject object = MessageObjectFactory.getFactory().getMessageObject(1);
MessageObject object = MessageObjectFactory.getFactory().getMessageObject(2);
//인터페이스로 생성된 참조변수의 추상메소드를 호출한 경우 참조변수에 저장도니 자깃 클래스
//객체의 오버라이드 메소드 호출 - 묵시적 객체 형변환 : 오버라이드에 의한 다형성
String message = object.getMessage();
System.out.println("message = "+message);
}
}
4) 일종의 요청처리
java > xyz.itwill02.factory > MessagePrintApp.java

package xyz.itwill02.factory;
//객체간의 결합도가 낮은 프로그램
public class MessagePrintApp {
//일종의 요청처리 메소드
public static void main(String[] args) {
MessagePrint print = new MessagePrint(); //원래는 팩토리에게 달라고 해야함
print.messagePrint();
}
}
반응형
'framework > spring IOC(제어의 역행)' 카테고리의 다른 글
[springIOC] 6. DI | 자동주입 | 자동으로 Inject 하는 법 (0) | 2024.07.28 |
---|---|
[springIOC] 5. DI | 수동주입 | Constructor Injection & Setter Injection (0) | 2024.07.28 |
[springIOC] 4. DI | 수동주입 | 집합객체로 의존성 주입해 객체 생성하는법 (0) | 2024.07.27 |
[springIOC] 3. 스프링 Bean 클래스 생성법 | DL | 룩업기능 (feat. ApplicationContext 객체) (0) | 2024.07.27 |
[springIOC] 2. 결합도가 매우 낮은 프로그램 - 스프링 컨테이너의 역할 및 장점, 스프링빈 (0) | 2024.07.26 |