1. 네트워크 첫 수업
요청 후 반드시 응답을 기다리는 TCP와 무관한 UDP.
우리는 동기 방식에 대해 우선 배우게 된다.
2. 성적관리 GUI 숙제검사
2-1. ObjectOutputStream
try{
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
for(ScoreDTO dto : list){
oos.writeObject(dto);
}
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
학생성적관리 GUI에서 강사님처럼 ObjectOutputStream을 사용하지 않은 부분이 아쉽다.
ObjectOutputStream으로 입출력시 txt파일이 어떻게 표현되는지 follow - up 해야한다.
---------------------------------- 2020.05.04 (월) 추가 ---------------------------------------
ObjectOutputStream은 객체를 전송하기 위한 수단이지 파일로 출력해서
ObjectInputStream 이외의 방법으로 열어서 사용하기 위한 수단이 아니다.
따라서 ObjectOutputStream이 어떤 방식의 인코딩을 사용하는지는 중요하지 않다.
결국 언마샬링을 수행한 다음에 사용하기 위한 목적으로 생성하기 때문이다.
ObjectOutputStream으로 메모장 출력한 결과는 다음과 같다.
ы sr ScoreDTO ? 켉 D avgI engI korI mathI totL hakt Ljava/lang/String;L nameq ~ xp@Tjおお? F P _ ? 1t 湲몃룞?컎q ~ @R*おお? X < F ? 2t ?섎━?컎q ~ @S뷫UUUU F c B ? 3t ?먯슦??
물론 ObjectInputStream으로 언마샬링 후엔 정상적으로 사용가능한 데이터다.
------------------------------------------ 추가 끝 ----------------------------------------------
강사님의 요구사항을 충족시켜서 인터페이스 Score.java를 ScoreImpl.java가 구현하고,
Impl내에서 모든 메소드를 구현하는 것으로 코드를 수정했다.
하나의 클래스에서 여러가지 역할을 갖고 있으면 안된다는 개념이 아직 부실하다.
2-2. EOFException
while (true) {
try {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
ScoreDTO dto = (ScoreDTO)ois.readObject(dto); //Object type으로 읽어오기 때문에 cast해줘야함.
array.add(dto);
} catch (EOFException e) {
break;
}
}
파일에 더이상 읽을 게 없을 경우 발생하는 EOFException의 catch문에 break;를 걸어 사용하는게 신기했다.
단순히 에러를 예방하거나, throw로 에러를 발생하는 건 봤지만 에러의 경우 break;를 걸어 활용한다니.
배열에서 OutOfBoundsException 과 비슷한 느낌인데 오히려 그걸 역이용 할 수 있다니 개꿀이다.
그리고 뭔가 코드가 아름답다.
3. indexOf(String str, int fromIndex)
BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
br을 이용해서 네트워크를 한줄씩 읽어와서 특정 문자열이 포함된 횟수를 구할 때 사용했다.
지난번에도 많은 시간을 들여 설명하셨는데 두번째 설명하셨다. 자주 쓰게 되는 기능인가보다.
4. 인터페이스 인터페이스 인터페이스.
혹시나 그렇게 중요하지 않은 개념이어서 많이 쓰지 않는 거면 얼마나 좋을까 하는 생각을 하며....
이래저래 검색을 해봤지만 아주아주아주 중요하다는 결과만 잔뜩 ㅋ
객체 지향 프로그래밍의 핵심인 것 같다. 다형성과 함께..
그래서 인터페이스가 뭔지. 왜 필요한건지. 어떨때 유용한건지. 도저히 감이 안왔는데.
30분짜리 영상 2개를 보면서 약간 느낌이 왔다. 반복해서 보다보면 좀 더 느낌이 올 것 같다.
남궁성 강사님의 자바의 정석 기초편 강의 영상을 대략적으로 정리를 해보자면.
4-1. interface 는 두 대상(객체) 간의 중간 역할을 한다.
desktop 본체를 바꿔도 windows 라는 OS가 컴퓨터와 사람 사이의 interface 역할을 한다.
그렇게 익숙하던 GUI의 I가 자바에서 왜케 생소한 걸까...
windows라는 interface가 껍데기로서 중간 역할을 해서 내용물인 컴퓨터가 바뀌어도 사람이 편하다.
4-2. 선언(설계)와 구현을 분리시킨다.
지금껏 내가 작성하던 일상적 코드는 기껏해야 DTO클래스 정도만 쪼갤 뿐이었다.
즉 껍데기와 알맹이가 하나로 합쳐져 있는 형태인 것이다.
단순히 A와 B의 연결이면 이것은 강한 결합이어서 한쪽이 바뀌면 다른쪽의 전면 수정이 불가피하다
A가 B가 아니라 B와 연결이 되려면 많은 수정이 필요한 것이다.
이를 B와 C가 interface를 구현하게 하면 코드의 수정이 용이해진다. 이부분은 아직 더 공부가 필요하다.
우선 이해한대로 말해보자면 안드로이드에서 아이폰으로 바뀌면 알맹이와 껍데기가 모두 바뀐다.
그러나 갤럭시 안드로이드에서 샤오미 안드로이드로 바뀌면 인터페이스가 안드로이드로 동일하다.
4-3. 표준화(느슨한 결합)
JDBC와 연결해서 설명해주신 부분은 정말 크게 와닿았다.
영상으로 대체한다.
4-4. 관계 없는 이들의 관계를 맺어준다.
이 설명이 제일 이해가 잘 됐다 ㅋㅋㅋㅋ 영상으로 대체한다.
'Java & Spring' 카테고리의 다른 글
2020.05.07 (목) 학습 : 그림판 더블버퍼링, jSmooth (0) | 2020.05.07 |
---|---|
2020.05.06 (수) 학습 : 네트워크, 채팅, 서버 클라이언트 (0) | 2020.05.07 |
2020.05.04 (월) 학습 : 컴파일과 실행 동시에, Socket, 자바프로젝트 시작 (캐치마인드) (0) | 2020.05.04 |
2020.04.29 (수) 학습 : 직렬화 Serializable, Graphics2D, GUI (0) | 2020.04.29 |
2020.04.28 (화) 학습요약 : 자바 타이머, 자바 메모장 (0) | 2020.04.29 |