자바 기본 프로그래밍
1. 기본 구조
2. 코드 설명
(1) 클래스 만들기
- Hello 이름의 클래스 선언
EX) public class Hello { }
- class 키워드로 클래스 선언
- public 선언하면 다른 클래스에서 접근 가능
- 클래스 코드는 { } 내에 모두 작성
(2) 메서드
- C/C++에서의 함수를 메서드로 지칭
EX) public static int sum(int n, int m){ }
- 클래스 바깥에 작성할 수 없음
(3) 메서드 호출
- sum() 메서드 호출
EX) int i = 20;
s = sum(i,10);
- sum() 호출 시 변수 i의 값과 정수 10을 전달
- sum()의 n, m에 각각 20, 10 값 전달
- sum() 은 n과 m 값을 더한 30 리턴
- 변수 s는 정수 30을 전달받음
(4) main() 메서드
- 자바 프로그램은 main()에서 실행 시작
EX) public static void main(String [] args){ }
- public static void으로 선언
- String[] args로 실행 인자를 전달받음
(5) 주석문
- // 한 라인 주석
- /* 여러 행 주석 */
(6) 변수 선언
- 변수 타입과 변수 이름 선언
EX) int i = 20;
char a;
-메서드 내에서 선언된 변수는 지역 변수 (지역 변수는 메서드 실행이 끝나면 자동 소명)
(7) 문장
- ;로 한 문장의 끝을 인식
EX) int i = 20;
s = sum(i,20);
(8) 화면출력
- 표준 출력 스트림에 메시지 출력
EX) System.out.println("Hello");
- 표준 출력 스트림 System.out의 println() 메서드 호출
- pinrtln()은 여러 타입의 데이터 출력 가능
- println()은 출력 후 다음 행으로 커서 이동
3. 식별자 (identifier)
(1) 식별자란?
- 클래스, 변수, 상수, 메소드 등에 붙이는 이름
(2) 식별자의 원칙
- '@', '#', '!'와 같은 특수 문자, 공백 또는 탭은 식별자로 사용할 수 없으나 '_', '$'는 사용 가능
- 유니코드 문자 사용 가능, 한글 사용 가능
- 자바 언어의 키워드는 식별자로 사용불가
- 식별자의 첫 번째 문자로 숫자는 사용불가
- '_' 또는 '$'를 식별자 첫 번째 문자로 사용할 수 있으나 일반적으로 잘 사용하지 않는다.
- 불린 리터럴(true, false)과 널 리터럴(null)은 식별자로 사용불가
- 길이 제한 없음
(3) 대소문자 구별
- Test와 test는 별개의 식별자
4. 식별자 이름 사례
5. 좋은 이름 붙이는 언어 관습
(1) 기본
- 가독성 높은 이름
- 목적을 나타내는 이름 붙이기 : s 보다 sum
- 충분히 긴 이름으로 붙이기 : AVM보다 AutoVendingMachine
(2) 자바 언어의 이름 붙이는 관습 : 헝가리언 이름 붙이기
- 클래스 이름
- 첫 번째 문자는 대문자로 시작
- 각 단어의 첫 번째 문자만 대문자
EX) public class HelloWorld { }
class AutoVendingMachine { }
(3) 변수, 메서드 이름
- 첫 단어 이후 각 단어의 첫 번째 문자는 대문자로 시작
(4) 상수 이름
- 모든 문자를 대문자로 표시
EX) final static double PI = 3.141592;
6. 자바의 기본 타입
(1) 특징
- 기본 타입의 크기가 정해져 있음
- CPU나 운영체제에 따라 변하지 않음
7. 문자열
- 문자열은 기본 타입이 아님
- String 클래스로 문자열 표현
- 문자열 리터럴 - "JDK", "한글", "계속하세요"
EX) String toolName = "JDK";
- 문자열이 섞인 + 연산 -> 문자열 연결
EX) toolName + 18 ---> "JDK1.8"
"(" + 3 + ", " + 5 + ")" ----> "(3,5)"
System.out.println(toolName + "이 출시됨");
8. 변수와 선언
(1) 변수
- 프로그램 실행 중에 값을 임시 저장하기 위한 공간
- 변수 값은 프로그램 수행 중 변경될 수 있음
- 데이터 타입에서 정한 크기의 메모리 할당
(2) 변수 선언
- 변수의 타입 다음에 변수 이름을 적어 변수를 선언
9. 변수 선언 사례
(1) 변수 서언 사례
EX) int radius;
char c1, c2, c3;
(2) 변수 선언과 초기화
- 선언과 동시에 초기값 지정
EX) int radius = 10;
char c1 = 'a', c2 = 'b', c3 = 'c';
double weight = 75.56;
(3) 변수 읽기와 저장
- 대입 연산자인 = 다음에 식(expression)
EX) radius = 10 * 5;
c1 = 'r';
weight = weight + 5.0;
10. 리터럴과 정수 리터럴
(1) 리터럴(literal)
- 프로그램에서 직접 표현한 값
- 정수, 실수, 문자, 논리, 문자열 리터럴 있음
EX) 34, 42.195, '%', true, hello
(2) 정수 리터럴
- 10진수, 8진수, 16진수, 2진수 리터럴
- 정수 리터럴은 int 형으로 컴파일
- long 타입 리터럴은 숫자 뒤에 L 또는 I을 붙여 표시
EX) long g = 24L;
11. 실수 리터럴
- 소수점 형태나 지수 형태로 표현한 실수
EX) 12. , 12.0,. 1234, 0.1234, 1234E-4
- 실수 타입 리터럴은 double 타입으로 컴파일
EX) double d = 0.1234;
double e = 1234E-4;
- 숫자 뒤에 f(float)나 d(double)을 명시적으로 붙이기도 함
EX) float f = 0.1234f;
double w =. 1234D;
12. 문자 리터럴
(1) 단일 인용부호(' ')로 문자 표현
- 사례) 'W', 'A', '가', '*', '3', '글', `u0041
- `u 다음에 4자리 16진수(2바이트의 유니코드)
- \u0041 ---> 문자 'A'의 유니코드(0041)
- \uae00 ---> 한글문자 '글'의 유니코드(ae00)
(2) 특수문자 리터럴은 백슬래시(\)로 시작
13. 논리 리터럴과 boolean 타입
- 논리 리터럴은 2개뿐 : true, false
- boolean 타입 변수에 치환하거나 조건문에 이용
14. 기본 타입 이외의 리터럴
(1) null 리터럴
- 레퍼런스에 대입 사용
(2) 문자열 리터럴(스트링 리터럴)
- 이중 인용부호로 묶어 표현
EX) "Good", "Moring", "자바", "3.19", "26", "a"
15. JDK7부터 숫자에 '_' 허용, 가독성 높임
(1) 숫자 리터럴의 아무 위치에나 언더스코어('_') 허용
- 컴파일러는 리터럴에서 '_'를 빼고 처리
(2) 허용되지 않은 4가지 경우
16. var 키워드를 사용하여 변수 타입 생략
(1) var 키워드
- java 10부터 도입된 키워드 : var와 동일한 기능으로 C++(2011년 표준부터)의 auto 키워드
- 지역 변수의 선언에만 사용
- 변수 타입 선언 생략 : 컴파일러가 변수 타입 추론
- 변수 선언문에 반드시 초깃값 지정
EX) var name; // 컴파일 오류, 변수 name의 타입을 추론할 수 없음
17. 상수
(1) 상수선언
- final 키워드 사용
- 선언 시 초기값 지정
- 실행 중 값 변경 불가
(2) 변수, 리터럴, 상수 활용
18. 자동 타입 변환
- 작은 타입은 큰 타입으로 자동 변환 : 컴파일러에 의해 이루어짐
- 치환문(=)이나 수식 내에서 타입이 일치하지 않을 때
19. 강제 타입 변환
(1) 자동 타입 변환이 안 되는 경우
- 큰 타입이 작은 타입으로 변환할 때
(2) 강제 타입 변환
- 개발자가 필요하여 강제로 타입 변환을 지시 : ( ) 안에 변환할 타입 지정
- 강제 변환은 값 손실 우려
20. 자바에서 키 입력
(1) System.in
- 키보드로부터 직접 읽는 자바의 표준 입력 스트림
- 키 값을 바이트(문자 아님)로 리턴
(2) System.in을 사용할 때 문제점
- 키 값을 바이트 데이터로 넘겨주므로 응용프로그램이 문자 정보로 변환해야 함
21. Scanner로 쉽게 키 입력
(1) Scanner클래스
- System.in에게 키를 읽게 하고, 읽은 바이트를 문자, 정수, 실수, 불린 문자열 등 다양한 타입으로 변환하여 리턴 : java.util.Scanner클래스
(2) 객체 생성
- System.in에게 키를 읽게 하고, 원하는 타입으로 변환하여 리턴
22. Scanner를 이용한 키 입력
- Scanner에서 키 입력받기
- Scanner는 입력되는 키 값을 공백으로 구분되는 아이템 단위로 읽음
- 공백문자 : '\t', '\f', '\r', ' ', '\n'
- 개발자가 원하는 다양한 타입의 값으로 바꾸어 읽을 수 있음
23. Scanner 주요 메서드
24. 식과 연산자
- 연산 : 주어진 식을 계산하여 결과를 얻어내는 과정
25. 연산자 우선순위
(1) 같은 우선순위의 연산자
- 왼쪽에서 오른쪽으로 처리
- 예외) 오른쪽에서 왼쪽으로
EX) 대입연산자, --, ++, +, -(양수 음수 부호),!, 형 변환은 오른쪽에서 왼쪽으로 처리
(2) 괄호는 최우선순위
- 괄호가 다시 괄호를 포함한 경우는 가장 안쪽의 괄호부터 먼저 처리
26. 산술 연산자
- 더하기, 빼기, 곱하기, 나누기, 나머지
- /와 % 응용
- 10의 자리와 1의 자리 분리
EX) 69/10 = 6 ---> 몫 6
69%10 = 9 ---> 나머지 9
- n이 홀수인지 판단
EX) int r = n % 2; // r이 1이면 n은 홀수, 0이면 짝수
27. 증감연산
- 1 증가 혹은 감소시키는 연산
28. 대입연산
- 연산의 오른쪽 결과는 왼쪽 변수에 대입
29. 대입 연산자와 증감 연산자 사용
30. 조건 연산자?:
- condition? opr2 : opr3
- 세 개의 피연산자로 구성된 삼항(ternary) 연산자 : condition이 true 이면, 연산식의 결과는 opr2, false이면 opr3
31. 조건연산
31. 비트 연산
(1) 비트 개념
(2) 비트 연산
- 비트 논리 연산 : 비트끼리 AND, OR, XOR, NOT 연산
- 비트 시프트 연산 : 비트를 오른쪽이나 왼쪽으로 이동
32. 비트 논리 연산
- 피 연산자의 각 비트들의 논리 연산
33. 비트 논리 연산 응용
- 냉장고에는 8개의 센서가 있고 이들은 flag 변수와 연결되어 있다고 할 때, 냉장고의 온도가 0도 이상으로 올라가면 비트 3이 1이 되고, 0도 이하이면 비트 3이 0을 유지한다.
문제) 현재 냉장고의 온도가 0도 이상인지 판단하는 코드를 작성하라
34. 시프트 연산자의 사례
- 피 연산자의 비트들을 이동 연산
35. 비트 논리 연산과 비트 시프트 연산
36. switch문
(1) switch문은 식과 case문의 값과 비교
- case의 비교 값과 일치하면 해당 case의 실행문장 수행 : break를 만나면 switch문을 벗어남
- case의 비교 값과 일치하는 것이 없으면 default 문 실행
(2) default문은 생략 가능
37. case 문의 값
- case문의 값
- 문자, 정수, 문자열 리터럴만 허용
- 실수 리터럴은 허용되지 않음