봄수의 연구실

Interface의 활용 - 🐥 카카오 테크 캠퍼스 본문

DEV/Java

Interface의 활용 - 🐥 카카오 테크 캠퍼스

berom 2023. 4. 28. 13:00

Interface의 활용 - 🐥 카카오 테크 캠퍼스

Interface의 정의와 사용

  • 자바에서 인터페이스란 추상 메서드와 상수 필드만을 가지는 클래스와 유사한 형태의 추상 타입이다.
  • 인터페이스를 사용하면 클래스간의 의존성을 낮출 수 있으며, 다형성을 구현할 수 있다.
  • 인터페이스는 다른 클래스에서 해당 메서드를 구현함으로써 인터페이스를 사용하는 클래스에서 해당 메서드를 호출할 수 있도록 한다.

Strategy 패턴의 정의와 사용

  • Strategy 패턴은 객체의 행위를 클래스에서 구현하는 것이 아니라, 행위를 구현한 전략을 가진 객체를 전달받아 실행하는 패턴이다.
  • Strategy 패턴을 사용하면 실행시간에 알고리즘을 선택할 수 있으며, 기존 코드의 변경 없이 새로운 알고리즘을 추가할 수 있다.
  • Strategy 패턴은 인터페이스를 이용해 전략을 구현한 객체를 전달하고, 전달된 객체를 호출해 행위를 실행한다.

사용하는 이유

  • 실행 시간에 객체의 행위를 변경해야하는 경우 유용하다.
  • Strategy 패턴은 기존 코드의 수정 없이 새로운 행위를 추가할 수 있기 때문에 확장성과 유연성이 좋다.

Example. Dao


DAO(Data Access Object)란 무엇인가?

  • 데이터베이스와 같은 영구 저장소에 저장된 데이터를 애플리케이션에서 사용할 수 있게 해주는 패턴입니다.
  • 데이터베이스와 연결된 코드를 DB와 독립적으로 만들어서, 유지보수를 쉽게 하기 위한 것입니다.
  • CRUD(Create, Read, Update, Delete)와 같은 데이터베이스 관련 작업을 수행하는 메서드를 가지고 있습니다.

무엇이 좋은가?

public class UserInfoClient {
	public static void main(String[] args) throws IOException {
		FileInputStream fis = new FileInputStream("db.properties");
		
		Properties prop = new Properties();
		prop.load(fis);
		
		String dbType = prop.getProperty("DBTYPE");
		
		UserInfo userInfo = new UserInfo();
		userInfo.setUserId("12345");
		userInfo.setPasswd("!@#$%");
		userInfo.setUserName("이순신");
		
		
		UserInfoDao userInfoDao = null;
		
		if(dbType.equals("ORACLE")){
			userInfoDao = new UserInfoOracleDao();
		}
		else if(dbType.endsWith("MYSQL")){
			userInfoDao = new UserInfoMySqlDao();
		}
		else{
			System.out.println("db support error");
			return;
		}
	
		userInfoDao.insertUserInfo(userInfo);
		userInfoDao.updateUserInfo(userInfo);
		userInfoDao.deleteUserInf(userInfo);
	}
}

위의 코드는 클라이언트 인터페이스 코드입니다.
DB의 종류에 따라 인터페이스를 구성한 후, dbType에 따라 실행 시간에 DB에 알맞은 Dao를 사용할 수 있게 되었습니다

또한, 인터페이스인 DAO를 구현함으로써 데이터베이스에 대한 접근 권한을 DAO가 담당함으로서, 로직상 데이터베이스에 대한 구체적인 정보를 알 필요가 없어졌습니다.
즉 DAO 객체를 통해 데이터를 액세스 함으로써 유지보수와 확장성에서 이점이 생깁니다

새로운 DB에 연결하게 되면, 새로 생긴 DB를 위한 DAO를 생성하기만 하면 되는겁니다

부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>

728x90

'DEV > Java' 카테고리의 다른 글

Java의 Lambda - 🐥 카카오 테크 캠퍼스  (0) 2023.05.02
Java의 내부 클래스 - 🐥 카카오 테크 캠퍼스  (0) 2023.05.02
Interface  (0) 2023.04.27
타입 상속  (0) 2023.04.27
추상클래스(Abstract Class)  (1) 2023.04.27