Identifier - 식별자(데이터의 항목을 식별하고 데이터의 성질을 표시하기 위해 사용하는 문자의 집합)
식별자란? 클래스 또는 변수에 이름을 짓고 구분할 수 있으며 식별할 수 있다. (어디든 붙인 이름이라고 보면 된다.)
- 개발자가 직접 이름을 지어주는 것을 말한다.
- 프로그래밍을 하면서 이미 언어에서 이름이 정해져 있는 것을 예약어(키워드)라고 한다. 이런 예약어들은 직접 바꿀 수는 없다.
- 변수, 함수, 메서드, 클래스, 인터페이스 등의 이름을 식별자라고 부른다.
- 식별자들의 이름을 지어줄 때는 몇 가지 규칙이 필요하다.
자바에서 식별자를 사용할 때 꼭 지켜야 할 규칙이 있다. (지키지 않을 경우 에러 발생)
- 식별자의 이름은 중복을 허용하지 않는다. 또한, 대/소문자를 철저하게 구분한다.
- 식별자 이름은 숫자로 지정하거나 숫자로 시작하면 안된다.
- 식별자 이름에 공백을 포함할 수 없다.
- 식별자 이름에 쓸 수 있는 특수문자는 밑줄(_), 달러기호($)뿐이다.
하지만 사용을 권장하지 않는다.
특수문자의 경우 사용하기로 약속한 곳이 지정되어 있다. - 키워드(예약어)는 식별자 이름으로 사용이 불가능하다.
키워드는 이미 어떠한 기능을 내포하고 있는 지정 문자이다. - 한글이나 한자 같은 식별자 이름도 지정이 가능하다.
그러나 사용을 권하지 않는다.
public class Identifier {
public static void main(String[] args) {
//1. 식별자의 이름은 중복을 허용하지 않는다.
// 또한, 대/소문자를 철저하게 구분한다.
int age = 35;
// int age = 40; (x)
int Age = 40;
System.out.println(age);
System.out.println(Age);
//2. 식별자 이름은 숫자로 지정하거나 숫자로 시작하면 안된다.
// int 700 = 365; (x)
// int 7number = 7; (x)
int number7111 = 7;
int num7ber = 7;
//3. 식별자 이름에 공백을 포함할 수 없다.
// int my birth day = 20211020; (x)
int mybirthday = 20211020;
int myBirthDay = 20211020; //camel case
//4. 식별자 이름에 쓸 수 있는 특수문자는 밑줄(_), 달러기호($)뿐이다.
// 하지만 사용을 권장하지 않는다.
// 특수문자의 경우 사용하기로 약속한 곳이 지정되어 있다.
// int customer_age = 10; //snake case (under bar 사용)
//5. 키워드(예약어)는 식별자 이름으로 사용이 불가능하다.
// 키워드는 이미 어떠한 기능을 내포하고 있는 지정 문자이다.
// String class = "클래스"; (x)
String Class = "클래스"; //(별로 권장하지 않음.)
String className = "클래스";
//6. 한글이나 한자 같은 식별자 이름도 지정이 가능하다.
// 그러나 사용을 권하지 않는다.
int 숫자 = 10;
String 名 = "홍길동";
System.out.println(숫자);
System.out.println(名);
}
}
자바 개발자들의 약속, 관례로 식별할 때 camel case를 사용한다.
여러 단어를 연결해서 하나의 이름을 만들 때는 연결 단어의 첫 글자를 대문자로 작성해주는 것을 원칙으로 약속을 했다.
- camerl case: phoneNumber (Java, JavaScript 등)
- snake case: phone_number (Python, SQL, C 등)
- 클래스/인터페이스 이름
- 첫 글자를 대문자로 Pascal case 적용
ex) MyCalculatorForHim
- 첫 글자를 대문자로 Pascal case 적용
- 변수/메서드(함수) 이름
- 첫 글자를 소문자로 Camel case 적용
ex) String userName;
ex) void insertBoardArticle();
- 첫 글자를 소문자로 Camel case 적용
잘 못된 식별자의 예로서 컴파일 시 오류가 발생한다.
잘못된 예 | 설 명 |
3test | 식별자는 숫자로 시작하면 안 된다. |
@test | 식별자의 첫 문자에 올 수 있는 특수문자는 "_"와 "$"뿐 이다. |
this | this는 키워드이며, 키워드는 식별자로 사용할 수 없다. |
num data | 공백을 포함할 수 없다. |
올바른 사용 예
바른 예 | 설 명 |
test3 | 숫자는 식별자의 첫 문자만 아니면 어느 곳이나 올 수 있다. |
_test | "_"는 식별자의 첫 문자로 사용할 수 있다. |
This | This는 자바에서 사용되는 this와는 다르다.(대/소문자를 구분한다.) |
numData | 대/소문자를 같이 사용할 수 있다. |
자바의 예약어(키워드)
abstract | continue | for | new | switch |
assert | default | goto | package | synchronized |
boolean | do | if | private | this |
break | double | implements | protected | throw |
byte | else | import | public | throws |
case | enum | instanseof | return | transient |
catch | extends | int | short | try |
char | final | interfase | static | void |
class | finally | long | strictfp | volatile |
const | float | native | super | while |
- goto, const 키워드로 정의되어 있지만 사용하지 않는다.
- strictfp는 Java 1.2 버전에 추가된 키워드이다.
- assert는 Java 1.4 버전에 추가된 키워드이다.
- enum은 Java 1.5 버전에 추가된 키워드이다.
자바 기본 데이터 타입의 종류
유형 | 크기 | 범위 | 초기 값 | ||
정수형 Integral |
byte | 1 byte | -127 ~ 127 | -27 ~ 27 - 1 | 0 |
short | 2 byte | -32,768 ~ 32,767 | -215 ~ (215 - 1) | 0 | |
int | 4 byte | -2,147,483,648 ~ 2,147,483,647 | -231 ~ (231 - 1) | 0 | |
long | 8 byte | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | -263 ~ (263 - 1) | 0L | |
실수형 Floating-Point |
float | 4 byte | (7자리의 소수) | (3.4 * 10-38) ~ (3.4 * 1038) | 0.0F |
double | 8 byte | (15자리의 소수) | (1.7 * 10-308) ~ (1.7 * 10308) | 0.0D | |
논리형 Logical |
boolean | 1 byte(bit) | 0 또는 1 | true 또는 false | false |
문자형 Textual |
char | 2 byte | ₩u0000 ~ ₩uFFFF | 0 ~ 216 | '₩u0000' |
String | 가변적 | 각 위치에서 ₩u0000 ~ ₩uFFFF | null | ||
참조 타입 | null |
boolean은 true와 false 두 가지의 값만 표현되기 때문에 1bit로 충분하지만
자바에서는 데이터를 다루는 최소 단위가 byte이기 때문에 1 byte 크기이다.
public class IntegerExample {
public static void main(String[] args) {
/*
# 리터럴
변수에 저장되기 전의 상수값.
자바의 정수 리터럴의 타입은 int이다.
int보다 더 큰 범위의 수를 표현하기 위해서는 뒤에
L을 붙여 long타입으로 인식 시켜야 한다.
*/
byte a = 127;
short b = 32767;
int c = 2147483647;
long d = 2147483648L;
}
}
long 타입에 L을 붙이지 않을 경우 "The literal 2147483648 of type int is out of range" 라는 문구가 뜬다.
변수에 대입하기 전에 리터럴의 범위가 벗어났기 때문에 해당 문구가 뜨는 것을 볼 수 있다.
자바의 정수형 기본 타입은 int이기 때문에 L을 표기해서 long type인걸 명시해줘야 한다.
public class FloatExample {
public static void main(String[] args) {
//실수 리터럴의 기본 데이터 타입은 double 이다.
float f1 = 7.12345F;
double d1 = 7.12345;
float f2 = 1.234567891234F;
double d2 = 1.234567891234;
System.out.println(f2);
System.out.println(d2);
}
}
float 타입에 F를 붙이지 않을 경우 "Type mismatch: cannot convert from double to float" 라는 문구가 뜬다.
double을 float로 변환할 수 없다는 문구가 뜨는 것을 볼 수 있다.
실수 literal의 기본 타입은 double이기 때문에 F를 표기해서 float tytpe인걸 명시해줘야 한다.
public class BooleanExample {
public static void main(String[] args) {
boolean b1 = true;
boolean b2 = false;
// boolean b3 = True; (x)
// boolean b4 = False; (x)
// boolean b5 = 0; (x)
// boolean b6 = "논리형 타입"; (x)
}
}
boolean은 0 또는 1이라고 하는데 메모리 내부에서 식별하는 것이고,
자바에서 boolean 타입을 변수에 지정하려면 true와 false라는 keyword로 명시해야 한다.
해당 키워드가 아닌 대문자로 된 True와 False 그리고 숫자, 문자열을 넣으면 컴파일 에러가 발생한다.
public class TextualExample {
public static void main(String[] args) {
/*
# 단일 문자를 저장하는 데이터 타입 char
- 저장하고 싶은 문자를 홑따옴표('')에 담아서 대입한다.
*/
char c1 = 'A';
System.out.println(c1);
char c2 = 44201;
System.out.println(c2);
/*
# 문자열을 저장할 수 있는 데이터 타입 String
- 저장하고 싶은 문자열을 겹따옴표("")에 담아 대입한다.
- String은 기본 데이터 타입은 아니지만 자주 쓰이기 때문에
기본 데이터 타입처럼 사용한다. (객체 타입이다.)
*/
String s1 = "my dream ";
String s2 = "is a programmer";
System.out.println(s1);
System.out.println(s2);
//자바에선 문자열의 덧셈 연삽을 지원한다.
//연산 결과로는 문자열을 연결해서 결합한 결과가 도출된다.
System.out.println(s1 + s2);
//문자열과 다른 데이터 타입간의 연산
//결과는 무조건 문자열의 덧셈 연산과 같다.
System.out.println("------------------------------");
System.out.println(100 + 100);
System.out.println("100" + "100");
System.out.println("100" + 100);
System.out.println(3.14 + "hi");
int month = 10;
int day = 13;
//내 생일은 10월 13일 입니다.
System.out.println("내 생일은 " + month + "월 " + day + "일 입니다.");
}
}
char에 홑따옴표(')가 아닌 큰따옴표(")를 감쌀 경우 "Type mismatch: cannot convert from String to char" 라는 문구가 뜬다.
단일 문자를 저장하기 위해서는 항상 홑따옴표('')로 감싸서 대입해야 한다.
형 변환이란?
형 변환(type casting)이란 데이터들이 서로 형태를 바꾸는 것을 의미한다. 형 변환은 묵시적 형변환과 명시적 형 변환 2가지 경우로 나뉜다.
byte < short = char < int < long < float < double
작은 크기의 데이터 타입을 큰 데이터 타입으로 변환할 때는 자동으로 형 변환이 일어난다.
public class CastingExample1 {
public static void main(String[] args) {
byte b = 10;
int i = b;
System.out.println(i);
char c = 'A';
int j = c;
System.out.println("A의 문자 번호 : " + j);
int k = 500;
double d = k;
System.out.println(d);
}
}
묵시적 변환, 자동 형변환(promotion, UpCasting)
- 크기가 작은 데이터 타입의 자료를 큰 데이터 타입으로 변환할 때는 자바 가상 머신(JVM)이 자동으로 타입을 올려서 변환해 준다.
public class CastingExample2 {
public static void main(String[] args) {
int i = 72;
char c = (char) i;
System.out.println("72의 문자값 : " + c);
double d = 4.98765;
int j = (int) d;
System.out.println(j);
int k = 1000;
byte b = (byte) k;
System.out.println(b);
}
}
- 크기가 큰 데이터타입의 값을 작은 데이터 타입으로 변환하려면 반드시 형 변환 연산자 : (type)를 사용하여 명시적으로 형 변환을 진행해야 한다. (DownCasting)
- 명시적으로 형 변현을 해야 하는 이유는, DownCasting의 경우 저장공간이 줄어들어 데이터 손실의 가능성이 항상 존재하기 때문이다. (overflow, underflow)
public class CastingExample3 {
public static void main(String[] args) {
char c = 'B';
int i = 2;
//서로 타입이 다른 기본 데이터의 연산 시에는 데이터 타입이
//큰 쪽에서 작은 쪽이 맞춰져서 자동으로 형 변환이 진행된 뒤에 연산이 진행된다.
int intResult = i + c;
char charResult = (char) (c + i);
System.out.println(intResult);
System.out.println(charResult);
int k = 10;
double d = (double) k /4;
System.out.println(d);
System.out.println(k);
//int보다 작은 크기의 데이터 연산은 자동으로 값이
//int로 변환되어 처리된다. (데이터 손실의 방지)
byte b1 = 100;
byte b2 = 70;
System.out.println(b1 + b2);
}
}
자바 연산자 종류
우선 순위 | 연산자 | 연산자 설명 |
높음 ↑ 우 선 순 위 낮음 ↓ |
( ) [ ] . |
괄호 소수점/참조 연산자 |
++, -- +, - ! ~ (type) |
증/감 연산자(증가, 감소) 부호 논리 연산자(반전) 비트 연산자(반전) 형변환 |
|
*, /, % | 산술 연산자(곱셈, 나눗셈, 나머지) | |
+, - | 산술 연산자(덧셈, 뺄셈) | |
<<, >>, >>> | 비트 이동 연산자(좌, 우, 우(부호포함)) | |
<, <=, >, >= ==, != instanceof |
비교 연산자(대/소 비교) 비교 연산자(동/이 비교) type 연산자(객체 형 비교) |
|
&, |, ^ | 비트 연산자(AND, OR, XOR) 논리 연산자(AND, OR, XOR) |
|
&&, || | 논리 연산자(Short Circuit) | |
? : | 논리 연산자(3항 연산자) | |
= +=, -=, *=, /=, %= <<=, >>=, >>>= &=, ^=, |= |
대입 연산자 연산 후 대입 연산자 연산 후 대입 연산자 연산 후 대입 연산자 |
public class PlusMinusOperator {
public static void main(String[] args) {
//증감 연산자(++, --)
//변수의 값을 단순히 하나씩 올리거나 내릴 때 사용한다.
int i = 1;
int j = i++; //후위 연산 (선연산 후 증감)
int k = i--;
System.out.println("i의 값: " + i);
System.out.println("j의 값: " + j);
System.out.println("k의 값: " + k);
System.out.println("-------------------------");
int x = 1;
int y = ++x; //전위 연산 (선증감 후 연산)
int z = --x;
System.out.println("x의 값: " + x);
System.out.println("y의 값: " + y);
System.out.println("z의 값: " + z);
int a = 3;
int b = ++a + 5 * 3;
System.out.println(b);
}
}
public class AssignmentOperator {
public static void main(String[] args) {
/*
# 대입 연산자 (=)
- 변수의 값을 대입할 때 사용하는 연산자이다.
# 복합 대입 연산자 (+=, -=, *=, /=, %=)
- 대입연산자에 산술연산자가 결합되어 있는 형태이다.
*/
int a = 5;
int b = 5;
b =+ 3; // b = +3
System.out.println(b);
a += 3; // a = a + 3
System.out.println(a);
System.out.println("--------------------------");
a -= 4; // 4
System.out.println(a);
a *= 6; // 24
System.out.println(a);
a /= 5; // 4
System.out.println(a);
a %= 3; // 1
System.out.println(a);
}
}
public class LogicalOperator {
public static void main(String[] args) {
//비교(관계) 연산자 (<, <=, >, >=, ==, !=)
//좌항과 우항의 크기를 비교하여 결과값으로
//항상 논리형 타입의 값을 도출한다.
int x = 10, y = 20;
System.out.println(x != y);
System.out.println(x > 10 && (y / 0 == 10));
System.out.println(x > 10 || y < 30);
//논리 반전 연산자 (!: 단항)
//단순히 논리값을 반전시킬 때 사용한다.
//true -> false, false -> true
int z = 10;
System.out.println(!(z == 10));
}
}
논리 연산자 (&, &&, |, ||)
- 좌항과 우항의 논리값을 연산하여 하나의 논리값을 도출한다.
- &, && : 양쪽 항의 논리값이 모두 true일 경우 true가 도출한다.
- |, || : 양쪽 항의 논리값 중 한 쪽만 true여도 true를 도출한다.
&&, || -> 단축 평가 연산 (short circuit operation)
- 좌항의 연산 결과가 전체 연산 결과에 영향을 미칠 경우 우항의 연산을 진행하지 않는다.
자바 표준 출력함수 System.out.print()
- 표준 입출력이란 데이터 입출력을 위한 주변 장치를 별도로 설정하지 않았을 경우 사용되는 입출력을 말한다.
- 일반적으로 표준 입력은 키보드 입력을 사용하며 표준 출력은 단말기 화면 출력을 말한다.
- 자바는 표준 출력함수로 System.out.print()를 지원하여 프로그램의 데이터를 화면에 출력할 수 있다.
- 함수의 인자값으로 출력하고 싶은 변수나 상수를 넣으면 화면에 출력된다.
public class PrintExample {
public static void main(String[] args) {
System.out.print("안녕하세요.");
System.out.println("hello.");
System.out.print("안녕히 가세요.");
System.out.println("bye. bye.");
int month = 12;
int day = 25;
String anni = "크리스마스";
//12월 25일은 크리스마스 입니다.
System.out.println(month + "월 " + day + "일은 " + anni + " 입니다.");
System.out.printf("%d월 %d일은 %s 입니다.", month, day, anni);
System.out.printf("지금 시간은 %d시 %d분 입니다. \t\t\t%s요일입니다.\n\n", 9, 46, "목");
double rate = 63.456;
System.out.printf("시험 합격율: %f\n", rate);
System.out.printf("시험 합격율: %.2f%%\n", rate);
System.out.printf("시험 합격율: %.1f\n", rate);
System.out.printf("시험 합격율: %.0f%%", rate);
}
}
- 개행을 포함하지 않는 print()
- 자동으로 개행을 포함해 주는 println()
- 형식 지정 표준 출력 함수 printf()
서식 문자를 이용해서 문자열을 완성 시킨 후, 서식 문자에 들어갈 값을 지정해서 출력하는 방식.
printf 함수는 print와 마찬가지로 줄 개행 기능이 없다.
포맷팅 서식 문자 종류
%d : 부호가 있는 정수 데이터 (decimal)
%f : 실수 데이터 (floation point)
%s : 문자열 (String)
탈출 코드 (escape code)
- 문자열 내에서 특정 명령을 내리고 싶을 때 사용하는 특수 기호이다.
- 어떤 출력 함수에서도 사용이 가능하다.
- 반드시 따옴표 내에 위치시켜야 한다.
\n: 줄 바꿈 명령 (enter)
\t: 탭 정령 (4칸 들여쓰기)
- %f는 기본적으로 소수점 6자리까지 표현하도로 설계되어 있다.
- 만약 자리수를 조정하려면 %.[자리수에 해당하는 숫자]f를 사용한다.
- "%" 특수문자를 표현하려면 %%로 사용하면 된다.
'Programming Language > Java' 카테고리의 다른 글
[국비] Java 내용정리 Day04 (0) | 2021.10.29 |
---|---|
[국비] Java 내용정리 Day03 (0) | 2021.10.28 |
[국비] Java 내용정리 Day01 (0) | 2021.10.25 |
[국비] 웹 개발 프로그래밍 시작 (0) | 2021.10.22 |
[JAVA] Windows10 Java 8 설치 및 설정 (0) | 2021.10.20 |
댓글