컬렉션 프레임워크는 개념이 확장이 되어서 다양하게 사용이 된다.
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; 이후 대입을 따로하지?


구조 이해하기

