[springIOC] 1. 결합도가 높은 프로그램 vs 결합도가 낮은 프로그램(팩토리클래스의 역할)

2024. 7. 26. 09:07· framework/spring IOC(제어의 역행)
목차
  1. 01. 결합도가 높은 프로그램 - BAD
  2. 1) 일종의 DAO클래스
  3. 2) 일종의 Service클래스
  4. 3) 일종의 요청처리
  5. 02. 결합도가 낮은 프로그램 - GOOD
  6. 1) 일종의 DAO클래스
  7. 2) 💖팩토리클래스 - 대신 객체 생성하는 역할
  8. 3) 일종의 Service클래스
  9. 4) 일종의 요청처리
반응형

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
  1. 01. 결합도가 높은 프로그램 - BAD
  2. 1) 일종의 DAO클래스
  3. 2) 일종의 Service클래스
  4. 3) 일종의 요청처리
  5. 02. 결합도가 낮은 프로그램 - GOOD
  6. 1) 일종의 DAO클래스
  7. 2) 💖팩토리클래스 - 대신 객체 생성하는 역할
  8. 3) 일종의 Service클래스
  9. 4) 일종의 요청처리
'framework/spring IOC(제어의 역행)' 카테고리의 다른 글
  • [springIOC] 5. DI | 수동주입 | Constructor Injection & Setter Injection
  • [springIOC] 4. DI | 수동주입 | 집합객체로 의존성 주입해 객체 생성하는법
  • [springIOC] 3. 스프링 Bean 클래스 생성법 | DL | 룩업기능 (feat. ApplicationContext 객체)
  • [springIOC] 2. 결합도가 매우 낮은 프로그램 - 스프링 컨테이너의 역할 및 장점, 스프링빈
jeri
jeri
Weekly I learned
JERI LOGWeekly I learned
반응형
jeri
JERI LOG
jeri
전체
오늘
어제
  • 분류 전체보기 (336)
    • KNOU (0)
    • coding_test (71)
    • springboot (2)
    • work (9)
    • docker (3)
    • git (11)
    • network (12)
    • java (70)
      • java (9)
      • oop (12)
      • inheritance (12)
      • realization (7)
      • java.lang (8)
      • java.util & java.text (8)
      • java.awt & java.swing (4)
      • java.io (5)
      • java.net (5)
    • python (0)
    • sql (14)
    • jdbc (6)
    • web (32)
      • html (8)
      • css (8)
      • javascript (16)
    • servlet (9)
    • jsp (31)
    • framework (65)
      • mybatis (10)
      • spring (7)
      • spring IOC(제어의 역행) (8)
      • spring AOP(관점지향) (8)
      • spring DAO (2)
      • spring mvc (14)
      • spring mvc 웹사이트제작법 (16)
    • flutter (1)
    • 개발일지 (0)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • 99클럽
  • TIL
  • 개발자취업
  • 오블완
  • 코딩테스트준비
  • 티스토리챌린지
  • 항해99
  • 회사

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
jeri
[springIOC] 1. 결합도가 높은 프로그램 vs 결합도가 낮은 프로그램(팩토리클래스의 역할)
상단으로
loading

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.