티스토리 뷰
도서관에 반밖에 못본 SQL 책 반납하러 갔는데 반납한 책이 당일대출이 안되는 바람에 SQL 책을 못빌려왔다..
어쩔 수 없이 다른 책을 찾아보는 중에 자바 알고리즘 입문책이 있어서 이거라도 정리해보기로 했다.
입문 난이도라서 1주면 뗄수 있지 않을까 기대하면서 시작!
자료형 | 메서드 | 범위 |
boolean | nextBoolean() | true/false |
byte | nextBite() | -128 ~ 127 |
short | nextShort() | -32768 ~ 32767 |
int | nextInt() | -2,147,483,648 ~ 2,147,483,647 |
long | nextLong() | 개큼 |
float | nextFloat() | 조금 큼 |
double | nextDouble() | 개큼 |
String | next() | 문자열(스페이스, 개행문자로 구분) |
nextLine() | 문자열 1줄(개행문자로 구분) |
자바는 배운지 몇달 안됐다만 다른거 필요없고 int, long, double, String만 주구장창 쓴다.
소수점 연산을 할때도 double이 더 정확하니 굳이 float을 쓸 필요성이 없다..
코테 문제를 풀다보면 가끔씩 int형 범위를 초과하는 연산이 필요할 때가 있는데 그때 long을 쓰면 된다.
(+ String은 자바의 자료형이 아니라 "클래스"이다.. 유저가 문자열을 다루기 쉽게끔 미리 만들어놓은것)
-> java.lang 패키지에 속해있음.
--------------------------------------------
★ 왜 1byte의 크기가 -128 ~ 127일까?
> 1byte = 8bit. 맨 앞의 비트는 부호를 판단하는데 사용됨.
따라서 0000 0000 ~ 1111 1111 이 1byte의 범위가 된다.
의외로 부호 비트가 0이면 양수(+)이다.
그리고 부호 비트가 1이면 음수(-)이다.
따라서
0000 0001 ~ 0111 1111이 양수 1 ~ 127까지의 표현범위가 된다.
이제 음수의 범위를 알아봐야 하는데 주의해야할 점은 >>2의 보수<< 법을 사용한다는 데에 있다
(2의 보수를 사용하는 이유는 0을 표현하는 비트가 1000 0000과 0000 0000 으로 두개나 존재하는걸 방지하기 위함)
원래 비트 -> 1의 보수 -> 2의 보수
1000 0000 -> 0111 1111 -> 1000 0000 = -128
1111 1111 -> 0000 0000 -> 0000 0001 = -1
따라서 음수의 범위는 -128 ~ -1까지로 나타낼 수 있는 것이다..
그럼 0은? 딱 하나 남는 자리인 0000 0000이 가져가면 옳겠다.
+ unsigned bit는 부호비트가 따로 없어 0 ~ 255까지의 값을 표현할 수 있다.
--------------------------------------------
+) char형은 어디감?
char형은 문자 한 단어를 나타낼 수 있다.
문자 한 단어를 유니코드 체계를 통해 변환하기 때문에 실제 담고있는 값은 정수를 담고있다.
- char형은 2byte다.
- 한글 한글자를 표현하기 위해서는 2byte가 필요하다
--------------------------------------------
+) nextInt() 와 nextLine()을 같이쓰면 골때린다
1학년때 C로 코딩을 입문할때부터 자주 속을 썩이던 문제가 있다. 바로 입력시 버퍼와 관한 문제다.
그래서 그냥 무지성 getchar() 이거 남발했던 기억이 난다.. 아무튼 확실하게 알고넘어가는게 좋을 것 같아서 다시 정리함
문제점: nextInt()는 정수만 가져간다
터미널에서 정수를 입력한다고 생각해보자. 정수 1만 치면 끝인가?? 아니다.. 엔터키를 눌러줘야한다
결국 그럼 나는 1을 치려고 의도했으나 실제로 치게된건 1\n 두글자가 되버리는 것이다.......
여기서 이 야박한 nextInt()는 입력에서 1만 쏙 빼가고 버퍼에 \n 홀로 남겨둬버린다
이 다음에 nextLine() 메서드가 문자열을 읽기 위해 버퍼를 탐색하는데 \n이라는 값이 이미 들어와있으니 추가로 값을 입력하라고 요청하지 않고 그냥 홀랑 \n만 들고 가버리는 일이 생기는 것이다..
해결방법 1. nextInt를 사용한 이후에 버퍼 비우는 용도의 nextLine()을 하나 의미없이 깔아둔다
해결방법 2. nextInt 메소드를 쓰지않고 그냥 Integer.parseInt(nextLine())으로 정수값을 받아온다
+) nextInt, next() 메소드는 분리자(스페이스, \n 등) 을 제외하고 읽어오기 때문에
1 2 3 4\n 5 6 7 8 쭉쭉 입력해도 nextInt만 사용하면 아무 문제될 것이 없다.
- 다만 분리자를 포함하여 읽어오는 nextLine 메소드를 같이 쓰려고 할때만 문제가 되는 것.
--------------------------------------------
+) JAVA의 데이터 타입
기본형 타입(Primitive Type)
- boolean, byte, short, int, long, float, double, char
- 스택 메모리(정적) 공간에 저장된다
- Null값이 존재할 수 없음.
참조 타입(Reference Type)
- 기본형 타입을 제외한 나머지(배열, 열거, 클래스, 인터페이스)
- 실제 객체는 힙 메모리(동적) 공간에 저장, 객체를 참조하는 주소값을 갖는 변수는 스택 영역에 저장
- 빈 객체를 의미하는 Null이 존재한다
- C에서 포인터의 느낌. 참조하는 변수가 없으면 GC가 와서 수거해간다
'JAVA' 카테고리의 다른 글
자바 정렬 알고리즘 기본 형태 | 버블, 선택, 삽입, 합병, 퀵 (0) | 2021.08.19 |
---|---|
자바 알고리즘 정복 3 - 스택, 큐 (0) | 2021.08.07 |
자바 알고리즘 정복 2 - 제네릭, 접근제한자 (0) | 2021.08.06 |
영어공부 | Inteface Deque<E> API 읽어보기 (0) | 2021.08.01 |
영어공부 | JAVA Interface Queue<E> API 문서 해석 (0) | 2021.07.26 |