'공부 기록' 시리즈20.11.17 - 공부 기록

김학진

@mildsalmon

흔치않고, 진귀하다.

요약

총 공부시간

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 주간 계획서 템플릿 받은것도 좀 적응해봐야지

책좀 읽고 싶은데, 사둔 책이 없다.
전공같은 것들 말고 소설이나 에세이, 수필, 시 같은 것들을 읽어서 머리를 정화시키고싶다

😥 작성된 댓글이 없습니다!
댓글을 작성하기 위해 로그인이 필요합니다.