본문 바로가기

Java

Properties 객체

Properties 객체란


자바프로그램에서 프로그램 설정정보를 정적으로 정해놓는 대신(하드코딩) 외부  .properties확장자 파일로 저장하여 시스템 설정 변경에 유연하게 대처하게 위해 사용
Java.util.Properties클래스를 이용하면, 프로그램의 설정정보를 쉽게 개발코드에 불러오거나 또는 설정정보에 새로운 정보를 추가, 저장 할 수 있음

시스템 설정 변경시 시스탬이 재컴파일 되는 것을 막음

예시 : DBMS가 변경되었을 경우 / 접속할 url, 계정명, 비밀번호가 변경되었을경우
  => 자바소스코드를 수정해야함 수정한코드를
 * 반영시키고자하면 프로그램을 재구동을 해야함 (사용자입장에서 프로그램 사용중 비정상적으로 종료되었다가 다시 구동될 수 있음으며 유지보수가 불편함)
  - 해결 방식 : DB관련된 정보들을 별도로 관리하는 외부파일(driver.properties)로 만들어서 관리 외부파일로 key에 대한 value를 읽어들여서 반영시킬 것 => 동적코딩방식

Properties 클래스 

  • MAP 계열의 컬렉션 프레임워크와 비슷하게 동작
  • "Key = Value" 형태로 매핑(key 를 통해 value를 반환받음) / key는 String형
  • 확장자: properties / xml
  • DB의 연결정보, sql문 등을 저장해두는 용도로 사용
public class MemberDao {
	
	private Properties prop = new Properties();
	
	public MemberDao() {
    
    	// 기본생성자에 properties객체 생성내용을 넣었으므로
        // MemberDao객체가 생성되는 시점 연결된 파일 내용이 읽어짐
        
		String file = MemberDao.class.getResource("/sql/member/member-mapper.xml").getPath();



		try {
			prop.loadFromXML(new FileInputStream(file));
            
            // FileInputStream을 통해 파일을 로드할 수 있는 통로를 만들고
            // 통로를 통해 XML파일을 로드한다 
            // 이제 prop객체를 통해 값을 얻을 수 있게 되었음!!
            
            
            
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public Member loginMember(Connection conn, String userId, String userPwd) {
		// 로그인 요청
		// SELECT문 -> RESULTSET이 돌아옴(1개거나 0개거나, UNIQUE조건이니까) -- Member
		// 필요한 변수 세팅
		Member m= null;
		ResultSet rset = null;
		PreparedStatement pstmt = null;
		
		String sql = prop.getProperty("loginMember");
		
		// pstmt객체생성
		try {
			pstmt = conn.prepareStatement(sql);
			
		// 위치홀더 채우기
		pstmt.setString(1, userId);
		pstmt.setString(2,  userPwd);
		
		// executeQuery select문 , resultset객체
		// 다른 dml, 처리된 행의 갯수
		rset = pstmt.executeQuery();
		// rset으로부터 각각의 컬럼값을 뽑아서 Member객체에 남기
		// 조회 결과가 한 행일때 => if(next())
		// 조회 결과가 여러행일 때: while(rset.next())
		
		if(rset.next()) {
			// 각 컬럼의 값 뽑기 , rset.getInt/String/Date
			// 뽑아올 컬럼명 또는 컬럼 순번
			m = new Member(rset.getInt("USER_NO"),
						   rset.getString("USER_ID"),
						   rset.getString("USER_PWD"),
						   rset.getString("USER_NAME"),
						   rset.getString("PHONE"),
						   rset.getString("EMAIL"),
						   rset.getString("ADDRESS"),
						   rset.getString("INTEREST"),
						   rset.getDate("ENROLL_DATE"),
						   rset.getDate("MODIFY_DATE"),
						   rset.getString("STATUS"));
					
		}
		
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			// 자원반납--  생성된 순서의 역순
			JDBCTemplate.close(rset);
			JDBCTemplate.close(pstmt);
		}
			// Service 에 결과(Member) 넘기기
		return m;
	
		
	}

 

생성방법

1)파일을 직접 생성하는 클래스가 아니므로 FileReader 또는 FileInputStream 객체를 매개변수로 받아 파일 로드
2)  load() 메소드를 통해 파일 정보를 넣어줌
loadFromXML(FileInputStream File) 스트림으로 열린 XML파일을 로드
load (FileInputStream file) 스트림으로 열린 Properties 파일 객체를 로드
load (FileReader file)
getProperty(String key) key와 매핑되어있는 value를 가져오는 메소드 / 반환형 String
setProperty(key, value)  

 

 

 

References
 */https://codevang.tistory.com/163

 

java.util.Properties 주요 메소드 [1/1]

[ Properties 클래스 ] MAP 계열의 컬렉션 프레임워크와 비슷하게 동작하는 파일 "Key = Value" 형태로 된 "파일이름.properties" 파일 또는 Xml 파일 key를 주면 Value를 반환하는 기능을 가짐 DB의 연결정보 등

codevang.tistory.com

https://gahui-developer123.tistory.com/82

 

Properties 객체

프로그래밍을 할때, 설정정보를 하드코드하는 경우는 드물다. 대신, 설정정보를 소스코드 영역의 외부에 저장함으로서 시스템 설정이 변경되었을 때, 시스템을 재 컴파일 하는 것을 막는다. 자

gahui-developer123.tistory.com