System.err.println();와 System.out.println();을 작성하게 되면 출력결과값이 매번 다르게 출력이 된다.
System.err가 사용하는 출력객체와 System.out이 사용하는 출력객체가 서로 다른 객체기 때문에 각각 다른 전송통로로 메세지를 보낸다.
따라서, 어떤 메세지가 먼저 출력될지 매번 변하게 된다.
서로 통로가 다르기 때문에 어떤 문장이 먼저 갈지 장담할 수 없다. 쓰레드로 되기 때문에 어쩔때는 err의 문자열이 out의 문자열이 출력된다.
그렇다면 이렇게 줄바꿈이 없이 진행될까?
출력장치의 줄바꿈인지 오류메세지의 줄바꿈이 실행안된 건지 모름
왜 중간에 글자가 섞이지 않을까?
읽어들일 때 줄바꿈의 문자 바로 앞까지 읽어들이기 때문에 예상대로 출력할 수 없다.
그렇기 때문에 에러메세지가 뜨면 섞여서 나올 것이다.
System.in
표준 입력 장치이다.
Scanner -> enter칠때까지 알 수 있다.
String의 문자열 입력받을 때 사용하는 메소드인 next();는 공백앞까지 읽어들인다는 뜻이다.
nextLine();은 enter까지 읽어들인다는 메소드로 문자열 후에 nextInt();를 입력하고 또 다시 문자열을 입력하게 될 경우 버벅거림이 발생한다. enter까지 읽어들이기 때문인데, 이때 nextLine();을 한번더 작성해준다. 혹은 next();로 사용해준다.
method
long System.currentTimeMilis();
현재 시간에 대한 유닉스 타임을 제공한다.
유닉스타임이란. 1969년 OS체제를 C언어 만든사람들, 벨 연구소에서 만들었다.
최초의 멀티사용자이다.
리눅스가 유닉스를 본따서 만들어진 것이다.
1970/1/1 00:00:00를 지금 이 순간까지 시간을 1/1000초 단위로 출력한다. 그렇기 때문에 값이 매번 변한다.
1969년 아래로가면 -의 값이 나오고 1970/01/01위로 올라갈 수 록 +의 값이 나온다.
홈페이지에서 개발자 도구로 확인해보면 유닉스 타입으로 html이 올라가 있는 것을 확인할 수 있다.
많이 사용되는 메소드이다.
컴퓨터의 특징으로는 site를 받아오면, web broweser를 저장한다. 같은 site를 들어가면 저장한 것을 다시 가져온다.
예전의 인터넷의 경우 회선이 느리고, 느린 회선으로 인해서 한번 접속하면 web brower을 저장하여 그 화면을 다시 출력했다. 그러나 현재의 인터넷의 경우 회선이 빠르고 한번 접속할 때마다 다른 화면이 출력되어야하기 때문에
유닉스타임을 이용하여 Url이 매번 달라져 새로운 모습을 출력시킬 수 있다. 자바스크립트에서서도 유닉스 타임이 많이 사용되고,
현재 자바의 겨우 저장작업을 진행하고, 사용자의 그림을 업로드 시킬때,
즉, 인스타그램과 갤러리 사이트 게시판에 사진을 업로드 시키면 같은 이름의 파일이 올라갈 수 있다.
그러나 파일 이름이 중복이 되어서는 안되고, 매번 사진이름이 달라져야하기 때문에
유닉스 시간+ 파일이름 으로 저장하면 같은 이름의 파일이 존재하지 않게 된다. 유닉크한 값을 사용하게 된다.
동시에 올린다고 하더라도 1초에 1/1000초값이 중복될 일은 극히 드물기 때문에 실제 저장된 파일이름이 다르다.
그리고 파일이름을 출력할 때에는 spli을 이용하여 잘라내서 보이면 된다.
현재 값은
50년동안 1조6천억정도의 값이 있고, 50년뒤에도 3조2천 ,50년뒤에 6조4천으로 100년간은 13자리의 값을 유지한다.
컴퓨터의 현재시간정보를 알 수 있다.
시스템의 현재 날짜와 시간정보를 제공하는 객체를 생성한다.
Date now = new Date();
생성이 되는 그 순간에 System에 시간이 보안된다.
toString이 재정의 되어있어서 날짜정보는 System.out.println(now); 이렇게 출력한다.
Date day = new Date(0);
Date값을 0으로 입력하면 유닉스 시간의 첫 시간이 출력된다.
1970/1/1 00:00:00으로 한국은 영국보다 9시간이 빠르기 때문이다.
유닉스타임은 영국을 기준으로 해서 작성이 되어있고, Date의 해당되는 시간을 넣으면 날짜를 얻을 수 있다.
우리나라는 9시간이 빠르기 때문에 00시 출력이 아닌 09시에 출력된다.
날짜와 시간정보를 제공하는 객체는 java.util.Date
날짜 정보를 제공하는 객체는 java.sql.Date //날짜정보만 제공된다.
시간 정보를 제공하는 객체는 java.sql.TimeStamp
날짜 정보를 제공하는 객체는 java.time.LocalDate
시간 정보를 제공하는 객체는 java.time.LocalTime
Local이란 내가 지금 살고있는 이 지금을 의미한다.
날짜와 시간 정보를 제공하는 객체는 java.time.LocalDateTime이다.
Date는 특정날짜와 특정시간이 출력되는데, java.util에 있는 Date는 Deprecated가 작성되어있다. 사용하지 말라는 이야기이다.
많은 부분이 사용불가 선언이 되어있어 nethod도 거의 대부분 사용불가 선언이 되어있다. 현재시간정보를 갖고있는 객체를 만들 때 Date를 사용한다.
그러나 날짜에 대한 연산 (a날짜~b날짜의 기간, 몇일 남았는지 등)을 할 때에는 java.util이 제공하지 않아서 이전에는 API의 도움을 많이 받았다. 제일 불편했기 때문에 기능이 낮아져서
자바 8버젼부터는 java.time.package가 추가되어 날짜 관련한 작업에 대한 클래스를 제공하게 되었다.
java.time.*;는 다양한 라이브러리를 지원한다. 1.8 작업이 수훨해졌다.
ex) 날짜관련은 특정날짜입력이 아닌, 마감일, 예약일이 대부분으로 진행된다. 티켓예약날짜, 주문, 가입, 구매날짜, 등록날짜등 글을 쓰는 순간 입력이된다.
Date는 날짜관련해서 Data는 생성됫을 때 날짜를 많이 사용한다. new Date로 획득된다.
Time은 날짜의 간격, 미래날짜를 설정하는 작업을 할 때 time라이브러리로 계산한다.
환경 변수 정보와 시스템 환경 변수 정보를 제공한다.
System은 시스템과 관련된 환경설정 정보를 제공한다.
반환타입을 확인해야한다.
System.getenv("확인하고 싶은 환경변수의 값 입력 ex) JAVA_HOME");
첫날에 java의 path정보를 환경변수에 입력하였다.
확인하고 싶은 환경변수의 값을 다르게하여 확인할 수 있다.
컴퓨터의 사용자 이름을 조회하는 것은 USERNAME이다.
Map을이용하여 내컴퓨터 AppData 저장위치등 path의 값을 전체적으로 출력하여 확인할 수 있다.
System.env는 사용자의 디렉토리로, 정보출력을 할 수있다. LocalAppData가 출력이 가능하다.
시스템의정보 또한 출력할 수 있다.
Properties System.getProperties();
시스템의 운영체제, 시스템의 아키텍처, 설치의 자바에 대한 정보를 제공한다.
getenv는 환경변수를 출력하고 getProperties는 컴퓨터에 대한 정보를 출력한다.
file separator 는 window는 \ 역슬레쉬가 표시된다. 리눅스는 /으로 파일을 구분한다.
line separator 는 줄바꿈문자로 OS체제에서는 \n으로 표시되고, 다른 곳중에서는 \c,\r을 사용한다.
가끔씩 사용하는 일이 있다. 운영체제의 구분자가 어떤건지, 문자 어떤걸 사용할지 줄바꿈문자를 어떤걸 사용하는지 확인이 가능하다.
System으로 제공이 가능한 것
표준입력장치, 표준출력장치, 표준에러출력장치와 연결된 스트림을 제공한다.
컴퓨터의 환경변수, 프러퍼티의 값을 제공한다.
컴퓨터의 현재 시간 정보를 제공한다.
System class는 method arrayCopy를 제공한다. 배열크기는 수정 못 하지만, 더 넓은 배열을 만들어서 내용을 복제하여 담을 수 있다.
배열 복사하기
원본의 배열이 int[] src = {10, 20, 30, 40, 50}; 가 있을 경우 60, 70, 80을 추가해야하는 경우
배열 큰 것을 만들어서 복사해서 넣어둔다.
데이터는 언제나 가변적이기 때문에 10개에서 index칸이 모자랄 경우 20짜리로 array를 만들어서 20에 이동시키면된다.
StringBuilder와 StringBuffer안의 Buffer복사하는 것처럼 복사한다.
System.arraycopy(Object[] src, int srcPos, Object[] dest, int destPos, int length);
src : 원본배열, srcPos : 원본배열부터 복사시작위치, 대부분의 시작위치는 0이다.
dest : 대상배열, destPos : 대상 배열에 원본배열이 저장될 위치 , length : 대상배열에 저장할 원본배열의 데이터 길이