{
	"nodes":[
		{"id":"0158693560fb14bc","x":-280,"y":-249,"width":740,"height":349,"type":"text","text":"### ✅ **Service & ServiceImpl 패턴을 사용하는 이유**\n\n1. **유연한 확장 가능**\n    - `OrderService` 인터페이스를 사용하면 `OrderServiceImpl` 외에 다른 구현체도 쉽게 만들 수 있습니다.\n    - 예를 들어, `MockOrderServiceImpl` 같은 테스트용 클래스를 만들 수도 있음.\n        \n2. **기능 변경이 용이함**\n    - `OrderServiceImpl`을 수정해도 **외부 코드에서는 `OrderService` 인터페이스만 사용하므로 코드 변경이 최소화**됨.\n        \n3. **의존성 주입(DI) 활용**\n    - `@Autowired`나 생성자 주입을 사용하면 **구현체를 쉽게 교체 가능**.\n    - 예를 들어, 특정 환경에서 다른 `OrderServiceImpl`을 주입할 수도 있음."},
		{"id":"b29d63ba63e5986c","x":-560,"y":200,"width":619,"height":232,"type":"file","file":"3.Resource (자료실)/객체지향/Service.md"},
		{"id":"7be64dbc90507b8f","x":120,"y":200,"width":620,"height":232,"type":"file","file":"3.Resource (자료실)/객체지향/ServiceImpl.md"}
	],
	"edges":[
		{"id":"0424768d1112e00c","fromNode":"0158693560fb14bc","fromSide":"bottom","toNode":"b29d63ba63e5986c","toSide":"top"},
		{"id":"677db6457657c145","fromNode":"0158693560fb14bc","fromSide":"bottom","toNode":"7be64dbc90507b8f","toSide":"top"}
	]
}