java 11일차

KHLee·2023년 3월 9일

자바수업

목록 보기
14/46

컬렉션 프레임워크는 개념이 확장이 되어서 다양하게 사용이 된다.
ArrayList HashSet HashMap
HashMap을 직접적으로 사용하진 않지만 응용해서 사용하는 경우가 많다.
(어제 학습에서는 데이터베이스처럼 사용하였음)

100.10.10.5 -> server(5)에 접속을 하다가 server2(6)에 연결을 해야한다.
그런데 클래스로만 프로그램이 돌아가고 있고 소스는 보안상의 문제로 볼 수 없다. ip변경해주는게 불가하다.
따라서, ip를 입력하는 file을 만들고 클래스에서 ip를 불러와서 사용을 하게 작성을 한다.

properties를 이용하여 작성한다.
아래는 기본 사용법.


try catch finally 이용

		Properties props = new Properties();
		String fileName = "file.txt";
		FileInputStream in = new FileInputStream(fileName);
		props.load(in);
		String ip = props.getProperty("IP_ADDR");
		System.out.println(ip);
package properties;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

public class Test {

	public static void main(String[] args) {
		Properties props = new Properties();
		String fileName = "file.txt";
		FileInputStream in = null;
		try {
			in = new FileInputStream(fileName);//in이라는 파이프를 꽂아서 정보를 가져올거다.
			props.load(in);
		} catch (IOException e) {//위 두가지 코드에 대해 익셉션이 발생하면 IOException으로 한번에 잡겠다.
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {//정상적으로 끝나도, 비정상적으로 끝나도 close는 실행해줘야 한다.
			try {
				in.close();
			} catch (IOException e) {//1초 후 in.close를 실행하게 작성을 하면 Thread.sleep(1000)을 try-catch 해야함... 무한반복
				e.printStackTrace();
			}
		}
		String ip = props.getProperty("IP_ADDR");
		System.out.println(ip);
	}

}


엔터 치는 것 중요.(문장이 끝난 위치를 찍어줌)

in이 null인 경우 대비


리소스 자동해제 예외처리. 코드가 더 간단함.

package properties;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

public class Test2 {

	public static void main(String[] args) {
		Properties props = new Properties();
		String fileName = "file.txt";
		try (FileInputStream in = new FileInputStream(fileName)){
			props.load(in);//빨때 꽂는 행위를 try()안에 넣음으로써 리소스 자동해제를 함.
		} catch (IOException e) {
			System.out.println("문제발생!!!!!");
			return;//함수를 종료함으로 아래 구문이 실행 안되게 해줌.
		}
		String ip = props.getProperty("IP_ADDR");
		int port = Integer.parseInt(props.getProperty("PORT"));
		System.out.printf("%s 서버로 %d 포트로 접속",ip, port);
	}

}

아래는 static메소드에 만들어서 사용.


구현하기

구성 순서 :
DATABASE에 어떤 요소로 구분되어 저장되는지에 따라 DTO를 구성.
-> Account, Transaction, User DTO에 field값 부여.
-> DTO 필드값 이용하여 DAO interface구성(추상함수) - insert delete update 등. 예외처리 선언 해주기 시작. 제네릭 변수 지정.
-> DAO 기능 이용하여 Service interface구성(추상함수) - DAO의 함수를 이용하는 register, remove, modify 등. 고객이 접하는 메뉴와 비슷. 예외처리 선언 해주기 시작.
-> DAO, Service 인터페이스 이용한 UserDAO, UserService 구성. 제네릭에 들어갈 값 지정 및 예외처리 상황 지정.
-> DAO에서 지정한 예외사항은 Service에서는 처리하지 않고 App로 넘기기.
-> Service구성 시에는 DAO 함수를 사용함으로 선언을 해주고, App구성 시에는 Service함수를 사용함으로 선언을 해줘야한다.


throw로 예외를 던질 때, 메세지 출력 관련 질문

List말고 ArrayList로 받으면 왜 안돼지?

왜 DAO<> userDao; 이후 대입을 따로하지?


구조 이해하기

profile
안녕하세요

0개의 댓글