요약
총 공부시간
7시간 11분 21초
최대 집중 시간
2시간 45분 50초
시작 시간
10시 12분
종료 시간
23시 32분
자세한 내용
공부 시간
10:12 ~ 10:23
10:24 ~ 11:11
12:25 ~ 14:11
19:05 ~ 21:51
21:52 ~ 23:32
공부 내용
전공 복습
- 소프트웨어 공학
- 소프트웨어 개발 방법과 설계
- 객체지향, 프로세스 지향
- 객체, 클래스, 인스턴스, 캡슐화, 정보은닉, 상속, 다형성
- 소프트웨어 개발 방법과 설계
- 컴퓨터 정보 처리
- 이건 스터디랑 하는게 있어서 따로 복습은 안했음. 어차피 외우는 부분이기도 하고.
인공지능
- 알고있는 개념이긴 한데, 모두의 딥러닝 책이 정말 알기 쉽게 설명이 잘 되어 있는 듯
Notion - 퍼셉트론
Notion - 다층 퍼셉트론
단어 복습
- 9, 10, 11
자바 과제
좀 난해했다. thread와 DataOutputStream에 대해 잘 알아야 쉽게 해낼 수 있다.
Runnable은 생성자나 객체를 불러준 쪽에서 아래 코드처럼 불러줘야한다.
Thread th = new Thread(recv_ta); th.start();
DataInputStream에서 readLine()은 개행문자가 없으면 다음으로 넘어가지 않는다. 그래서 JTextField의 getText()를 사용한다면 따로 개행문자(\n)을 추가해줘야한다.
Server Socket
public class ChatServer extends JFrame implements ActionListener{ private BufferedReader in = null; private BufferedWriter out = null; // private DataInputStream bis = null; // private DataOutputStream bop private ServerSocket serverSocket = null; private Socket socket = null; private Receiver recv_ta; private JTextField send_tf; public ChatServer() { setGUI(); connect(); } public void setGUI() { setTitle("서버 채팅 창"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container c = getContentPane(); c.setLayout(new BorderLayout()); recv_ta = new Receiver(); recv_ta.setEditable(false); send_tf = new JTextField(); send_tf.addActionListener(this); add(new JScrollPane(recv_ta), BorderLayout.CENTER); add(send_tf, BorderLayout.SOUTH); setSize(400, 200); setVisible(true); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getSource()==send_tf) { try { String msg = send_tf.getText(); // String msg = "s"; out.write(msg+"\n"); out.flush(); recv_ta.append("\n서버 --> "+msg); int pos = recv_ta.getText().length(); recv_ta.setCaretPosition(pos); send_tf.setText(null); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } private void connect() { try { serverSocket = new ServerSocket(12345); recv_ta.append("클라이언트와 연결 대기 중\n"); int pos = recv_ta.getText().length(); recv_ta.setCaretPosition(pos); socket = serverSocket.accept(); recv_ta.append("클라이언트와 연결 생성 성공"); int pos1 = recv_ta.getText().length(); recv_ta.setCaretPosition(pos1); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); Thread th = new Thread(recv_ta); th.start(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private class Receiver extends JTextArea implements Runnable{ // Thread th; // // public Receiver() { // th = new Thread(this); // th.start(); // } @Override public void run() { // TODO Auto-generated method stub String msg = "1"; while(true) { try { // System.out.println(msg); // if((msg = in.readLine()) != null) { msg = in.readLine(); this.append("\n 클라이언트 --> " + msg); // System.out.println(msg); int pos = recv_ta.getText().length(); recv_ta.setCaretPosition(pos); // } } catch (IOException e) { // TODO Auto-generated catch block System.out.println(e.getMessage()); } } } } public static void main(String[] args) { new ChatServer(); } }
Client Socket
public class ChatClient extends JFrame implements ActionListener{ private BufferedReader in = null; private BufferedWriter out = null; private Socket socket = null; private Receiver recv_ta; private JTextField send_tf; public ChatClient() { setGUI(); connect(); } public void setGUI() { setTitle("클라이언트 채팅 창"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container c = getContentPane(); c.setLayout(new BorderLayout()); recv_ta = new Receiver(); // Thread th = new Thread(recv_ta); // th.start(); recv_ta.setEditable(false); send_tf = new JTextField(); send_tf.addActionListener(this); add(new JScrollPane(recv_ta), BorderLayout.CENTER); add(send_tf, BorderLayout.SOUTH); setSize(400, 200); setVisible(true); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getSource()==send_tf) { try { // String msg = "cl"; String msg = send_tf.getText(); out.write(msg+"\n"); out.flush(); recv_ta.append("\n클라이언트 --> " + msg); int pos = recv_ta.getText().length(); recv_ta.setCaretPosition(pos); send_tf.setText(null); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } private void connect() { try { socket = new Socket("127.0.0.1", 12345); recv_ta.append("서버와 연결 성공"); int pos = recv_ta.getText().length(); recv_ta.setCaretPosition(pos); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); Thread th = new Thread(recv_ta); th.start(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private class Receiver extends JTextArea implements Runnable{ // Thread th; // // public Receiver() { // th = new Thread(this); // th.start(); // } // @Override public void run() { // TODO Auto-generated method stub String msg = ""; while(true) { try { // if((msg = in.readLine()) != null) { msg = in.readLine(); this.append("\n 서버 --> " + msg); int pos = recv_ta.getText().length(); recv_ta.setCaretPosition(pos); // } }catch(IOException e) { e.printStackTrace(); } } } } public static void main(String[] args) { new ChatClient(); } }
소감
평일에는 따로 공부할 시간이 많이 부족해서 참 문제다
그래서 중간 중간 남는 시간에 공부를 해봤는데, 괜찮은 것 같다.
버리는 시간에 공부를 해서 뭔가 효율적으로 느껴진다.
어제 인공지능을 안했구나
아직 습관이 안들어서 그런거 같네
앞으로는 3장씩 해야겠다
아, 써야하는 보고서 종류가 3가지나 된다.
언제 다쓰지,
목금토에 좀 써야겠다.
자세한 기록은 일을 끝내자마자 바로바로 작성을 해야겠다.
하루를 리뷰하는 겸 자기전에 몰아서 작성하려고 하니까 잘 기억이 안난다.
내일부터는 끝내자마자 바로바로 써야겠다.
Notion 주간 계획서 템플릿 받은것도 좀 적응해봐야지
책좀 읽고 싶은데, 사둔 책이 없다.
전공같은 것들 말고 소설이나 에세이, 수필, 시 같은 것들을 읽어서 머리를 정화시키고싶다