대학생 시절 때 자바 과목을 수강했었는데 무려 C+을 맞았다.
그 당시엔 너무 슬펐는데 지금 와서 생각해 보니 공부 하나도 안했는데도 씨쁠을 주신 교수님이 혜자스럽다.
내가 왜 자바 재수강을 안하고 졸업했는지 의문이다.
아마 내가 웹 개발을 하게될 줄 몰랐던 게 아닐까?
암튼 회사에서 스프링 프레임워크를 사용하면서 개발을 하다 보니 나도 모르게 야매로 배운 자바에 대한 한계가 느껴졌다...
물론 엄청 기본적인 부분은 다 알지만 클래스나 상속 등 중요한 뒷 내용을 싸그리 까묵었다 이거야!
그래서 2년 전에 사놓고 포장도 안뜯은 자바책을 오늘 개봉해서 시간 날 때마다 복습을 하려고 한다.
서론 넘나 긴 것.... 이제부터 정리를 시작한다.
Java Class → 클래스명 첫 글자는 대문자로 한다.
// 대충 자바 클래스 생김새이다.
클래스명 {
main() {
...
}
메소드 {
... // 메소드 블록
}
}
JDK와 JRE의 차이점?
- JDK(Java Development Kit) : JRE + 개발도구
- JRE(Java Runtime Environment) : JVM + 표준 클래스 라이브러리
JVM(Java Virtual Machine)
- 자바 가상 머신
- 자바 프로그램 실행 과정
- 자바 컴파일러(javac)가 자바 파일(*.java)을 자바 바이트코드(*.class)로 변환
- Class Loader를 통해 클래스 파일을 JVM으로 가져옴
- 해석된 바이트코드를 JVM 실행 명령어(java.exe)로 실행
변수
- char에 숫자를 저장하면 문자로 반환
ex) char a = 65; → 'A'
- int에 문자를 저장하면 숫자로 반환
ex) int a = 'A'; → 65
- String은 변수가 아닌 클래스
- long 변수에 값 할당시, int 범위를 넘어가는 값을 할당하는 경우에는 숫자 뒤에 l이나 L을 붙여야 함
- float 변수에 값 할당시, 숫자 뒤에 f나 F를 붙여야 함
- 변수 이름 첫 글자에 숫자는 불가능 / 기호 중 _, $는 가능
타입 변환
- 실수 타입(float, double)은 정수 타입(byte, short, int, long)으로 자동 변환되지 않으므로 강제 타입 변환을 사용해야 함
- char → short/byte 자동변환 불가(int, long은 가능)
- String → char 강제 타입변환 불가
: charAt(), toCharArray() 사용
cf) char → String 변환
: .toString(), String.valueOf() 사용
연산자
1. 단항 연산자
- 변수 앞에 단항 연산자 부착 가능 but 단항 연산자의 리턴값은 int이므로 주의
ex) -x, +x
2. 증감 연산자
- 어떤 변수에 후위 증감 연산자를 적용하여 다른 변수에 값을 할당하면 다른 변수에는 증감이 되지 않은 값이 할당되고 연산자가 붙은 변수에는 증감된 값이 적용됨
ex) int x = 10; int z = x++;
sout(x) // 11
sout(z) // 10
3. 비교 연산자
- 부동소수점 타입 값을 비교할 때는 정확한 비교를 위해 형변환을 해줘야 함
ex1) 'A' == 65 → true
ex2) 3 == 3.0 → true
ex3) 0.1 == 0.1f → false
- String 객체를 비교할 때는 .equals() 메소드를 사용하는 것이 정확
연산자 우선순위
연산자 | 연산 방향 | 우선순위 |
증감, 부호, 비트(~), 논리(!) | ← | 높음 낮음 |
산술(*, /, %) | → | |
산술(+, -) | → | |
시프트(>>, <<, >>>) | → | |
비교(<, >, <=, >=) | → | |
비교(==, !=) | → | |
논리(&) | → | |
논리(^) | → | |
논리(|) | → | |
논리(&&) | → | |
논리(||) | → | |
조건(? : ) | → | |
대입(=, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, ...) | ← |
입력값 검사
: .isInfinite(), isNaN() 이용
ex) Float.isNaN(x), Double.isInfinite(y)
switch문
// 대충 이런 생김새이다.
switch(변수) {
case 값1:
...
break;
case 값2:
...
break;
...
default: // 생략 가능
...
break;
}
}
for문
// 대충 이런 생김새이다.
for(int i = 0; i < 10; i++) { // 세 군데중 아무데나 생략 가능
...
}
중첩된 반복문에서의 break
: 가장 가까운 반복문만 종료하는 문제 발생
바깥쪽 반복문까지 종료하고 싶을 때는 바깥쪽 반복문에 '라벨:'을 붙이고 'break 라벨;' 사용
ex) Label: for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
...
if (x) {
...
break Label;
}
}
}
continue문
: 다음 코드를 실행하지 않고 다음 반복
키보드 입력
1. System.in.read()
: 내가 누른 키의 코드를 인식받음
ex) Space바 → 32
2. scanner.nextLine()
: 문자열을 입력받음
ex) String str;
Scanner scanner = new Scanner(Sysetm.in);
str = scanner.nextLine();
'Language > Java' 카테고리의 다른 글
Java - 중첩 클래스와 중첩 인터페이스, 예외 처리 복습 (0) | 2021.06.25 |
---|---|
Java - 인터페이스 복습 (0) | 2021.06.24 |
Java - 상속 복습 (0) | 2021.06.23 |
Java - 클래스 복습 (0) | 2021.06.22 |
Java - 참조 타입 복습 (0) | 2021.06.19 |