
service 계층 전 후에 같은의미지만 쓰는 단어가 다르다!
굳이 안지켜도 되지만 참고..
service 전에는 find, regist , modify, remove
service 후에는 db와 관련 된 것은 select, insert, update, delete
참고) 처음에 static을 보면 static먼저 인지한다!!
의미 : static은 클래스 레벨로 만들어지기 때문에, 모든 객체/인스턴스가 공유하는 메소드/변수다.
(이유: 객체가 만들어지기전에 static 이 먼저 저장되므로 객체생성여부와 모든 객체와 관련없이 공유된다)
ArrayList<Member> findMembers = mr.selectAllMembers();
를 설명하기!
: 클래스의 집합 / 자료구조의 집합
: 클래스다!
: 자바의 컬렉션 프레임워크에서 List 인터페이스의 구현체가 ArrayList클래스이다.
자바에서는 다음과 같은 것들을 제네릭 타입으로 사용할 수 있습니다:
- 클래스 타입: String, Member
- 래퍼 클래스: Integer, Double(기본 자료형의 객체버전/박싱)
- 사용자 정의 타입: CustomObject (직접만든 클래스)
- 인터페이스
자바에서는 클래스 = 타입이라고 볼 수 있다.
ArrayList<String> → 문자열(String)만 저장 가능
ArrayList<Integer> → 정수(Integer)만 저장 가능
ArrayList<Member> → 직접 정의한 Member 객체만 저장 가능
즉, 내가 생각했던 일반적인 객체 생성과는 다르다.
Member member1 = new Member(); // Member 타입의 객체 생성
중간에 타입 안에 타입이 더 들어간다!
ArrayList <Member> findMembers = mr.selectMembers();
그래서 첫 목표 코드를 해석해보면,
mr.selectAllMebers()메서드가 반환하는 값은
ArrayList <Member>
타입의 객체 여야하고, 이들은 findMembers에 저장됩니다.
findMembers는 Member 타입을 저장할 수 있는 ArrayList 타입의 변수입니다.
private final ArrayList<Member> memberList = new Arraylist<>();
설명하기.

: 해당 클래스 내에서만 사용할 목적이면 private 접근제어자를 붙일 수 있다.
따라서, private final은 해당 클래스 안에서만 쓰고 final(재할당하지 않는, 오로지 하나만 존재하는) 객체를 만든다는 뜻이다.
ArrayList는 내부적으로 생성자에 <>가 지정이 되어있어서 다른 객체생성자들 쓰는 것과는 다르게, ArrayList()가 아닌, new ArrayList<>();를, 즉 <>제네릭을 써야한다.
새로운 ArryayList객체를 생성하여 ArrayList<멤버>타입으로 반환하여 memberList에 저장한다. 이 때 memberList는 클래스 내부에서만 사용할 수 있고, 객체는 초기화 이후 재할당되지않는, 즉 딱 한번만 생성된다.
: 객체를 파일에 저장하거나 네트워크로 전송할 때 사용됩니다.
: 저장하거나 전송하기 위해서는 무조건 사용해야함 (바이트로 변환해야하기 때문이다.)
java.lang.Object
↳ java.io.OutputStream (추상 클래스, 기반 클래스)
↳ FileOutputStream (파일에 바이트를 씀)
↳ FilterOutputStream (다른 스트림에 기능 추가)
↳ BufferedOutputStream (버퍼를 통한 성능 향상)
↳ ObjectOutputStream (객체 직렬화 기능 추가)
OuputStream이 바이트 기반 출력스트림인것은 알고 있었지만, 이것이 클래스라는 것 에 대한 인지가 없었다. OutputStream은 추상클래스이기 때문에, 우리는 이를 상속한 하위클래스들을 사용한다.
FileOutputStream : 파일에 직접 데이터를 바이트로 기록
BufferedOutputStream: 버퍼링 기능 >> 메모리에 임시 저장 후 한 번에 출력(성능향상)
3. ObjectOutputStream : 객체 직렬화 >> 객체를 바이트로 변환해 저장
private final File file =
new File("src/main/com/......"); //Final클래스 이용하여 final 객체 생성
ObjectOutputStream oos = null;
oos = new ObjectOutputStream(
new BufferedOutputStream(
new FileOutputStream(file)
)
);
FileOuputStream에서 이미 바이트로 저장한것 아닌가?
왜 ObjectOuputStream을 또 써야하지??라는 의문이 들었따.
- FileOutputStream: 바이트 단위로 데이터를 파일에 씁니다. 객체를 저장할 수는 없고, 일반적으로 텍스트나 이미지 같은 바이트 데이터에 사용됩니다.
- ObjectOutputStream: 객체를 직렬화하여 바이트로 변환하고, 이 바이트를 FileOutputStream 같은 바이트 스트림에 기록합니다.
따라서 FileOutputStream은 바이트를 쓸 수 있지만, 객체를 파일에 저장하고 싶다면 ObjectOutputStream을 사용해야 하고, 이 두 스트림은 함께 사용될 수 있습니다.
for(Member member : defaultMembers){
oos.writeObject(member);
해당 코드 설명하기.
즉, 이 코드는 defaultMembers 컬렉션에 들어있는 모든 Member 객체를 파일에 저장하는 코드입니다. 근데 어디에 저장되는가? 라면..
private final File file =
new File("src/main/com/......"); //Final클래스 이용하여 final 객체 생성
ObjectOutputStream oos = null;
oos = new ObjectOutputStream(
new BufferedOutputStream(
new FileOutputStream(file)
)
);
앞에서 본 이 file객체에 저장된 경로에 내보낸 객체들이 파일로 저장되는 것이다!
for (Member member: defaultMembers){
oos.writeObject(member);
}