Java 기초 문법 정리(1강 - 3강)
24 Nov 20191강 자바 프로그래밍 시작하기
프로그래밍: 컴퓨터에게 일을 시키기 위해 프로그래밍 언어로 만든 명령어 집합인 프로그램을 만드는 일
컴파일: 프로그래밍 언어를 기계어로 바꾸어 주는 일
컴파일러: 기계어로 바꾸어 주는 프로그램 자바를 설치하면 자바 컴파일러도 설치 됨
자바
-
자바와 다른 언어의 차이점: 플랫폼에 독립적인 프로그래밍을 할 수 있음
-
자바 컴파일러가 바이트 코드(class 파일)을 만들고 이를 각 운영체제에 따른 자바 가상머신(Java Virtual Machine)이 있에서 실행하게 된다.
특징
- 객체지향 프로그램으로 유지 보수와 확장성이 좋음
- 안정적
- 풍부한 라이브러리와 오픈소스와 연동 가능
객체 지향 프로그래밍을 해야하는 이유
- 재사용성
- 유지보수
- 코드 관리
- 신뢰성 높은 프로그램
자바로 만들 수 있는 프로그램들
- 웹 서버
- 모바일 앱(Android)
- 게임
JDK, JRE 설치 https://www.oracle.com/technetwork/java/index.html
이클립스 설치 https://www.eclipse.org/
2강 변수와 자료형
2진수
-
비트(bit): 컴퓨터에서 자료를 표현하는 최소 단위(0 또는 1)
-
바이트(byte): 8bit
-
2진수: 컴퓨터에서 표현되는 자료의 형태
-
8진수: 2진수를 3비트씩 모아서 표현
-
16진수: 2진수를 4비트씩 모아서 표현
컴퓨터에서 음수 표현하기
-
2의 보수로 표현: 양수와 음수는 더해서 0이 되어야 함
-
2의 보수 만드는 방법: 1의 보수를 취하고 나서 1을 더해준다.
0000 0101 (5) 1111 1010 (1의 보수) 1111 1011 (5에 대한 2의 보수)
변수
-
변하는 수, 변하는 값을 프로그램에서 나타내기 위한 방법
-
변수 선언하기
자료형 변수 이름; int age;
-
변수에 맞는 자료형과 변수 이름으로 선언
변수와 메모리
-
변수를 선언하는 것은 해당 자료형의 크기 만큼의 메모리를 사용하겠다는 것
-
메모리의 위치를 변수 이름으로 참조
변수 이름
-
영문자나 숫자 사용, 숫자로 시작할 수 없음
-
특수 문자는 _와 $만 가능
-
예약어는 사용 불가. 변수는 쓰임에 맞는 이름으로 명명하는 것이 가독성에 좋음
-
Camel case 사용
자료형
- 기본형: 자바 언어에서 기본적으로 제공하는 자료형, 메모리의 크기가 정해져 있음.
- 정수형, 문자형, 실수형, 논리형
- 참조형: 클래스 자료형. JDK에서 제공되는 클래스와 프로그래머가 정의하는 클래스. 클래스에 따라 사용하는 크기가 다름
기본 자료형
정수형 | 문자형 | 실수형 | 논리형 | |
---|---|---|---|---|
1 byte | byte | boolean | ||
2 byte | short | char | ||
4 byte | int | float | ||
8 byte | long | double |
바이트 크기와 표현 범위
크기 | 수의 범위 | |
---|---|---|
byte | 1 | -2^7 ~ 2^7-1 |
short | 2 | -2^15 ~ 2^15-1 |
int | 4 | -2^31 ~ 2^31-1 |
long | 8 | -2^63 ~ 2^63-1 |
문자 자료형
-
내부적으로는 비트의 조합으로 표현
-
인코딩: 각 문자에 따른 특정 숫자값(코드값) 부여
-
디코딩: 숫자 값을 원래의 문자로 변환
문자 세트(Character set)
-
문자 세트: 문자를 위한 코드값(숫자값)을 정해 놓은 set
-
ASCII : 1바이트로 영문자, 숫자, 특수 문자 등을 표현
-
Unicode: 한글과 같은 복잡한 언어를 표현하기 위한 표준 인코딩 UTF-8, UTF-16이 대표적
-
문자를 변수에 저장하면 문자에 해당하는 코드 값이 저장됨
실수와 논리 자료형
-
실수는 double 자료형이 기본
-
float을 사용할 때는 f,F 식별자 사용
부동 소수점 방식
-
실수를 지수부와 가수부로 표현
0.1을 표현하는 방식 1.0 * 10^-1 1.0 → 가수 -1 → 지수
-
부동 소수점 방식의 오류
- 지수와 가수로 표현되는 부동 소수점은 0을 표현할 수 없음
- 약간의 오차 발생 가능성
논리 자료형
- boolean으로 선언
- 논리값 true, false 표현
자료형 없이 변수 사용하기(Java 10)
-
지역 변수 자료형 추론(local variable type inference)
-
변수에 대입되는 값을 보고 컴파일러가 추론
var num = 10; var dNum = 10.0; var str = "hello"; int num = 10; double dNum = 10.0; String str = "hello";
상수와 리터럴
-
상수(constant): 변하지 않는 수
-
리터럴(literal): 프로그램에서 사용하는 모든 숫자, 값, 논리 값
-
모든 리터럴은 상수 풀(constant pool)에 저장되어 있음
-
상수 풀에 저장될 때는 정수는 int, 실수는 double로 저장됨
형 변환
-
서로 다른 자료형의 값이 대입되는 경우 형 변환이 일어남
-
묵시적 형 변환(implicit type conversion): 작은 수에서 큰 수로 덜 정밀한 수에서 더 정밀한 수로 대입되는 경우
-
명시적 형 변환(explicit type conversion): 변환되는 자료형을 명시. 자료의 손실 발생 가능. type casting 필요
3강 연산자
항과 연산자
-
항(operand): 연산에 사용되는 값
-
연산자(operator): 항을 이용하여 연산하는 기호
연산자 설명 예 단항 연산자 항이 한 개인 연산자 ++num 이항 연산자 항이 두 개인 연산자 num1 + num2; 삼항 연산자 항이 세 개인 연산자
간단한 조건문 대신 사용할 수 있음(5 > 2) ? 1 : 0;
int num = (5 > 3) ? 10 : 20;
대입 연산자
-
왼쪽 변수의 값이 오른쪽에 대입
-
우선 순위가 가장 낮은 연산자-
int num = 20;
부호 연산자
- 단항 연산자
- 변수의 부호를 유지하거나(+) 바꿈(-)
- 실제 변수의 값이 변하려면 대입 연산자를 사용해야 함
산술 연산자
-
%는 나머지를 구하는 연산자
-
숫자 n의 나머지 범위는 0 ~ n-1
연산자 기능 예 + 두 항 더하기 5 + 3 - 앞에 있는 항에서 뒤에 있는 항 빼기 5 - 3 * 두 항 곱하기 5 * 3 / 앞에 있는 항에서 뒤에 있는 항을 나누어 몫 구하기 5 / 3 % 앞에 있는 항에서 뒤에 있는 항 나누어 나머지 구하기 5 % 3
복합 대입 연산자
-
대입 연산자와 다른 연산자가 함께 쓰임
연산자 기능 예 += 두 항의 값을 더해서 왼쪽 항에 대입 num += 2; -= 왼쪽 항에서 오른쪽 항을 빼서 그 값을 왼쪽 항에 대입 num -= 2; *= 두 항의 값을 곱해서 왼쪽 항에 대입 num *= 2; /= 왼쪽 항을 오른쪽 항으로 나누어 그 몫을 왼쪽 항에 대입 num /= 2; %= 왼쪽 항을 오른쪽 항으로 나누어 그 나머지를 왼쪽 항에 대입 num %= 2; «= 비트를 왼쪽으로 이동하고 그 값을 왼쪽 항에 대입 num «= 2; »= 비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입
왼쪽에 채워지는 비트 값은 부호 비트와 동일num »= 2; »>= 비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입
왼쪽에 채워지는 비트값은 0num »>= 2; &= 두 항의 & 비트 연산 후 그 값을 왼쪽 항에 대입 num &= 2; |= 두 항의 | 비트 연산 후 그 값을 왼쪽 항에 대입 num |= 2; ^= 두 항의 ^ 비트 연산 후 그 값을 왼쪽 항에 대입 num ^= 2;
단항 연산자
-
변수의 값을 1 더하거나 뺄 때 사용
-
연산자가 항의 앞에 있는지 뒤에 있는지에 따라 결과가 달라짐
연산자 기능 예 ++ 항의 값에서 1 더하기 val = ++num; 먼저 num값이 1 증가한 후 val 변수에 대입
val = num++; val 변수에 기존 num 값을 대입한 후 num값 1 증가– 항의 값에서 1 빼기 val = –num; 먼저 num 값이 1 감소한 후 val 변수에 대입
val = num–; val 변수에 기존 num 값을 대입한 후 num 값 1 감소
관계 연산자(비교 연산자)
-
연산의 결과가 true/false로 반환
연산자 기능 예 > 왼쪽 항이 크면 참, 아니면 거짓 반환 num > 3; < 왼쪽 항이 작으면 참, 아니면 거짓 반환 num < 3; >= 왼쪽 항이 오른쪽 항보다 크거나 같으면 참, 아니면 거짓 반환 num >= 3; <= 왼쪽 항이 오른쪽 항보다 작거나 같으면 참, 아니면 거짓 반환 num <= 3; == 두 개의 항의 값이 같으면 참, 아니면 거짓 반환 num == 3; != 두 개의 항이 다르면 참, 아니면 거짓 반환 num != 3;
논리 연산자
-
관계 연산자와 함께 많이 사용
-
연산의 결과가 true/false로 반환
연산자 기능 예 && (논리 곱) 두 항이 모두 참인 경우에만 참, 그렇지 않은 경우는 거짓 boolVal = (5 > 3) && (5 > 2); || (논리 합) 두 항 중 하나의 항만 참이면 참, 두 항이 모두 거짓이면 결과 값은 거짓 boolVal = (5 > 3) || (5 < 2); ! (부정) 단항 연산자. 참인 경우는 거짓으로 바꾸고, 거짓인 경우는 참으로 바꿈 boolVal = !(5 > 3);
단락 회로 평가(short circuitevaluation)
- 논리 곱(&&)은 두 항이 모두 true일 때만 결과가 true
- 앞의 항이 false이면 뒤 항의 결과를 평가하지 않아도 false
-
논리 합( )은 두 항이 모두 false일 때만 결과가 false - 앞의 항이 true이면 뒤 항의 결과를 평가하지 않아도 true
- 실제 프로그램에서 예상하지 않은 결과가 발생할 수 있음
비트 연산자
- 대입연산자와 다른 연산자가 함께 쓰임
- 마스크: 특정 비트를 가리고 몇 개의 비트 값만 사용할 때
-
비트 켜기: 특정 비트들만을 1로 설정해서 사용하고 싶을 때
- & 00001111 (하위 4비트 중 1인 비트만 꺼내기)
-
비트 끄기: 특정 비트들만을 0으로 설정해서 사용하고 싶을 때
-
11110000 (하위 4비트 중 0인 비트만 0으로 만들기)
-
-
비트 토글: 모든 비트들을 0은 1로, 1은 0으로 바꾸고 싶을 때
연산자 설명 예 ~ 비트의 반전(1의 보수) a = ~a; & 비트 단위 AND 1 & 1 1 반환 그 외는 0 | 비트 단위 OR 0 | 0 0 반환 그 외는 1 ^ 비트 단위 XOR 두 개의 비트가 서로 다른 경우에 1 반환 « 왼쪽 shift a«2 변수 a를 2비트만큼 왼쪽 이동 » 오른쪽 shift a»2 변수 a를 2비트만큼 오른쪽 이동 »> 오른쪽 shift » 동일한 연산
채워지는 비트가 부호와 상관없이 0임
연산자 우선 순위
우선 순위 | 형 | 연산자 | 연산 방향 |
---|---|---|---|
1 | 일차식 | () [] . | → |
2 | 단항 | ! ++ – + - | ← |
3 | 산술 | % / | → |
4 | 산술 | + - | → |
5 | 비트 이동 | « » | → |
6 | 관계 | < > <= >= | → |
7 | 관계 | == != | → |
8 | 비트 곱 | & | → |
9 | 비트 차 | ^ | → |
10 | 비트 합 | | | → |
11 | 논리 곱 | && | → |
12 | 논리 합 | || | → |
13 | 조건 | ? : | → |
14 | 대입 | = += -= *= %= /= | ← |