날아라쩡글이의 블로그입니다.
System, Wrapper, math class 본문
728x90
반응형
System class
- 자바실행환경이 설치된 시스템(컴퓨터)에 대한 유용한 값과 객체를 제공하는 클래스이다.
- java.lang패키지에 속해있다.
- System 클래스의 모든 필드와 모든 메소드는 정적필드, 정적 메소드이다.
- 제공하는 것은
- err : error를 출력한다.(모니터, 콘솔) PrintStream
- print, println, printf
- in : 표준입력을 출력한다.(키보드) InputStream
- read method
- out : 표준출력을 출력한다. (콘솔, 모니터) PrintStream
- err : error를 출력한다.(모니터, 콘솔) PrintStream
- System.out.println(System.err);//java.io.PrintStream@7d6f77cc
- System.out.println(System.in);//java.io.BufferedInputStream@5aaa6d82
- BufferedInputStream으로 출력전용스트림이 존재하는 것을 확인 할 수 있다.
- System.out.println(System.out);//java.io.PrintStream@73a28541
- 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 : 대상배열에 저장할 원본배열의 데이터 길이
- arrayCopy Ctrl+마우스 우클릭을 하면 native라고 C나 C++로 구현된 코드라는 표시로 작성되어있다.
wrapper class
- 기본자료형 타입에 대응되는 클래스다.
- 기본자료형 값을 가지고 있는 객체를 만들 수 있다.
- java.lang패키지에 정의되어 있다.
- 사용해야할 때
- 기본자료값이 아닌 객체로 정의해야할 때
- 호출할 메소드의 매개변수가 객체를 요구할 때
- null값이 저장될 가능성이 있을 때
- 해당 기본자료형값에 대한 다양한 기능을 실행해야할 때
- 지원하는 wrapper클래스
-
기본자료형 Wrapper class byte Byte short Short int Int long Long float Float double Double char Char boolean Boolean - Why? 연산자와 기본자료형의 경우 객체가 아니다, 그렇기 때문에 객체만 담을 수 있는 타입이 있는데, 숫자 1을 담고 있는데, 담기지 않아서 정수를 표현하는 클래스를 이용해서 담는 것이다.
- When?
- Object[] obj = new Object[10];
- obj[0] = 1; 객체가 아니여서 담을 수 없다. Object의 자손이 아니다
- public boolean equals(Object obj){}
- 기본자료형은 Object의 매개변수로써 전달 할 수 없다.
- public object method(){ return 1; }
- 반환값이 Object기 때문에 return값을 1로 설정할 수 없다.
- Object[] obj = new Object[10];
4. null값이 필요할 때
- 가입정보를 받을 때, name과 email, password는 필수사항이지만, age는 선택사항이여서 입력을 하지않았다.
- 객체의 기본값은 null이고 기본자료형은 기본값이 0으로 설정되어있다.
- 객체의 기본값을 보면 빈칸이라는 느낌이 오지만, int age의 경우 0이 설정되있기 때문에 0살이라는건지 ,값을 입력안한건지 확인이 어렵다는 것이다.
Auto Boxing/ Auto unBoxing
- int a = 10;
- Integer a1 = new
Integer(10); - Integer a2 = new
Integer("1000"); - 참조변수 a에는 기본자료형 타입의 정수값 10이 저장되어 있다.
- a1에는 정수 10을 포함하고 잇는 Integer객체의 주소값을 가지고 있다.
- a2에는 문자열"1000"을 1000으로 변경해서 포함하고 있는 Integer객체의 주소 값을 가지고 있다.
- 그러나 중간에 선이 가있는데, Deprecated가 적혀있다.
- 자바 9버젼부터 폐기 예정이라는 뜻이다. 자바 8버젼에서는 사용이 가능하다.
- Why? 자바 5버젼부터 AutoBoxing 과 Auto unBoxing이 사용되기 때문이다.
- 오토박싱, 오토 언박싱(자바 5버젼부터 지원하는 기능이다. )
- 기본자료형을 wrapper클래스타입의 객체로
- wrapper클래스타입의 객체를 기본자료형의 값으로 변경하는 것을 자동으로 처리하는 것을 의미한다.
오토박싱
- 변수의 타입의 wrapper클래스 타입과 저장할 변수의 타입이 기본자료형일 때 자동으로 변수의 타입과 일치하는 wrapper객체를 생성해서 기본자료형 값을 저장한 다음 그 객체를 참조변수에 대입하는 것이다.
- 왼쪽의 객체를 따라서 객체를 생성하는 것을 오토 박싱이라고 한다.
- 이렇게도 사용이 가능하다. 모든객체의 조상인 Object를 바라보고 있기 때문에 1번 2번처럼 작성해도 상관없다.
- Object의 타입의 참조변수 b1은 Integer객체의 내부에 있는 Object를 클래스 형변환 하여 참조하고 있기 때문이다.
오토언박싱
- wrapper클래스 타입의 객체에 저장된 값을 기본자료형 타입의 변수에 대입하면 자동으로 해당 wrapper객체가 가지고 있는 기본자료형 값이 대입된다.
- 오토언박싱으로 객체+ 객체+ 정수의 값을 변환하지 않고 계산할 수 있다.
Integer method
- integer의 경우 MAX_VALUE/ MIN_VALUE로 static method로 최대값 2^63-1과 최소값-2^63이 정해져 있다.
- class Integer는 compare(int x, int y)의 값처럼 비교를 할 수 있다. 두수가 같으면 0이고, x값이 크면 양수, y값이 크면 음수의 값이 출력된다.
- 양수로 결과값이 출력되는 것은 max(int a , int b), min(int a , int b) 으로 비교할 수 있다.
- 역순기능도 존재한다.
- Integer.toBinaryString(정수값) : 2진수의 값으로 출력된다.
- Integer.toOctalString(정수값) : 8진수의 값으로 출력된다.
- Integer.toHexString(정수값) : 16진수의 값으로 출력된다.
wrapper클래스의 parseXXX(문자열 메소드)
- 문자열을 기본자료형 타입의 값으로 변환하는 정적메소드
- int = Integer.parseInt(String text);
- 정수를 작성할 때에는 _을 써도 되지만, 문자열을 작성할 때에는 하이픈을 넣을 수 없다.
- 정수변환으로 인하여 소숫점값을 허용하지 않는다.
- 숫자외에 어떤 문자도 있어서는 안된다.
- 공백문자를 허용하지 않는다.
- 자리수를 나타내는 , 문자는 허용하지 않는다.
- Long과 Double도 마찬가지다.
- 사용자가 입력한 것에서 공백을 없애고 숫자외의 값이 들어가지 않도록 조절해야한다.
- 사용자의 입력을 최소화하고 고를 수 있도록 조정하는 것이 중요하다
- long = Long.parseLong(String text);
- double = Double.parseDouble(String text);
- 실수로 변환하기 때문에 소숫점 값을 허용한다.
- 소숫점만 표시하고, 소숫점 이하 값이 없어도 상관없다.
- 정수형의 문자열도 상관없다.
- boolean = Boolean.parseBoolean(String text);
- boolean은 글자 true와 false를 boolean값으로 변경해준다.
- Java.lang.NumberFormatException : 숫자형식의 문자열이 아닌 값을 숫자로 변환할 때 발생하는 오류이다.
math 클래스
- 수학 연산과 관련된 기능을 제공하는 클래스이다.
- 모든 필드와 모든 메소드가 정적필드, 정적메소드이다.
- java.lang package내부에 있는 class이다.
method
- double random();
- 난수 얻기
- 매번 새로운 값이 나타나는 , 랜던값을 얻게 되는 숫자
- random()은 0.0보다 크거나 같고, 1.0보다 작은 임의의 실수를 반환한다.
- (int)(Math.random()*6)+1;
- 1~6까지의 숫자를 얻기
- indexs는 0부터시작해서 5의 값이 출력되기 때문에 +1을 입력해줘서 전체적으로 1씩증가되게 입력한다.
- random의 반환값의 경우 double이기 때문에 강제형변환을 하여 정수로 바꿔준다
- long round(double value);
- 반올림 된 값을 얻기
- double ceil(double value);
- 천장값 얻기
- 값이 실수값 일 때 자신보다 큰 정수중에서 가장 작은 정수값을 반환한다.
- 가장큰 정수 4,5,6,7... 가장작은 정수 4
- 반환값은 실수지만 정수로 변환하여 많은 사용을 한다.
- ex) 목록을 표시하는 게 1페이지당 20개일 경우 데이터는 25개를 가지고 있다
- 그럼 이 ceil을 이용하여 2페이지로 표시 할 수 있다.
- double floor(double value);
- 바닥값 얻기
- 값이 실수값 일 때 자신보다 작은 정수중에서 가장 큰 정수 값을 반환한다.
- 가장작은 정수 ...1,2,3 가장큰 정수 값 3
- 반환값은 실수지만 정수로 변환하여 많이 사용한다.
- 천장값과 바닥값의 경우 paging처리를 위하여 많은 이용을 한다.
반응형
'중앙 HTA (2106기) story > java API story' 카테고리의 다른 글
Set interface, List interface(iterator) (0) | 2021.10.07 |
---|---|
Generic(제네릭) (0) | 2021.10.05 |
StringBuilder, StringBuffer (0) | 2021.10.03 |
String Class (0) | 2021.10.01 |
java API, java.Lang (0) | 2021.09.30 |
Comments