Search

2조멘토링 1주차-3

분류
기타
담당멘토
안경무
멘토링 요청시간
2023/06/29 22:00
멘토링 시간
2023/06/29 22:00-23:00
멘토링방
멘토링룸3
배정상태
해결완료
비용지급
지급완료
번호
0
신청팀
기초멘토링팀
소요시간
1
작성자
나길주/윤희서

질문

1.
ObjectStream에 대해 다시 배우고 싶습니다. 특히 직렬화가 무엇을 의미하는지 잘 모르겠습니다.

화면캡쳐(예시)

위 질문에 해당하는 질문의 링크나 스크린샷을 여기에 추가해 멘토분들이 참고할 수 있도록 하세요.
package com.test.main; import java.io.EOFException; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.Scanner; public class AAA{ public static void main(String [] args) { SchoolClass schoolClass = new SchoolClass(); while (true) { int menuNumber = schoolClass.inputMenu(); if (menuNumber == 1) { schoolClass.inputStudentInfo(); } else if(menuNumber == 2) { schoolClass.printStudentInfo(); } else if(menuNumber == 3) { break; } } } } class SchoolClass{ Scanner scanner; FileInputStream fis = null; FileOutputStream fos = null; ObjectInputStream ois = null; ObjectOutputStream oos = null; public SchoolClass() { scanner = new Scanner(System.in); } public int inputMenu() { System.out.println("1. 학생정보 입력"); System.out.println("2. 학생정보 출력"); System.out.println("3. 종료"); System.out.print("메뉴 번호 : "); int menuNumber = scanner.nextInt(); return menuNumber; } public void inputStudentInfo() { try { if(fos == null) { fos = new FileOutputStream("test1000.dat", true); oos = new ObjectOutputStream(fos); } System.out.print("이름 : "); String name = scanner.next(); System.out.print("학년 : "); int grade = scanner.nextInt(); TestClass100 t1 = new TestClass100(name, grade); oos.writeObject(t1);; }catch(Exception e) { e.printStackTrace(); } } public void printStudentInfo() { try { if(fis == null) { fis = new FileInputStream("test1000.dat"); ois = new ObjectInputStream(fis); } while (true) { TestClass100 t200 = (TestClass100) ois.readObject(); t200.printStudentInfo(); } }catch(EOFException e) { // e.printStackTrace(); System.out.println("종료"); }catch(Exception e) { // e.printStackTrace(); } } } class TestClass100 implements Serializable{ String name; int grade; public TestClass100(String name, int grade){ this.name = name; this.grade = grade; } public void printStudentInfo() { System.out.printf("이름 : %s\n", name); System.out.printf("학년 : %d\n", grade); } }
Java
복사

프로젝트 주소

위 질문에 해당하는 질문의 링크나 스크린샷을 여기에 추가해 멘토분들이 참고할 수 있도록 하세요.

멘토 답변

직렬화 역직렬화의 개념에 대해 설명하였습니다.
Serializable 인터페이스의 사용법에 대해 설명하였습니다.
Serializable은 java에서 사용되어지는 인터페이스이고, 안드로이드에서는 Parcelable을 사용할 수 있다는 것에 대해 설명하였습니다.
이 둘의 차이점에 대해 간단하게 설명하였고 리플렉션이 존재한다라는 것 정도로 설명하였습니다. (자세히 설명하진 않음)
A액티비티에서 B액티비티로 이동할 때 데이터를 움직여야할 상황이 존재한다라는 것을 이야기하였고, intent를 이용하면 데이터를 옮길 수 있다는 것을 설명하였습니다.
객체의 경우 intent를 통해 데이터를 옮길 수 없다라는 것을 설명하고 직렬화의 개념을 적용하면 가능하다는 것을 예시 코드를 같이 작성하며 공부하였습니다.