주마다 쓰려고 하는 건 아니고, 이번 주에 자바기초에 대해 들으며 새롭게 알게 된 내용들을 한 번 모아보고자 작성한다.
스프링까지는 기본개념을 복습하려는 마인드로 듣고 있는데, 이번 주는 자바기초까지 진행했다.
이 과정에서 새로 알게 된 것이나 잊고 있던 개념까지 정리가 되었고 많은 도움이 됐다.
전부 개인 학습정리파일로 기록해놓긴 했는데, 간략하게 가공해 작성해보겠다.
Checked Exception
Unchecked Exception
제네릭 객체 사용시
ArrayList<Integer> list = new ArrayList<>();
의 Rvalue에서 <>안을 비워놓는 것은, 문법상 생략가능하기 때문
제네릭 상속
제네릭 타입을 제한하여 받겠다는 의미를 가진다
ex) MyClass <T extends JPanel>
T는 JPanel의 하위타입으로만 생성이 가능하게 됨
와일드 카드
모든 타입을 받겠다는 의미를 가진다
단, 메서드에서 사용 (return type과 argument에 사용)
* 제네릭 타입 T와 같은 의미로 봐도 무방
ex)
void process(List<?> list){} //argument에 사용
List<?> process(){} //return type에 사용
void process(? extends Vehicle){} // 상한 경계 _Vehicle의 자식타입만 받겠다는 의미
void process(? super Car){} //하한 경계 _위와 반대
//참고로 하한 경계는 제네릭 클래스단위로는 사용 불가, 메서드에서만 사용가능
둘 다 Interface
Comparator, Comparable로 Sorting하기 <- 내용추가 및 수정
-> 내용 너무 많음, LMS까지 시청 후 TIL로 따로 정리 예정
+ 정리 완료 : Lambda Expression과 Steam API 낱낱이 파헤치기
1. Serializable인터페이스를 구현한 객체 생성
ex) class Student implements Serializable
2. 객체 전송하기
ex)
Student s = new Student("그렙", 20);
ObjectOutputStream oos = new ObjectOutputStream(client.getOutputStream());
oos.writeObject(s);
oos.close();
3. 객체 받아서 꺼내보기
ObjectInputStream ois = new ObjectInputStream(server.getInputStream());
Student s = (Student) ois.readObject();
System.out.println(s.age + s.name);
* 만들어 본 채팅 프로그램에서 String을 주고 받아보긴 했는데, 객체를 주고 받는 방법에 대해서 처음 알게 되었다(물론 검색해보면 알 수 있었겠지만). 이를 이용하면 간단한 통신 게임을 구현할 수도 있다.
+ 수업시간에는 네트워크 통신이 아닌 File에 저장하고 꺼내는 예시였는데, 임의로 통신하는 예로 수정하여 작성함
객체를 생성하고 close()를 해줘야 하는 경우에 try문이 2중으로 생성해야 하는 경우가 있다.
예를 들면 다음과 같다.
public static void main(String[] args){
FileInputStream fis = null;
try{
fis = new FileInputStream("");
}catch(IOException e){
}finally {
try {
fis.close();
}catch (IOException ie){
}
}
}
FileInputStream객체를 생성하기 위해, try블럭으로 감싸준다.
그런데 final블럭에서 FileInputStream객체를 close()하기 위해, try블럭이 또 필요하다.
따라서 2중 try문이 사용되는데 이를 위해 try with resource라는 문법이 있다고 한다.
이 문법을 사용하면, finally블럭에서 직접 close()할 필요없이, 자동으로 close()를 실행해준다.
ex)
public static void main(String[] args) {
try(FileInputStream fis = new FileInputStream("")){
}catch(IOException e){
}
}
나중에 SQL파트에서 DB에 연결하는 상황에서 또한 필요하다고 한다.