1. 파라미터 : 메서드에 데이터를 전달하는 매개변수
2.메소드 호출문의 작성 방법
- main이 아닌 메소드는 자동으로 실행되지 않음 : 명시적인 호출(호출문)을 해야 실행됨
3. 결과를 리턴하는 메서드
- 리턴값(return value) : 메소드가 호출한 쪽으로 넘겨주는 메소드의 실행 결과
- 리턴값을 리턴하는 메소드 호출문의 형식
변수 = 메소드이름(파라미터1, 파라미터2, 파라미터3);
4. return 문
- 결과 리턴 : return 식;
- 결과 없이 리턴 : retun;
5. 인스턴스 멤버란?
- 객체(인스턴스)마다 가지고 있는 필드와 메소드 : 인스턴스 필드, 인스턴스 메소드라고 부름
- 객체 소속된 멤버이기 때문에 객체(인스턴스) 없이 사용 불가
6. this
- 객체(인스턴스) 자신의 참조(번지)를 가지고 있는 키워드
- 객체 내부에서 인스턴스 멤버임을 명확히 하기 위해 this. 사용
- 매개변수와 필드명이 동일할 때 인스턴스 필드임을 명확히 하기 위해 사용
7. 필드의 내용
- 객체의 고유 데이터
- 객체가 가져야 할 부품 객체
- 객체의 현재 상태 데이터
8. 필드 선언
- 타입필드 [=초기값];
String company = "현대자동차";
9. 필드의 기본 초기값
- 초기값 지정되지 않은 필드 : 객체 생성시 자동으로 기본값으로 초기화
분류 | 데이터 타입 | 초기값 | |
기본 타입 | 정수 타입 | byte char short int long |
0 \u0000 (빈 공백) 0 0 0L |
실수 타입 | float double |
0.0F 0.0 |
|
논리 타입 | boolean | false | |
참조타입 | 배열 클래스(String 포함) 인터페이스 |
null null null |
10. 필드 사용
- 필드 값을 읽고, 변경하는 작업
- 필드 사용 위치
- 객체 내부: "필드이름"으로 바로 접근
- 객체 외부: "변수.필드이름"으로 접근
11. 객체 지향 프로그래밍
- OOP: Object Oriented Programming
- 부품 객체를 먼저 만들고 이것들을 하나씩 조립해 완성된 프로그램을 만드는 기법
12. 객체(Object)란?
- 물리적으로 존재하는 것 (자동차, 책, 사람)
- 추상적인 것(회사, 날짜) 중에서 자신의 속성과 동작을 가지는 모든 것
- 객체는 필드(속성)과 메소드(동작)으로 구성된 자바 객체로 모델링 가능
13. 객체의 상호작용
- 객체들은 서로 간에 기능(동작)을 이용하고 데이터를 주고 받음
14. 객체간의 관계
- 객체 지향 프로그램에서는 객체는 다른 객체와 관계를 맺음
- 관계의 종류
* 집합 관계 : 완성품과 부품의 관계
* 사용 관계 : 객체가 다른 객체를 사용하는 관계
* 상속 관계 : 종류 객체와 구체적인 사물 객체 관계
15. 객체 지향 프로그래밍의 특징
- 캡슐화
* 객체의 필드, 메소드를 하나로 묶고, 실제 구현 내용을 감추는 것
* 외부 객체는 객체 내부 구조를 알지 못하며 객체가 노출해 제공하는 필드와 메소드만 이용 가능
* 필드와 메소드를 캡슐화하여 보호하는 이유는 외부의 잘못된 사용으로 인해 객체가 손상되지 않도록
* 자바 언어는 캡슐화된 멤버를 노출시킬 것인지 숨길 것인지 결정하기 위해 접근 제한자
- 상속
* 상위(부모) 객체의 필드와 메소드를 하위(자식) 객체에게 물려주는 행위
* 하위 객체는 상위 객체를 확장해서 추가적인 필드와 메소드를 가질 수 있음
* 상속대상 : 필드와 메소드
* 상속의 효과
** 상위 객체를 재사용해서 하위 객체를 빨리 개발 가능
** 반복된 코드의 중복을 줄임
** 유지 보수의 편리성 제공
** 객체의 다형성 구현
16. 객체를 참조하는 배열
- 기본 타입(byte, char, short, int, long, float, double, boolean) 배열
* 각 항목에 직접 값을 가지고 있음
- 참조 타입(클래스, 인터페이스) 배열 - 각 항목에 객체의 번지 가짐
17. 배열 복사
- 배열은 한 번 생성하면 크기 변경 불가
- 더 많은 저장 공간이 필요하다면 보다 큰 배열을 새로 만들고 이전 배열로부터 항목 값들을 복사
18. 배열 복사 방법
- for문 이용
- System.arrayCopy() 메소드 이용
- Arrays 클래스 이용
19. 향상된 for문
- 배열 및 컬렉션의 항목 요소를 순차적으로 처리
- 인덱스 이용하지 않고 바로 항목 요소 반복
for(②타입 변수 : ①배열) {
③실행문;
}
int[] scores = {95, 71, 84, 93, 87};
int sum = 0;
for(int score : scores) {
sum = sum + score;
}
20. 배열이란?
- 같은 타입의 데이터를 연속된 공간에 저장하는 자료구조
- 각 데이터 저장 위치는 인덱스 부여해 접근
21. 배열의 장점
- 중복된 변수 선언 줄이기 위해 사용
- 반복문 이용해 요소들을 쉽게 처리
22. 배열 선언
- 배열을 사용하기 위해 우선 배열 변수 선언
* 타입[] 변수;
int[] intArray;
double[] doubleArray;
String[] strArray;
* 타입 변수[];
int intArray[];
double doubleArray[];
String strArray[];
- 배열 변수는 참조 변수 - 배열 생성되기 전 null로 초기화 가능
타입[] 변수 = null;
* 배열 변수가 null값을 가진 상태에서 항목에 접근 불가
** 변수[인덱스] 읽기 못함
** NullPointerException 발생
23. 값 목록으로 배열 생서하는 방법
- 변수 선언과 동시에 값 목록 대입
* 데이터타입[] 변수 = {값0, 값1, 값2, 값3, ...};
- 변수 선언 후 값 목록 대입
* 배열 객체 생성 구문(new ~) 필요
데이터타입[] 변수;
변수 = new 타입[] {값0, 값1, 값2, 값3, ...};
24. new 연산자로 배열 생성
- 배열 생성시 값 목록을 가지고 있지 않음
- 향후 값들을 저장할 배열을 미리 생성하고 싶을 경우
타입[] 변수 = new 타입[길이];
타입[] 변수 = null;
변수 = new 타입[길이];
int[] intArray = new int[5];
25. 타입 별 항목의 기본값
분류 | 데이터 타입 | 초기값 |
기본 타입(정수) | byte[] char[] short[] int[] long[] |
0 '₩u0000' 0 0 0L |
기본 타입(실수) | float[] double[] |
0.0F 0.0 |
기본 타입(논리) | boolean[] | false |
참조 타입 | 클래스[] 인터페이스[] |
null null |
26. 배열의 길이
- 배열에 저장할 수 있는 전체 항목 수
- 코드에서 배열의 길이를 얻는 방법
배열변수.length
int[] intArray = {10, 20, 30};
int len = intArray.length; //3
- 배열의 길이는 읽기 전용
- 배열의 길이는 for문의 조건식에서 주로 사용
27. 커맨드 라인 입력
- 배열의 선언과 사용
java 클래스 문자열0 문자열1 문자열2 ... 문자열n-1
28. String 타입
- 문자열을 저장하는 클래스 타입
String name;
name = "신용권";
String hobby = "자바";
- 문자열 리터럴 동일하다면 String 객체 공유
String name1 = "신용권";
String name2 = "신용권";
- new 연산자를 이용한 String 객체 생성
* 힙 영역에 새로운 String 객체 생성
* String 객체를 생성한 후 번지 리턴
String name1 = new String("신용권");
String name2 = new String("신용권");
29. 데이터 타입 분류
- 기본 타입
* 정수 타입 : byte, char, short, int, long
* 실수 타입 : float, double
* 논리 타입 : boolen
- 참조 타입
* 배열 타입
* 열거 타입
* 클래스
* 인터페이스
30. 변수의 메모리 사용
- 기본 타입 변수 - 실제 값을 변수 안에 저장
- 참조 타입 변수 - 주소를 통해 객체 참조
[기본 타입 변수]
int age = 25;
double price = 100.5;
[참조 타입 변수]
String name = "신용권";
String hobby = "독서";
31. JVM이 사용하는 메모리 영역
- OS에서 할당받은 메모리영역(Runtime Data Area)을 세 영역으로 구분
32. 메소드 영역
- JVM 시작할 때 생성
- 로딩된 클래스 바이트 코드 내용을 분석 후 저장
- 모든 스레드가 공유
33. 힙 영역
- JVM 시작할 때 생성
- 객체/배열 저장
- 사용되지 않는 객체는 Garbage Collector가 자동 제거
34. JVM 스택
- 스레드 별 생성
- 메소드 호출할 때마다 Frame을 스택에 추가(push)
- 메소드 종료하면 Frame 제거(pop)
35. 변수의 값이 같은지 다른지 비교
- 기본 타입 : byte, char, short, int, long, float, double, boolean
* 의미 : 변수의 값이 같은지 다른지 조사
- 참조 타입 : 배열, 열거, 클래스, 인터페이스
* 의미 : 동일한 객체를 참조하는지 다른 객체를 참조하는지 조사
36. null(널)
- 변수가 참조하는 객체가 없을 경우 초기값으로 사용 가능
- 참조 타입의 변수에만 저장 가능
- null로 초기화된 참조 변수는 스택 영역 생성
- ==, != 연산 가능
refVal1 == null; //결과: false
refVal2 != null; //결과: true
37. NullPointerException의 의미
- 예외(Exception)
* 사용자의 잘못된 조작이나 잘못된 코딩으로 인해 발생하는 프로그램 오류
- NullPointerException
* 참조 변수가 null값을 가지고 있을 때
* 객체의 필드나 메소드를 사용하려고 햇을 때 발생
int[] intArray = null;
intArray[0] = 10; //NullPointerException
String str = null;
System.out.println("총 문자수: " + str.length()); //NullPointerException
38. 반복문
- 중괄호 블록 내용을 반복적으로 실행할 때 사용
- 종류 : for문, while문, do-while문
39. for문
- 반복 횟수를 알고 있을 때 주로 사용
for(①초기화식; ②조건식; ④증감식) {
③실행문;
}
40. for문 초기식
- 변수 선언 가능
* for문 블록의 지역변수
* for문 밖에서는 사용 불가
41. 반복문의 중첩 가능
42. while문
- 조건에 따라 반복을 계속할지 결정할 때 사용
while(①조건식) {
② 실행문;
}
43. 키보드로부터 값 읽기
int keyCode = System.in.read();
44. do-while문
- 조건 따라 반복 계속할지 결정할 때 사용하는 것은 while문과 동일
- 무조건 중괄호 {} 블록을 한 번 실행한 후, 조건 검사해 반복 결정
45. break문
- for문, while문, do-while문 종료 (반복 취소)
- Switch문 종료
- 대개 if문과 같이 사용
* if문 조건식에 따라 for문과 while문 종료할 때 사용
- 반복문이 중첩된 경우
* 반복문이 중첩되어 있을 경우 break; 문은 가장 가까운 반복문만 종료
* 바깥쪽 반복문까지 종료시키려면 반복문에 이름(라벨)을 붙이고, "break 레벨이름"; 사용
46. continue문
- for문, while문, do-while문에서 사용
* for문: 증감식으로 이동
* while문, do-while문: 조건식으로 이동
47. Math.random() 사용하기
- Math 수학관련 계산 기능을 제공하는 클래스
- random() : 0 ~ 1사이의 랜덤한 소수 리턴(1은 제외)
* 0.0 <= Math.random() < 1.0
48. 연산이란?
- 데이터를 처리하여 결과를 산출하는 것
- 연산자(Operations)
* 연산에 사용되는 표시나 기호(+, -,*, /, %, =, ...)
- 피연산자(Operand)
* 연산 대상이 되는 데이터(리터럴, 변수)
- 연산식(Expressions)
* 연산자와 피연산자를 이용하여 연산의 과정을 기술한 것
49. 연산자의 종류
연산자 종류 | 연산자 | 피연산자 수 | 산출값 타입 | 기능 설명 |
산술 | +,-, *, /, % | 이항 | 숫자 | 사칙연산 및 나머지 계산 |
부호 | +, - | 단항 | 숫자 | 음수와 양수의 부호 |
문자열 | + | 이항 | 문자열 | 두 문자열을 연결 |
대입 | =, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>= | 이항 | 다양 | 우변의 값을 좌변의 변수에 대입 |
증감 | ++, -- | 단항 | 숫자 | 1만큼 증가/감소 |
비교 | ==, !=, >, <, >=, <=, instanceof | 이항 | boolean | 값의 비교 |
논리 | !, &, |, &&, || | 단항, 이항 | boolean | 논리적 NOT, AND, OR 연산 |
조건 | (조건식) ? A : B | 삼항 | 다양 | 조건식에 따라 A 또는 B중 하나를 선택 |
비트 | ~, &, |, ^ | 단항, 이항 | 숫자, boolean | 비트 NOT, AND, OR, XOR 연산 |
쉬프트 | >>, <<, >>> | 이항 | 숫자 | 비트를 좌측/우측으로 밀어서 이동 |
50. 연산의 방향과 우선 순위
- 연산자의 우선 순위에 따라 연산된다.
x > 0 && y < 0
- 동일한 우선 순위의 연산자는 연산의 방향 존재
*, /, %는 같은 우선 순위를 갖고 있다. 이들 연산자는 연산 방향이 왼쪽에서 오른쪽으로 수행된다.
100*2가 제일 먼저 연산되어 200이 산출되고, 그 다음 200/3이 연산되어 66이 산출된다.
그 다음으로 66%5가 연산되어 1이 나온다.
하지만 단항 연산자(++, --, ~, !), 부호 연산자(+, -), 대입 연산자(=, +=, -=, ...)는 오른쪽에서 왼쪽(<-)으로 연산된다.
51. 연산의 방향과 우선순위
연산자 | 연산 방향 | 우선 순위 |
증감(++, --), 부호(+, -), 비트(~), 논리(!) | ← | 높음 ↕ 낮음 |
산술(*, /, %) | → | |
산술(+, -) | → | |
쉬프트(<<, >>, >>>) | → | |
비교(<, >, <=, >=, instanceof) | → | |
비교(==,!=) | → | |
논리(&) | → | |
논리(^) | → | |
논리(|) | → | |
논리(&&) | → | |
논리(||) | → | |
조건(?:) | → | |
대입(=, +=, -=, *=,/=, %=,&=, ^=, |=, <<=, >>=, >>>=) | ← |
- 단항, 이항, 삼항 연산자 순으로 우선순위를 가진다
- 산술, 비교, 논리, 대입 연산자 순으로 우선순위를 가진다
- 단항과 대입 연산자를 제외한 모든 연산의 방향은 왼쪽에서 오른쪽이다(→)
- 복잡한 연산식에는 괄호()를 사용해서 우선순위를 정해준다
52. 단항연산자란?
- 피연산자가 1개인 연산자
53. 단항연산자의 종류
- 부호 연산자 : +, -
* boolean 타입과 char 타입을 제외한 기본 타입에 사용 가능
* 부호 연산자의 산출 타입은 int
- 증감 연산자 : ++, --
* 변수의 값을 1 증가(++) 시키거나 1 감소(--) 시키는 연산자
* 증감 연산자가 변수 뒤에 있으면 다른 연산자 먼저 처리 후 증감 연산자 처리 : ++a; --a; a++; a--;
연산식 | 설명 | |
++ | 피연산자 | 다른 연산을 수행하기 전에 피연산자의 값을 1 증가시킴 |
-- | 피연산자 | 다른 연산을 수행하기 전에 피연산자의 값을 1 감소시킴 |
피연산자 | ++ | 다른 연산을 수행한 후에 피연산자의 값을 1 증가시킴 |
피연산자 | -- | 다른 연산을 수행한 후에 피연산자의 값을 1 감소시킴 |
* ++i; 와 i++; 모두 i = i + 1; 로 동일
* --i; 와 i--; 모두 i = i - 1;로 동일
- 논리 부정 연산자 : !
* Boolean type에만 사용 가능
* 피연산자가 true 이면 false 값을 산출
* 피연산자가 false이면 true 값을 산출
54. 비교 연산자 (==, !=, <, >, <=, >=)
- 대소(<, <=, >, >=) 또는 동등(==, !=) 비교해 boolean 타입인 true/false 산출
- 동등 비교 연산자는 모든 타입에 사용
- 크기 비교 연산자는 boolean 타입 제외한 모든 기본 타입에 사용
- 흐름 제어문인 조건문(if), 반복문(for, while)에서 주로 이용
* 실행 흐름을 제어할 때 사용
55. 논리 연산자 (&&, ||, &, |, ^, !)
- 논리곱(&&), 논리합(||), 배타적 논리합(^), 논리 부정(!) 연산 수행
- 피연산자는 boolean 타입만 사용 가능
구분 | 연산식 | 결과 | 설명 | ||
AND (논리곱) |
true | && 또는 & |
true | true | 피 연산자 모두가 true일 경우에만 연산결과는 true |
true | false | false | |||
false | true | false | |||
false | false | false | |||
OR (논리합) |
true | || 또는 | |
true | true | 피 연산자 중 하나만 true이면 연산결과는 true |
true | false | true | |||
false | true | true | |||
false | false | false | |||
XOR (배타적 논리합) |
true | ^ | true | false | 피 연산자가 하나는 true이고 다른 하나가 false일 경우에만 연산결과는 true |
true | false | true | |||
false | true | true | |||
false | false | false | |||
NOT (논리부정) |
! | true | false | 피 연산자의 논리값을 바꿈 |
|
false | true |
56. 비트 연산자(&, |, ^, ~, <<, >>, >>>)
- 비트(bit) 단위로 연산하므로 0과 1이 피연산자
* 0과 1로 표현이 가능한 정수 타입만 비트 연산 가능
* 실수 타입인 float과 double은 비트 연산 부가
- 종류
* 비트 논리 연산자(&, |, ^, ~)
* 비트 이동 연산자(<<, >>, >>>)
57. 비트 논리 연산자(&, |, ^, ~)
- 피 연산자가 boolean 타입일 경우 일반 논리 연산자
- 피연산자가 정수 ㅌ타입일 경우 비트 논리 연산자로 사용
구분 | 연산식 | 결과 | 설명 | ||
AND (논리곱) |
1 | & | 1 | 1 | 두 비트가 모두 1 일 경우에만 연산 결과는 1 |
1 | 0 | 0 | |||
0 | 1 | 0 | |||
0 | 0 | 0 | |||
OR (논리합) |
1 | | | 1 | 1 | 두 비트 중 하나만 1이면 연산 결과는 1 |
1 | 0 | 1 | |||
0 | 1 | 1 | |||
0 | 0 | 0 | |||
XOR (배타적 논리합) |
1 | ^ | 1 | 0 | 두 비트 중 하나는 1이고 다른 하나가 0일 경우 연산 결과는 1 |
1 | 0 | 1 | |||
0 | 1 | 1 | |||
0 | 0 | 0 | |||
NOT (논리부정) |
~ | 1 | 0 | 보수 | |
0 | 1 |
- 비트 연산자는 피연산자를 int 타입으로 자동 타입 변환 후 연산 수행
58. 비트 이동 연산자(<<, >>, >>>)
- 정수 데이터의 비트를 좌측 또는 우측으로 밀어 이동시키는 연산 수행
구분 | 연산식 | 설명 | ||
이동 (쉬프트) |
a | << | b | 정수 a의 각 비트를 b만큼 왼쪽으로 이동 (빈자리는 0으로 채워짐) |
a | >> | b | 정수 a의 각 비트를 b만큼 오른쪽으로 이동 (빈자리는 정수 a의 최상위 부호 비트(MSB)와 같은 값으로 채워짐) |
|
a | >>> | b | 정수 a의 각 비트를 오른쪽으로 이동 (빈자리는 0으로 채워짐) |
59. 대입 연산자(=, +=, -=, *=,/=, %=, &=, ^=, |=, <<=, >>=, >>>=)
- 오른쪽 피연산자의 값을 좌측 피연산자인 변수에 저장
result += 10; → result = result + 10;
- 모든 연산자들 중 가장 낮은 연산 순위 -> 제일 마지막에 수행
- 종류
* 단순 대입 연산자
* 복합 대입 연산자 : 정해진 연산을 수행한 후 결과를 변수에 저장
60. 대입 연산자의 종류
구분 | 연산식 | 설명 | ||
단순 대입 연산자 | 변수 | = | 피연산자 | 우측의 피연산자의 값을 변수에 저장 |
복합 대입 연산자 | 변수 | += | 피연산자 | 우측의 피연산자의 값을 변수의 값과 더한 후에 다시 변수에 저장 (변수=변수+피연산자 와 동일) |
변수 | -= | 피연산자 | 우측의 피연산자의 값을 변수의 값에서 뺀 후에 다시 변수에 저장 (변수=변수-피연산자 와 동일) |
|
변수 | *= | 피연산자 | 우측의 피연산자의 값을 변수의 값과 곱한 후에 다시 변수에 저장 (변수=변수*피연산자 와 동일) |
|
변수 | /= | 피연산자 | 우측의 피연산자의 값으로 변수의 값을 나눈 후에 다시 변수에 저장 (변수=변수/피연산자 와 동일) |
|
변수 | %= | 피연산자 | 우측의 피연산자의 값으로 변수의 값을 나눈 후에 나머지를 변수에 저장 (변수=변수%피연산자 와 동일) |
|
변수 | &= | 피연산자 | 우측의 피연산자의 값을 & 연산 후 결과를 변수에 저장 (변수=변수&피연산자 와 동일) |
|
변수 | |= | 피연산자 | 우측의 피연산자의 값을 | 연산 후 결과를 변수에 저장 (변수=변수|피연산자 와 동일) |
|
변수 | ^= | 피연산자 | 우측의 피연산자의 값을 ^ 연산 후 결과를 변수에 저장 (변수=변수^피연산자 와 동일) |
|
변수 | <<= | 피연산자 | 우측의 피연산자의 값을 << 연산 후 결과를 변수에 저장 (변수=변수<<피연산자 와 동일) |
|
변수 | >>= | 피연산자 | 우측의 피연산자의 값을 >> 연산 후 결과를 변수에 저장 (변수=변수>>피연산자 와 동일) |
|
변수 | >>>= | 피연산자 | 우측의 피연산자의 값을 >>> 연산 후 결과를 변수에 저장 (변수=변수>>>피연산자 와 동일) |
61. 삼항 연산자란?
- 세 개의 피연산자를 필요로 하는 연산자
- 앞의 조건식 결과에 따라 콜론 앞 뒤의 피연산자 선택 -> 조건 연산식
조건식(피연산자 1) ? 값 또는 연산식(피연산자 2) : 값 또는 연산식(피연산자 3)
62. 단항 연산자의 종류
- 비트 반전 연산자 : ~
* byte, short, int, long 타입만 피연산자가 될 수 있다.
* 비트값을 반전(0 -> 1, 1-> 0) 시킨다.
* 연산결과를 int 타입을 가짐
63. 이항 연산자란?
- 피연산자가 2개인 연산자
- 종류
* 산술 연산자: +, -, *, /, %
* 문자열 연결 연산자 : +
* 대입 연산자 : =, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>=
* 비교 연산자 : <, <=, >, >=, ==, !=
* 논리 연산자 : &&, ||, &, |, ^, !
* 비트 논리 연산자 : &, |, ^
* 비트 이동 연산자 : <<, >>, >>>
64. 산술 연산자
- boolean 타입을 제외한 모든 기본 타입에 사용 가능
- 결과값 산출할 때 Overflow 주의
- 정확한 계산은 정수를 사용
- NaN과 Infinity 연산은 주의할 것
연산식 | 설명 | ||
피연산자 | + | 피연산자 | 덧셈 연산 |
피연산자 | - | 피연산자 | 뺄셈 연산 |
피연산자 | * | 피연산자 | 곱셈 연산 |
피연산자 | / | 피연산자 | 좌측 피연산자를 우측 피연산자로 나눗셈 연산 |
피연산자 | % | 피연산자 | 좌측 피연산자를 우측 피연산자로 나눈 나머지를 구하는 연산 |
65. 기본(primitive)타입
- 정수, 실수, 문자, 논리 리터럴을 직접 저장하는 타입
- 메모리의 최소 기억단위인 bit가 모여 byte 형성
값의 종류 | 기본타입 | 메모리 사용 크기 | 저장되는 값의 범위 | |
정수 | byte | 1 byte | 8 bit | 2⁷~2⁷-1 (-128~127) |
char | 2 byte | 16 bit | 0~2¹⁶-1 (유니코드: ₩u0000~₩uFFFF, 0~65535) |
|
short | 2 byte | 16 bit | -2¹⁵~2¹⁵-1 (-32,768~32,767) |
|
int | 4 byte | 32 bit | -2³¹~2³¹-1 (-2,147,482,648~ 2,147,483,647) |
|
long | 8 byte | 64 bit | -2⁶³~2⁶³-1 | |
실수 | float | 4 byte | 32 bit | (+/-)1.4E-45 ~ (+/-)3.4E38 |
double | 8 byte | 64 bit | (+/-)4.9E-324 ~ (+/-)1.7E08 |
|
논리 | boolean | 1 byte | 8 bit | true, false |
66. 실수의 표현
- 부동소수점 방식으로 표현
+(부호) m(가수) x 10ⁿ(n : 지수)
실수 1.2345 -> 0.12345 x 10¹
- float : 부호(1bit) + 지수(8bit) + 가수(23bit) = 32bit = 4byte
- double : 부호(1bit) + 지수(11bit) + 가수(52bit) = 64bit = 8byte
67. 문자
- 코드(문자셋)
* 문자를 숫자로 매핑한 것
- 종류
* 아스키코드(ASCII)
* 유니코드(Unicode)
- 자바의 문자형
* 유니코드를 저장
* 영문 파트는 ASCII코드와 동일
68. 자동 타입 변환
- 프로그램 실행 도중 작은 타입은 큰 타입으로 자동 타입 변환 가능
큰크기타입 = 작은크기타입 -> 자동 타입 변환
byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)
69. 타입 변환
- 데이터 타입을 다른 타입으로 변환하는 것
* byte ↔ int, int ↔ double
- 종류
* 자동(묵시적) 타입 변환 : Promotion
* 강제(명시적) 타입 변환 : Casting
70. 연산식에서 자동 타입 변환
- 연산은 같은 타입의 피연산자(operand)간에만 수행
* 서로 다른 타입의 피연산자는 같은 타입으로 변환
* 두 피연산자 중 크기가 큰 타입으로 자동 변환
* Ex) int type으로 계산 결과를 얻고 싶다면? -> Double type 변수를 먼저 int 변환 후 계산
- long을 제외한 정수 타입 연산은 int 타입으로 계산됨
- float 타입과 float 타입 연산은 결과도 float
- double 타입이 있다면 double로 결과가 나옴
71. 강제 타입 변환
- 큰 타입을 작은 타입 단위로 쪼개기
- 끝의 한 부분만 작은 타입으로 강제적 변환
작은크기타입 = (작은크기타입) 큰크키타입 -> 강제 타입 변환