인터페이스 프로그래밍

본고는 북경 상학당 스프링 과정의 학습 노트로 쓸 수 있다
왜 인터페이스에 맞추어 프로그래밍해야 합니까?
이론을 말하지 않고 바로 실례를 들겠습니다.
데이터베이스에user의 간단한 예를 쓰다
먼저
package com.bjsxt.model;

public class User {
	private String name;
	private String password;
	//  get,set  

}
그리고 저희가 서비스를 추가하면 업무 논리는user가 가지고 있어야 할 논리를 포함합니다. 예를 들어save delete...
package com.bjsxt.services;

import com.bjsxt.dao.UserDao;
import com.bjsxt.model.User;

public class UserService {
	
	private UserDao userDao;
	
	public UserDao getUserDao() {
		return userDao;
	}

	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}

	public void Save(User u){
		userDao.save(u);
	}
}
이 userdao는 무엇입니까?
사용자 서비스는 주로 업무 논리적인 일을 하지만 더욱 구체적인 업무 실현(데이터베이스와 관련된)은dao로 구성된다
userdao는 주로 데이터베이스에서 접촉하는 일을 한다
package com.bjsxt.dao;

import com.bjsxt.model.User;

public class UserDao  {
        
        public void save(User u) {
		// TODO Auto-generated method stub
		System.out.println("    mysql");
	}
}
문제가 생겼어요. 저희가 원래 mysql를 썼는데 지금oracle로 바꾸고 싶어요.
위의 UserDao를 userdaomysql로 변경합니다.
userdaooracle 하나 더.
물론 위에userdao에 인터페이스를 더 넣어주세요.
다음과 같습니다.
package com.bjsxt.dao;

import com.bjsxt.model.User;

public class UserDaoMysql implements UserDao {

	@Override
	public void save(User u) {
		// TODO Auto-generated method stub
		System.out.println("    mysql");
	}
}
package com.bjsxt.dao;

import com.bjsxt.model.User;

public interface UserDao {
	public void save(User u);

}
그럼 마지막 테스트 함수는 쓰기 쉬워요.
package com.bjsxt.test;

import com.bjsxt.dao.UserDaoMysql;
import com.bjsxt.model.User;
import com.bjsxt.services.UserService;


public class Test {
	public static void main(String[] args) {
		User user=new User();
		UserService userService=new UserService();
		UserDao dao=new UserDaoMysql();
		userService.setUserDao(dao);
		userService.Save(user);
	}
}

oracle로 바꾸려면 어떻게 해요?
UserDao dao=new UserDaoOracle();

인터페이스를 향한다는 뜻이에요.

좋은 웹페이지 즐겨찾기