문자형(CharacterType) 리터럴
: 문자 하나를 ' ' 안에 표현
=> Java에서 문자형 리터럴은 기본적으로 2Byte(Character)로 표현
=> 문자형 리터럴은 일반문자 외에 회피문자(제어문자)가 존재
-회피문자(Escape Character) : 프로그램에서 표현 불가능한 문자를 표현하기 위한 문자 ( \ 기호 사용 )
• '\n' : Enter
• '\t' : tab
• '\'' : '문자('을 문자로 표현하고 싶을 때)
• '\"' : " 문자
• '\\' : \문자
• '\0' : Null 문자
※ 문자형 리터럴은 내부적으로 약속된 정수값(0~65535)으로 표현 - 약속된 정수값 : 유니코드(Unicode) (전세계언어쓰기위해)
=> 'A' : 65, 'a' : 97 '0' : 48, '' : 32, '\n' : 13, '가' : 44032 - 완성형(이미 자음과 모음이 결합된 한글)
System.out.println("문자값(2Byte) = " + 'A'); // A
System.out.println("문자값(2Byte) = " + '가'); //가
System.out.println("문자값(2Byte) = " + '\''); // '
System.out.println("문자값(2Byte) = " + '\\'); // \
* 문자값을 표현하기 위한 자료형 - char(2Byte)
char c1 = 'A'; //문자형 변수에는 문자값에 대한 약속된 정수값이 저장
char c2 = 65; //문자형 변수에는 문자값 대신 약속된 정수값 저장 가능
char c3 = 'a' - 32;
System.out.println("c1 = " + c1); //A
System.out.println("c2 = " + c2); //A
System.out.println("c3 = " + c3); //A
char c4 = 45000;
System.out.println("c4 = " + c4); //꿈
논리형(BooleanType) 리터럴
: false(거짓),true(참) -> 연산이 불가
=> Java에서 논리형 리터럴은 기본적으로 1Byte(BooleanType)로 표현
- 관계 연산자 (비교 연산자)를 이용한 연산식의 결과값으로 논리형 리터럴 제공
System.out.println("논리값(1Byte) = " + ( 20 < 10)); //false
System.out.println("논리값(1Byte) = " + ( 20 > 10)); //true
-논리값을 표현하기 위한 자료형 - boolean(1byte)
boolean d1 = false;
boolean d2 = 20 > 10;
System.out.println("d1 = " + d1); //false
System.out.println("d2 = " + d2); //true
문자열(StringType) 리터럴
: 문자들을 " " 안에 0개 이상의 문자들로 표현 - String 객체
=> 문자열은 원시형(기본형)이 아닌 참조형으로 String 클래스로 표현
System.out.println("문자열 = " + "홍길동"); // 홍길동
System.out.println("문자열 = " + "유관순 열사가 \"대한독립 만세\"를 외쳤습니다."); // 유관순 열사가 "대한독립 만세"를 외쳤습니다.
- 문자열을 표현하기 위한 자료형 : String 클래스
String name = "임꺽정";
System.out.println("이름 = " + name); //이름 = 임꺽정
자료형 변환(TypeCast)
: 값의 자료형을 일시적으로 변환하여 사용하는 방법
=> 자동 형변환(JVM실행할 때 해줌), 강제 형변환(프로그래머가 해줌)
-자동 형변환 : 자료형이 다른 값을 연산하기 위한 JVM(Java Virtual Machine : Java 프로그램을 실행하기 위한 가상의 플랫폼)이
자료형을 일시적으로 변환
자동 형변환 통해 자료형이 서로 다른 값들이 연산 가능해짐
=> 표현의 범위가 작은 자료형의 값이 큰 자료형의 값으로 형변환되어 연산 처리
( byte >> short >> char >> int >> long >> float >> double )
System.out.println("결과 = " + (3 + 1.5)); //3(int) + 1.5(double) >> 3.0(double) + 1.5(double) >> 4.5(double)
double su = 10; //10 >> 10.0
System.out.println("su = " + su); //10.0
System.out.println("결과 = " + (35 / 10)); //3 ( int/int = int이기 때문 )
System.out.println("결과 = " + (35.0 / 10.0)); //3.5 ( double/double >> double )
System.out.println("결과 = " + (35.0 / 10)); //3.5 ( double/int >> double/double(자동 형변환) >> double )
System.out.println("결과 = " + (35 / 10.)); //3.5 ( int/double >> double/double(자동 형변환) >> double )
-> 하나만 실수여도 자동 형변환 된다!
int kor = 95, eng = 90; //점수 입력
int tot = kor + eng; //총점
// double ave = tot / 2; //평균 - 연산 결과 값: 정수값(92) >> 실수값 (92.0)으로 변환되어 저장 (실행오류)
double ave = tot / 2.; //평균 - 연산 결과 값: 실수값 (92.5) (올바른 연산)
System.out.println("총점 = " + tot + " , 평균 = " + ave); //총점 = 185 , 평균 = 92.5
- int 자료형보다 작은 자료형의 값은 무조건 int 자료형으로 형변환되어 연산 처리
byte su1 = 10, su2 = 20;
// byte su3 = su1 + su2; //byte + byte >> int + int >> int (따라서, byte 변수에 저장 불가능)
int su3 = su1 + su2;
System.out.println("su3 = " + su3); //30
* 강제 형변환
: 프로그래머가 Cast 연산자를 사용하여 원하는 자료형의 값으로 일시적으로 변환하여 명령을 작성하는 방법 - Cast 연산자 : 자료형(값)
int num = (int)12.3; // (int)12.3 >> 12
System.out.println("num = " + num); //num = 12
int num1 = 95, num2 = 10;
//double num3 = num1 / num2; //연산결과 : 9.0
double num3 = (double)num1 / num2; //연산결과 : 9.5
System.out.println("num3 = " + num3);
-정수값에 대한 연산 결과값 표현 범위 4Byte -> 8Byte
//큰 정수값은 _ 기호를 사용하여 표현 가능
int num4 = 100_000_000, num5 = 30;
//정수값에 대한 연산결과값은 4Byte(-2147483648~2147483647)로만 표현 가능
//문제점) 정수값에 대한 연산 결과값이 4Byte로 표현 가능한 범위를 벗어난 경우 쓰레기값 발생
// => 변수에 쓰레기값이 저장되어 잘못된 결과값 출력 - 실행 오류
//int num6 = num4 * num5;
//해결법) 정수값에 대한 연산 결과값이 8Byte로 표현될 수 있도록 강제 형변환
long num6 = (long)num4* num5;
System.out.println("num6 = " + num6); //num6 = 3000000000
-소숫점 2자리 위치까지만 출력되도록 명령 작성
double number = 1.23456789;
System.out.println("number = " + number); //number = 1.23456789
System.out.println("number(내림) = " + (int)(number * 100) / 100.0); //number(내림) = 1.23
System.out.println("number(반올림) = " + (int)(number * 100 + 0.5) / 100.0); //number(반올림) = 1.23
System.out.println("number(올림) = " + (int)(number * 100 + 0.9) / 100.0); //number(올림) = 1.24
연산자(Operator)
: 계산을 목적으로 제공되는 기호 또는 키워드
=> 피연산자 : 연산자에 의해 계산되는 값을 의미
=> 단항연산자(피연산자 : 1개), 이항연산자(피연산자 : 2개), 삼항연산자(피연산자 : 3개)
*최우선연산자
: 무조건 가장 먼저 연산 처리되는 연산자
-> () : 우선 처리 연산자 / [] : 배열 연산자 / : 객체 연산자
System.out.println("10 + 20 * 3 = " + (10 + 20 * 3)); //70
System.out.println("10 + 20 * 3 = " + ((10 + 20) * 3)); //90
*단항 연산자
: 피연산자가 갯수가 1개인 연산자
+ : 양수화 연산자 - 피연산자에 +1를 곱하는 연산자
- : 음수화 연산자(2의 보수 연산자) - 피연산자에 -1을 곱하는 연산자
※ 음수화 연산자는 변수값이 바뀌는 것이 아니라, 변수값을 음수화
변수값을 바꾸지 않아도 유일하게 변수값을 바꿀 수 있는 연산자 -> ++ , --
int a1 = 10;
System.out.println("a1 = " + a1); //10
System.out.println("a1 = " + (-a1)); //-10
! : Not 연산자 : false(거짓)와 true(참)을 반대로 변환하는 연산자
System.out.println("20 > 10 = " + (20 > 10)); //true
System.out.println("20 > 10 = " + !(20 > 10)); //false
++ : 1 증가 연산자 - 피연산자를 변수로 설정하고 변수값을 1 증가하여 저장하는 연산자
-- : 1 감소 연산자 - 피연산자를 변수로 설정하고 변수값을 1 감소하여 저장하는 연산자
int a2 = 10, a3 = 10;
System.out.println("a2 = " + a2 + ", a3 =" + a3); //a2 = 10, a3 =10
//++a2; // a2 = a2 + 1; -> 결과는 같으나 과정은 다름
//--a3; // a3 = a3 -1; -> 결과는 같으나 과정은 다름
** ++ 연산자와 -- 연산자는 피연선자 뒤에 작성 가능
하나의 연산식으로 구현된 단일 명령인 경우, 연산자의 위치는 연산 결과에 영향을 미치지 않는다
a2++;
a3--;
System.out.println("a2 = " + a2 + ", a3 =" + a3); //a2 = 11, a3 =9
** ++연산자와 --연산자로만 구성된 단일 명령이 아닌 경우, 연산자의 위치는 연산 결과에 영향을 미친다
int result1 = ++a4; //전처리 : ++a4 연산식이 실행된 후 result1 = a4 연산식 실행
int result2 = a5++; //후처리 : result2 = a5 연산식이 실행된 후 a5++ 연산식 실행
System.out.println("a4 = " + a4 + ", a5 =" + a5); //a4 = 11, a5 =11
System.out.println("result1 = " + result1 + ", result2 =" + result2); //result1 = 11, result2 =10
int a6, a7 = 10;
int a8 = (++a6) + a7++;
System.out.println(a8); //21
*이항 연산자
: 피연산자의 갯수가 2개인 연산자
=> 산술 연산자, 이동 연산자, 비교 연산자, 논리 연산자, 대입 연산자
산술 연산자
: *(곱), /(나눔), %(나머지), +(합 또는 문자열 결합), -(차)
int b1 = 20, b2 = 10;
System.out.println(b1 + " * " + b2 + " = " + (b1 * b2)); //20 * 10 = 200
System.out.println(b1 + " / " + b2 + " = " + (b1 / b2)); //20 / 10 = 2
System.out.println(b1 + " % " + b2 + " = " + (b1 % b2)); //20 % 10 = 0
System.out.println(b1 + " + " + b2 + " = " + (b1 + b2)); //20 + 10 = 30
System.out.println(b1 + " - " + b2 + " = " + (b1 - b2)); //20 - 10 = 10
이동 연산자
: << (왼쪽 이동 연산자), >> (오른쪽 이동 연산자), >>> (오른쪽 이동 연산자)
50(10) - 4Byte >> 00000000 00000000 00000000 00110010
50 << 3 (50이라는 정수값을 왼쪽으로 3bit 이동 시키시오)
: 00000000 00000000 00000001 10010000 - 400(10)
50 >> 3 : 00000000 00000000 00000000 00000110 - 6(10)
-50(10) - 4Byte : 11111111 11111111 11111111 11001110
-50 >> 3 : 11111111 11111111 11111111 11111001
-50 >>> 3 : 00011111 11111111 11111111 11111001
비교(관계) 연산자 : 값을 비교하여 false 또는 true 중 하나의 결과를 제공하는 연산자
: > , < , >=, <=, ==, != , instanceof : 객체 비교 연산자
System.out.println("20 > 10 = " + (20 > 10)); //true
System.out.println("20 < 10 = " + (20 < 10)); //false
System.out.println("20 == 10 = " + (20 == 10)); //false
System.out.println("20 != 10 = " + (20 != 10)); //true
논리 연산자 : Bit 논리 연산자, 일반 논리 연산자
- Bit 논리 연산자 : 두 피연산자의 정수값을 Bit 단위로 계산하기 위한 연산자
-> &(논리곱), ^(배타적 논리합), |(논리합)
- 일반 논리 연산자 : 두 개의 비교 연산식을 연결하기 위한 연산자
-> &&(And), ||(Or)
int c = -20;
System.out.println("c = " + c);
//첫번째 비교식이 거짓인 경우 두번째 조건식은 미실행
System.out.println("c >= 10 && c <= 30 = " + (c >= 10 && c <= 30)); //false
// || 연산자는 첫번째 비교식이 참인 경우 두번째 조건식 미실행
System.out.println("c < 10 || c > 30 = " + (c < 10 || c > 30)); //true
삼항 연산자 : 피연산자의 갯수가 3개인 연산자
형식) 조건식 ? 참값 : 거짓값
=> 조건식의 결과값이 true인 경우 참값을 제공하고 false인 경우 거짓값을 제공하는 연산자
(조건식 : false 또는 true 중 하나의 결과값을 제공하는 연산식)
int d1 = 20, d2 = 10;
System.out.println("큰 값 = " + (d1 > d2 ? d1 : d2)); //큰 값 = 20
응용) 홀수 짝수
int d3 = 11;
System.out.println(d3 + " = " + (d3 % 2 == 0 ? "짝수" : "홀수")); //홀수
대입 연산자 : 왼쪽 피연산자(변수)에 값을 저장하기 위한 연산자
- 무조건 마지막에 실행되는 연산자
- 순수 대입 연산자 : 변수에 값을 저장 ( = )
- 계산 대입 연산자 : 변수에 저장된 값을 계산한 후에 변수에 다시 저장 ( *=, /= , %= , += , -=, <<= , >>=, >>>-, &=, ^=, |= )
int e = 10;
System.out.println("e = " + e); //10
e += 20; // e = e + 20
System.out.println("e = " + e); //30
※ 일반적으로 연산식은 왼쪽에서 오른쪽 방향으로 처리되지만
단항 연산자와 대입 연산자를 사용한 연산식은 오른쪽에서 왼쪽 방향으로 처리된다
ex) A + B + C A = B = C
-----------> <-----------
'학원 > 복기' 카테고리의 다른 글
0404 - 난수 출력, 가위바위보 게임, Java 자료형, Java 메모리 영역, 배열, 향상된 for문, 로또 프로그램, 2차원 배열 (0) | 2023.04.04 |
---|---|
0403 - For문 추가, 이중for문, While문, do while문, break, continue, Scanner Class (0) | 2023.04.03 |
0331 - 제어문(IF문, Switch문, For문), 전역변수, Debug Perspctive (0) | 2023.04.01 |
0329 - JDK, 깃허브, 자료형, 변수 (0) | 2023.03.29 |
0328 - JDK 설치, 소스파일 (클래스,메소드), 터미널 명령어, 이클립스 설치 및 설정, 주석문 (0) | 2023.03.28 |