1. 변수 선언 형식
자료형 변수명;
ex1) 변수 선언 후 초기값을 할당
int age;
age = 20; // 초기화 작업
ex2) 변수 선언과 동시에 초기값을 할당
int age = 20;
2. 지역변수(Local Variable)
1) 지역변수 정의 : 그 지역(범위)안에서만 사용할 수 있는 변수
2) 지역변수는 { } 부분까지 사용 가능( { : 열기, } : 닫기)
+ { } : 범위연산자
ex)
public class Ex03 {
public static void main(String[] args) {
// 지역변수 { 열고 } 닫는 부분까지 사용 가능
String name = "야리니";
{
// 지역변수 선언
int age = 20;
System.out.println(age);
System.out.println(name);
}
// 에러메시지 : age cannot be resolved to a variable
// 해석 : age 변수를 확인할 수 없다.
// System.out.println(age);
System.out.println(name);
}
}
{ } 범위를 벗어나 변수를 출력하려고 하면 에러 발생
에러메시지 : age cannot be resolved to a variable
해석 : age 변수를 확인할 수 없다.
3) 지역변수는 반드시 초기화를 해야 사용할 수 있다.
ex) int age;
System.out.println(age);
에러메시지 : The local variable age may not have been initialized
해석 : age 지역변수는 초기화 되지 않아서 사용할 수 없다
3. 표준 출력 함수와 원하는 출력형식으로 출력하기
1) System.out.print()
System.out.print("탄지로");
System.out.print("네즈코");
System.out.print("쿄쥬로");
// 결과
// 탄지로네즈코쿄쥬로
2) System.out.println()
System.out.println("탄지로");
System.out.println("네즈코");
System.out.println("쿄쥬로");
// 결과
// 탄지로
// 네즈코
// 쿄쥬로
위에 보이는 코드 실행 결과처럼 1)과 2)의 차이점은 개행(줄바꿈)이다.
즉, println()은 print() + 개행코딩(줄바꿈코딩)이라고 볼 수 있다.
☞ 개행하는 코딩 방법은 다음과 같다.
ㄱ. System.out.println() 사용
ㄴ. \n을 사용하기 > '\n'은 제어문자 == 특수문자 == escape문자라고 한다.
ex)
System.out.print("탄지로\n");
System.out.print("네즈코" + '\n');
System.out.print("쿄쥬\n로");
// 결과
// 탄지로
// 네즈코
// 쿄쥬
// 로
3) System.out.printf()
printf() 함수 파악하기
ㄱ. 기능 : 편리하게 출력형식 문자열을 지정해서 출력하는 메소드
ㄴ. 매개변수 : String format, Object... args
ex) System.out.printlnf("출력형식", name);
출력형식 예) 이름은 "홍길동"이고, 나이는 '20'살입니다.
위의 출력형식 예를 코딩하면 다음과 같다.
public static void main(String[] args) {
String name;
int age;
name = "홍길동";
age = 20;
System.out.printf("이름은 \"%s\"이고, 나이는 '%d살' 입니다.", name, age);
}
☞ 여기서 각 자료형 출력 서식이 있는데 이번 수업 시간에 배운 것은 3가지 이다.
ㄱ. 문자열 출력 서식 : %s > String
ㄴ. 정수 출력 서식 : %d > byte, short, int, long
ㄷ. 문자 출력 서식 : %c > char
ex) 학점 'A' 'B' 'C' 'D' 'F'
학점을 저장할 수 있는 변수 선언
String name = "야리니";
int age = 20;
char grade = 'A';
System.out.printf("이름은 \"%s\"이고, 나이는 '%d'살이고, 학점은 '%c'입니다.", name, age, grade);
// 결과
// 이름은 "야리니"이고, 나이는 '20'살이고, 학점은 'A'입니다.
☞ Java API Doc로 printf 찾는 방법
Java API Doc > java.lang 패키지 선택 > system 클래스 선택 > [PrintStream] out 클릭 > printf() 2개 중 매개변수가 String format, Object... args인 것 클릭
☞ 참고
+ 연산자의 종류 2가지
1) + 산술연산자 중에 덧셈 연산자
2) + 문자열 연결 연산자
처리 방향은 왼쪽에서 오른쪽으로(------>)
+ 특수기호 앞에 \(역슬래쉬)를 붙여야 한다.
'' > 홑따옴표는 특수기호를 붙이지 않아도 되지만 가독성을 위해서 붙여서 사용하는 것을 권장!
특수기호 앞에 역슬래쉬를 붙이지 않으면 다음과 같은 에러가 발생
System.out.println("이름은 ""+ name + ""이고, 나이는 " + age + "살입니다.");
에러메시지 : The left-hand side of an assignment must be a variable
해석 : 할당된 왼쪽은 변수여야 한다.(좌측항은 변수, 우측항은 대입할 값이어야 한다)
"이름은 " 와 "+ name + " 와 "이고, 나이는 " 사이에 연산자가 필요
4. 문자와 문자열의 차이
- 한문자 + 한문자 + 한문자 ... 문자가 나열된 것을 문자열이라고 한다.
- 자바 문자열 "" printf() 출력서식 %s
- 자바 문자 ''printf() 출력서식 %c
- A, 'A', "A" 차이
ㄱ. A > 클래스명, 변수명 등등의 식별자 이름으로 인식(identifer)
ㄴ. 'A' > 문자
ㄷ. "A" = 'A' + '\0'(Null 문자)
5. ,(콤마) 연산자 설명
동일한 자료형의 변수를 여러 개 선언할 때 콤마 연산자를 사용한다.
ex) int a = 10 , b = 20, c = a + b;
☞ 참고
- =(대입연산자)의 처리되는 방향은 오른쪽에서 왼쪽(<------)이다.
ex) a = b = c = 100;
System.out.print(a, b, c)
결과 : 100100100
6. 두 x,y 변수(저장공간)의 값을 교환하기
저장공간의 값을 교환하기 위해서는 임시저장공간이 필요하다.
7. 식별자(identifier)를 명명하는 규칙
1) 대소문자를 구분한다. 길이는 제한이 없다.
ex) String Name = "홍길동";
System.out.println(name); > 대소문자 구분을 하기 때문에 에러 발생
2) 캐멀표기법(단어 + 단어 > 단어가 바뀔 때 대문자로 시작)
ex) String firstName;
3) 키워드를 사용하면 안된다.
ex) String public; -> X
int int; -> X
4) 숫자로 시작할 수 없다.
ex) String name01; -> O
String 01name; -> X
5) 만약, 식별자 사이에 공백을 주고 싶을 때는 공백대신 _(언더바) 또는 $만 사용이 가능하다.
ex) String last_name;
String _name;
8. 자바에서 사용하는 자료형(Data Type)
1) 정의 : 값의 종류에 따라 값이 저장될 공간의 '크기'와 '자료형식'을 정의하는 것을 자료형이라고 한다.
2) 종류
1) 기본형(Primitive Type)
ㄱ. 숫자형
ㄴ 정수형 : byte(1byte), short(2byte), int(4byte), long(8byte)
char(유니코드 2byte)
ㄴ 실수형 : float(4byte), double(8byte)
ㄴ. 불린형(논리형) : boolean(1byte) > 참(true)/거짓(false)
2) 참조형(Reference Type) : 배열(Array), 클래스(ex. String), 인터페이스(Interface)
2-1) 불린형(논리형) 자료형 설명
- 참(true)과 거짓(false) 값만을 가지는 자료형
- 불린형 출력서식 : %b
ex) boolean gender = true;
System.out.printf("성별은 %b 입니다.", gender);
결과 > 성별은 true 입니다.
+ boolean gender = 1; 선언하면 에러 발생
에러메시지 : Type mismatch: cannot convert from int to boolean
해석 : 자료형이 일치하지 않는다(int 타입을 boolean 타입으로 변환할 수 없다)
2-2) 정수계열 자료형 설명
+ [][][][][][][][] 8bit를 표현합니다.
ㄱ. byte
1byte [][][][][][][][] -> 2^8 = 256가지 -> 부호가 1bit라서 []가 1개 빠지면 2^7=128
즉, 양수/음수 128가지로 표현범위 -128 ~ 127
ㄴ. short
2byte [][][][][][][][] [][][][][][][][] > 2^16이지만 부호 1bit 빠지면 2^15=32,768
즉, 양수/음수 32,768가지로 표현범위 -32,768 ~ 32,767
ㄷ. int
4byte [][][][][][][][] [][][][][][][][] [][][][][][][][] [][][][][][][][]
2^32이지만 부호 1bit 빠지면 2^31 즉, 양수/음수 2,147,483,648가지
표현범위 -2,147,483,648 ~ 2,147,483,647 > -21억 ~ 21억
ㄹ. long
8byte [][][][][][][][] [][][][][][][][] [][][][][][][][] [][][][][][][][] [][][][][][][][] [][][][][][][][] [][][][][][][][] [][][][][][][][]
2^64이지만 부호 1bit 빠지면 2^63 즉, 양수/음수 9,223,372,036,854,775,808가지
표현범위 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 > -900경 ~ 900경
+ 정수계열의 자료형을 왜 구분해서 사용해야 하는가?
가정 : 나이 최저 1살 ~ 최고 125살 > byte로 표현 가능
long age;로 선언하여 사용할 시 메모리 7바이트 낭비 / 처리 속도 8배 떨어진다.
2-3) 문자 char 자료형 설명
- 유니코드(Unicode 2byte)
'A' 65정수 -> 2진수 0000 0000 0100 0001 (4자리씩 잘라서 계산하면 16진수 변환 가능)
-> 16진수 0 0 4 1
0x0041 2바이트
0x41 1바이트
'\u0041'; // 유니코드 2바이트를 뜻하는 1문자 > A
'\u0061'; // 유니코드 2바이트를 뜻하는 1문자 > a
과거 : ASCII 7비트(128가지 - 알파벳대소문자, 숫자, 기호)
현재 : 확장 ASCII 8비트(256가지) -> 한글, 중국어, 일본어 등 세계 각국의 문자 표현X
유니코드 2바이트 65,536가지 > 전 세계 각국의 문자 표현 O(한글 40402 완성형 가~힣)
문자코드표 10진수 2진수 진법 변환
'A' 65 [0][0][0][0][0][0][0][0] [0][1][0][0][0][0][0][1]
'B' 66
'C' 67
- 진법
2진법 : 0,1
8진법 : 0,1,2,3,4,5,6,7
10진법 : 0,1,2,3,4,5,6,7,8,9
16진법 : 0,1,2,3,4,5,6,7,8,9,A(10),B(11),C(12),D(13),E(14),F(15)
- 진법변환
ㄱ. 10진수 10 -> 2진수 변환 (1바이트)
10을 2로 나누고 몫이 0이 될 때까지의 나머지 역순
00001010
ㄴ. 10진수 10 -> 8진수 변환
10을 8로 나누기
12
012(앞에 0을 붙이면) -> 8진수 12
ㄷ. 10진수 10 -> 16진수 변환
10을 16으로 나누기
A > 16으로 나눌 수 없어서 몫이 0이 되고 나머지가 10이 되어서 16진수 A로 표기됨
0x12(앞에 0x를 붙이면) -> 16진수 12
ㄹ. 2진수 1010 -> 10진수 진법 변환
1 0 1 0
1*2^3 + 0*2^2 + 1*2^1 + 0*2^0
1*8 + 0 + 1*2 + 0
= 10
ㅁ. 8진수 012 -> 10진수 진법 변환
1 + 2
1*8^1 + 2*8^0
8 + 2
= 10
- 인코딩/디코딩
'A' -> 65 (인코딩(encoding) : 어떤 문자를 그에 매칭되는 정수 값으로 바꾸는 작업)
65 -> 'A' (디코딩(decoding) : 어떤 정수 값을 그에 매칭되는 문자로 바꾸는 작업)
* 인코딩한대로 디코딩을 해야 문자가 깨지지 않음
9. 음수의 메모리 표현방법
ㄱ. 부호와 절대치 사용
양수 10 > [0]000 1010
음수 -10 부호와 절대치 [1]000 1010
ㅣ-10ㅣ
10
2진수로 변환 > [1]000 1010
+ 사용하지 않는 이유
0 표현방식 2가지 낭비
[0]000 0000
[1]000 0000
ㄴ. 1의 보수법
-10 1의 보수법
1) 절대치 구하기 > ㅣ-10ㅣ > 10
2) 2진수 진법 변환 > 0000 1010
3) 보수 > 1111 0101 == -10
ㄷ. 2의 보수법(현재 사용)
-10 2의 보수법
1) 절대치 ㅣ-10ㅣ > 10
2) 2진수로 변환 > 0000 1010
3) 1보수 0은 1로, 1은 0으로 바꾸기 1111 0101
4) +1 0000 0001
-----------------------------------------------------------
1111 0110
> 더하게 되면 마지막에 1+1이라 그 다음 자리수로 1이 올라가게 됨
'TIL > Java' 카테고리의 다른 글
[SIST] Java_days04 (0) | 2022.02.18 |
---|---|
[SIST] Java_days03 (0) | 2022.02.17 |
[SIST] Java_days01 (0) | 2022.02.15 |
[Java] 복제와 참조 (0) | 2022.02.09 |
[Java] replace (0) | 2022.02.07 |