Archive

2020-12-30 TIL

|

2020-12-30 TIL


  • 오늘 한 것
    1. 학원 비대면 수업(15:30~22:00) 입출력2 & 계산기 풀이 - 공포의 계산기….계산기가 이렇게 어려울줄이야.. 수업에서 풀이를 한 번 보여줬으니 주말동안 안보고 처음부터 끝까지 구현하기 도전이다 😤😤
    2. 학원 과제 친구?관리 프로그램 이벤트 걸기 - 얼마 안걸릴줄 알고 얕잡아보고 있었는데 이거 계산기보다 더 골때린다.. 로직을 짜는건 계산기보다 어렵진 않은것 같은데 이것저것 추가하고 세부적으로 생각해야 할 부분이 너무 많다. 내일까지 이어서 하겠네 이거.. 흐음..
    3. 블로그 포스팅 (Java Day 18) - 파일 입출력 스트림에 대한 부분을 포스팅을 할까말까 하다가 나중에 네트워크에서도 쓰이고 이걸 응용한 문제도 풀어야해서 한 번 정리하고 올렸다.

  • 내일 할 것
    1. 학원 과제 Freind Manager에 Event 걸기
    2. 학원 비대면 수업(15:30~22:00)
    3. 블로그 포스팅 (Javascript Day 9, Java Day 19)

  • 끝으로

boolean을 잘 활용하자!

오늘의 한 줄 총평 : boolean을 잘 활용하자!


Java Day 18 IO - File

|

Java Day 18 IO - File


  1. 스트림

    • 데이터를 목적지로 입출력하기 위한 방법 * 스트림에서 데이터를 쓰고 읽을 수 있다
    • 연결하고자 하는 Device에 따라 다양한 스트림이 존재 * FIFO(First In First Out) 데이터 구조로 데이터의 순서가 바뀌지 않는다
    • 읽기, 쓰기 동시에 못한다 * 스트림은 넣어진 데이터가 처리되기 전까지는 스레드가 지연상태에 빠진다. 즉, 네트워크 내에서 데이터가 모두 전송되기 전까지는 네트워크 스레드가 지연상태가 됨
    • 용도에 따른 분류 * 1차 스트림 : Device에 직접적으로 연결되는 스트림
      • 2차 스트림 : Device와 직접 연결하지 않고 1차 스트림과 연결을 통해서 Device에 접근, 부가적인 기능들을 가지고 있음
        • 데이터 전송 방향에 따른 분류
      • 입력 스트림 : Device로부터 데이터를 읽어오는 스트림
      • 출력 스트림 : Device에 데이터를 기록하는 스트림
    • 데이터 전송 단위에 따른 분류
      • 바이트 스트림 : 한 byte 단위로 읽고 쓰는 스트림
      • 문자 스트림 : 한 문자(2 byte) 단위로 읽고 쓰는 스트림


  2. File 클래스

    • File 클래스는 파일 혹은 디렉토리의 등록정보를 표현하는 클래스
    • File 클래스는 실제 파일의 내용을 포함하지 않는다
    • File 객체는 실제 파일의 존재여부와 상관없이 생성됨
    /*
    * 생성자
    * File(String path-name) : 문자열 path-name을 경로로 File 객체 생성
    * File(String parent, String child) : parent와 child를 연결한 경로로 File 객체 생성
    * File(File parent, String child) : parent 객체 경로와 child를 연결해서 객체 생성
    *
    * 메소드
    * exists() : 파일,디렉토리가 존재하면 true, 아니면 false
    * isFile() : 파일이면 true, 아니면 false
    * isDirectory() : 디렉토리면 true, 아니면 false
    * getPath() : 상대경로 반환, getAbsolutePath() : 절대경로 반환
    * getName() : 파일 혹은 디렉토리의 이름 반환
    * length() : 파일의 길이를 바이트로 반환
    * lastModified() : 파일의 마지막 수정날짜 반환(1970/01/01부터 현재까지의 밀리초)
    * createNewFile() : 파일을 생성하면 true, 못하면 false
    * mkdir() : 디렉토리 생성하면 true, 생성하지 못하면 false
    * delete() : 파일을 지우면 true, 못지우면 false
    * list() : 모든 파일과 디렉토리를 String 배열로 반환
    * renameTo(File dest) : dest 파일 객체로 이름을 바꾸면 true, 아니면 false
    */
       
    //Main 메소드 생략
    File directory = new File("c:/");
    if(directory.isDirectory()) {
        String[] fileNameList = directory.list(); //list 배열로 전달
        for(String fileName : fileNameList) { //향상된 for문으로 요소 출력
            System.out.println("이름 : " + fileName);
        }
    }//C드라이브의 모든 파일과 폴더가 출력된다 (숨김파일,폴더도)
       
    File f1 = new File("c:/newFile.txt");
    f1.createNewFile(); //파일 생성
       
    File f2 = new File("c:/newDirectory/dest.txt");
    f1.renameTo(f2); //f1의 파일이 f2로 이름이 바뀌어 이동된다
    


  3. Byte Stream

    • InputStream과 OutputStream의 상속관계

    인풋

    아웃풋


    • InputStream과 OutputStream의 주요 메소드

    메소드


  4. FileInputStream과 FileOutputStream

    • 생성자

    생성자

    • 메소드는 부모 클래스인 Input,OutputStream의 메소드를 주로 사용함


    //메인 메소드 생략
    byte read[] = new byte[100];
    byte console[] = new byte[100];
       	
    System.out.println("파일경로 : ");
    System.in.read(console); // c:/new/test.txt 텍스트 폴더로 가정
    String file = new String(console).trim();
    FileInputStream fis = new FileInputStream(file);
    fis.read(read,0,read.length); //0~100바이트 만큼 읽어옴
    System.out.println(new String(read).trim());
       
    if(fis != null) fis.close(); //사용 후 반드시 닫아줘야함
       
    // c:/new/test.txt의 내용을 100바이트만큼 console창에 출력
    


    // 메인 메소드 생략
    FileOutputStream fos = new FileOutputStream("c:/myProject/123.txt");
       
    String msg = "안녕?";
    fos.write(msg.getBytes()); //문자열을 바이트코드로 변환해야한다
       
    if(fos != null) fos.close();
       
    // 123.txt 텍스트 파일에 '안녕?' 이라고 작성되어 있다
    
    • FileInputStream과 FileOutputStream으로 파일 복사도 가능하나 byte 배열의 길이를 [1024*8] = 8kb만큼 지정해주고 파일을 옮겨쓰기 하면 속도면에서 훨씬 차이가 난다.


  5. DataInputStream과 DataOutputStream

    • 특정 데이터 타입과 포맷을 유지한 채 데이터를 읽고 쓸 수 있는 스트림
    • 특정 데이터 타입과 포맷에 맞는 메소드 제공
    // 메인 메소드 생략
    DataOutputStream dos = new FileOutputStream("c:/myProject/123.txt");
    FileOutputStream fos = new DataOutputStream(fos);
    int i = 10;
    double d = 3.14;
    String s = "안녕?";
    dos.writeInt(i);	// 데이터 타입에 맞는 메소드
    dos.writeDouble(d);
    dos.writeUTF(s);
               
    if(fos != null) fos.close();
    if(dos != null) dos.close();
       
    // 123.txt에 인코딩된 언어로 적혀있다
       
    FileInputStream fis = new FileInputStream("c:/myProject/123.txt");
    DataInputStream dis = new DataInputStream(fis);
    int i = dis.readInt();		// * 기록한 순서대로 읽어야한다
    double d = dis.readDouble();
    String s = dis.readUTF();
    System.out.println("i : " + i); 
    System.out.println("d : " + d);
    System.out.println("s : " + s);
       
    // 기록한 순서대로 10, 3.14, 안녕? 이 출력
    


  6. 문자 스트림

    • 바이트 스트림에 추가로 Reader, Writer 클래스를 제공하는데 2byte를 입출력 할 수 있는 문자기반 스트림이다.
    • 1 byte를 입출력하는 바이트 스트림은 영어로 구성된 파일, 동영상, 음악 파일 등이 적합
    • 2 byte를 입출력하는 문자 스트림은 영어 이외의 세계 모든 언어로 된 파일 입출력이 적합
    • 문자 스트림의 상속관계

    Reader

    Writer


    • Reader 클래스의 주요 메소드

    Reader메소드

    • Writer 클래스의 주요 메소드

    Writer메소드


  7. FileReader와 FileWriter

    • Reader, Writer 계열의 스트림은 버퍼를 내장하고 있다. 버퍼가 가득 채워지면 스트림으로 내보내는데 flush()는 버퍼가 가득차지 않아도 내보낸다.
    // 메인 메소드 생략
    FileWriter writer = new FileWriter("c:/myProject/123.txt");
    String s = "안녕하세요?";
    writer.write(s); //한 글자 단위로 기록
    writer.flush(); //내장된 버퍼가 가득 
       
    if(writer != null) writer.close();
    //123.txt에 '안녕하세요?'가 작성되어 있다
       
    FileReader reader = new FileReader("c:/myProject/123.txt");
    int value = 0; //read()를 저장할 저장소
    while((value = reader.read()) != -1) {
        System.out.print((char)value);
    }//'안녕하세요?'가 출력된다
    


  8. BufferedWriter와 BufferedReader

    • 스트림의 읽고 쓰는 성능을 개선하기 위해 내부에 버퍼를 가지고 있는 스트림
    // 메인 메소드 생략
    FileWriter fw = new FileWriter("c:/myProject/123.txt");
    BufferedWriter bw = new BufferedWriter(fw);
    bw.write("테스트");
    bw.newLine(); //한 줄 띄우기
    bw.write("입니다" + System.getProperty("line.separator")); ////한 줄 띄우기
    bw.write("안녕?");
    bw.flush(); //버퍼 비우기
    //123.txt에 한 줄씩 입력
       
    FileInputStream fis = new FileInputStream("c:/myProject/123.txt");
    InputStreamReader isr = new InputStreamReader(fis);
    BufferedReader br = new BufferedReader(isr);
    String str = null;
    while((str = br.readLine()) != null) { //한 줄씩 읽어오기
        System.out.println(str);
    }
    //테스트
    //입니다
    //인녕?
    //한 줄씩 출력된다
    


  9. PrintStream과 PrintWriter

    • 모든 자료형을 출력 할 수 있는 print(), println() 메소드가 있다
    • 다른 스트림과 다르게 생성자로 Auto Flush 기능을 사용 할 수 있다




참고 자료


이것이자바다

자바프로그래밍100% 실전가이드

KG아이티뱅크 자바 강의자료

2020-12-29 TIL

|

2020-12-29 TIL


  • 오늘 한 것
    1. 학원 비대면 수업(15:30~22:00) 입출력 - 스트림에 대해 배웠는데 정말 무슨 소리인지 하나도 못알아들었다. 사실 집중력도 많이 떨어져있었고 솔직히 귀에 안들어왔다… 나름 슬럼프에 빠진건가..(뭘 했다고)
    2. 학원 과제 AWT로 계산기 구현 - 화면 구현은 별로 막힘없이 했는데 계산기 로직을 짜는게 문제다.. 한 번하는 계산까지는 구현을 하겠는데 예를 들어 연산을 여러번 하는 경우, 10+5를 하고 (=을 누르지 않고) * 를 더 한다고 하면 * 을 누르는 순간 15가 나와야하는데 50이 나온다..흐으으으으으음 계산기 하나로 이렇게 쩔쩔매다니 ㅠ

  • 내일 할 것
    1. 학원 과제 Freind Manager에 Event 걸기
    2. 학원 비대면 수업(15:30~22:00) 입출력 스트림
    3. 블로그 포스팅 (Javascript Day 9, Linux/CentOS8 NFS)

  • 끝으로

갑자기 인터넷이 고장나는 바람에 아침부터 쌩쇼를 다 한듯.. 수리 기사님은 다음 날 온다하고.. 당장 학원 수업은 들어야하는데 인터넷이 없으니 아무것도 못하고..총체적 난국이었다. 하는 수 없이 본가로 피난(?)을 와서 수업을 들었다. 내년에 좋은 일이 있으려고 액뗌하는 건가 ㅎ…행복 회로를 돌려본다.

오늘의 한 줄 총평 : 긍정적으로 생각하자…


2020-12-28 TIL

|

2020-12-28 TIL


  • 오늘 한 것
    1. 학원 비대면 수업(15:30~22:00) 이벤트 - Javascript로 HTML 요소들에게 이벤트를 걸었던것처럼 Java에서 구현한 GUI 화면에 여러 이벤트를 걸어 사용자의 행동을 제어하거나 편의를 제공하는 Event에 대해서 배웠다. 눈에 바로바로 보여서 재밌긴 하나 너무 노가다 작업이 많은듯(?)
    2. 노마더코더 JS 유튜브 강의 TODO List 만들기 - 본격 TODO List 만들기가 끝이났는데 구조와 원리를 대강 알았으니 한 번 스스로의 힘으로 다시 처음부터 만들어보고 CSS를 조금 더 손보면 될 것 같다.


  • 끝으로

java도 그렇고 javascript도 그렇고 이론이라는 인고의 시간을 거치고 직관적으로 눈에 보이는 무언가를 만들기 시작해서 그런가 코딩에 재미가 점점 더 붙는것 같다. 물론 이론은 끝이 없고 무한히 공부해야겠지만 이론’만’ 하던 시절보다는 나은듯

_오늘의 한 줄 총평 : 만들면서 배우자


2020-12-27 TIL

|

2020-12-27 TIL


  • 오늘 한 것
    1. 이것이 리눅스다 FTP 서버 구축&운영 - 리눅스에서 기본으로 제공하는 vsftpd 패키지를 이용해서 FTP 서버를 구축하고 외부 컴퓨터에서 접속해보는 실습을 했다. 파일 다운로드,업로드도 정상적으로 작동됐다. firewall도 끄고 보안 생각없이 작동만 실습해보는 간단한(?) 실습이었다.
    2. 노마더코더 JS 유튜브 강의 TODO List 만들기 - 전에 JS30 Tutorial 중에 Local Storage를 활용해서 TODO List 비스무리한 것을 만들었던 적이 있어서 이해가 비교적 쉽게 되었다. 이벤트를 거는 것부터 JS로 HTML 요소를 조작하는 방법을 이번 기회게 잘 배워둬야겠다.
    3. 학원 과제 AWT 화면 구현 - 친구 관리(?) 프로그램을 구현하기에 앞서 java AWT util을 이용해서 화면 구현을 했다. layout을 잡는 것부터 배치까지 구식 기능으로 노가다 작업을 하는 것이 많았지만 HTML/CSS를 미리 접해봐서 그런지 ‘이렇게 하면 될 것이다’ 라는게 눈에 좀 보였다.


  • 끝으로

크리스마스+연말 연휴 이틀 놀았으니 다시 공부하자…

_오늘의 한 줄 총평 : 연휴 끝