VariableMain01
생성public class VariableMain01 {
public static void main(String[] args) {
// 변수(Variable)는 값을 저장할 수 있는 메모리의 공간
// 변수 선언
int num; // 자료형을 지정해야 함; 정수값만 저장 가능한 변수를 생성(num이라는 메모리 공간 할당)
// 변수의 초기화
num = 17; // 생성된 변수(num이 가리키는 빈 메모리 공간)에 17을 대입(저장)
// 출력
System.out.println(num); // num을 통해 메모리 공간에 접근해 값을 출력
// 변수 선언 및 초기화
int number = 20; // 메모리 공간을 할당하고 20을 대입
// 출력
System.out.println(number);
// 동일한 변수명을 선언시 오류 발생(변수명은 unique해야 함)
// int number = 30;
// 변수에 저장한 데이터 변경
int number2 = 100;
System.out.println(number2);
number2 = 90;
System.out.println(number2);
System.out.println("========");
// 동일한 자료형의 변수 선언시 두 번째 변수명 앞의 자료형은 생략 가능
// int a = 10;
// int b = 20;
int a = 10, b = 20;
int result = a + b;
System.out.printf("result = %d\n", result);
// 합 연산자는 문자열이 섞여 있는 경우 덧셈이 아니라 연결을 수행함(문자의 경우 덧셈 수행)
System.out.println("결과 = " + a + b); // 1020 출력; 문자열 다음에 숫자가 오는 경우 연결해서 새 문자열 생성
System.out.println("결과 = " + (a + b)); // 30 출력; 숫자끼리의 덧셈 먼저 수행 후 문자열 연결
System.out.println(a + b + " = 결과"); // 30 출력; 숫자들이 문자열 앞에 오기 때문에 덧셈 먼저 수행 후 문자열 연결
System.out.println(a + b); // 30 출력
// 변수 선언 후 초기화하지 않으면 연산이나 출력 불가(오류 발생)
int no;
// System.out.println(no);
}
}
VariableTypeMain01
생성public class VariableTypeMain01 {
public static void main(String[] args) {
System.out.println("====논리형====");
// 논리형: 크기 1byte, 표현 범위 true, false
boolean b = true; // 변수에는 자료형 맞는 데이터만 넣을 수 있음(문자열은 논리형에 저장 불가)
System.out.println("b = " + b);
System.out.println("====문자형====");
// 문자형: 크기 2byte, 표현 범위 0 ~ 65,535(문자를 숫자로 변환해 저장)
// 문자형의 크기가 1byte인 경우 영문, 숫자와 일부 특수문자만 처리 가능(ASCII)하지만 2byte인 경우 한글, 한자 등도 처리 가능(Unicode)
char c1 = 'A';
System.out.println("c1 : " + c1);
char c2 = 65; // A의 아스키 코드 값을 대입; 영문의 경우 유니코드 안에 아스키 코드가 포함되어 있어 둘 다 사용 가능
System.out.println("c2 : " + c2); // A가 출력됨
char c3 = '\u0041'; // A의 유니코드 값(16진수, 역슬래시u로 유니코드임을 표시) 대입
System.out.println("c3 : " + c3);
char c4 = '자';
System.out.println("c4 : " + c4);
char c5 = '\uc790'; // 자의 유니코드 값 대입
System.out.println("c5 : " + c5); // 자가 출력됨
System.out.println("====정수형====");
// byte: 크기 1byte, 표현 범위 -128 ~ 127
// byte의 경우 표현 범위가 좁아 연산에는 잘 사용하지 않지만 입출력에 사용함
byte b1 = 127; // 128 등 범위 초과한 값은 대입 불가
System.out.println(" b1 : " + b1);
// short: 크기 2byte, 표현 범위 -32,768 ~ 32,767
short s1 = -32768; // 32768 등 범위 초과한 값은 대입 불가
System.out.println(" s1 : " + s1);
// int: 크기 4byte, 표현 범위 -2,147,483,648 ~ 2,147,483,647
// int의 경우 정수의 기본 자료형으로 정수 자료형들 중 가장 많이 사용됨
int n1 = 1000;
System.out.println("n1 : " + n1);
// long: 크기 8byte
// 은행 프로그램 등 큰 단위 다뤄야 할 때 사용함, 유튜브 조회수의 경우 int로 표현하다가 21억 뷰를 초과하는 영상이 나오면서 long으로 바뀜
long lg = 1000L; // long 변수에 1000 대입시 자바는 정수 표현의 기본형인 int로 인식 후 long으로 변환함; 숫자 뒤에 l이나 L을 붙이면 처음부터 long으로 인식함
System.out.println("lg : " + lg);
System.out.println("====실수형====");
// float: 크기 4byte
float f1 = 4.5f; // 소숫점 가진 값의 경우 자바가 실수 표현의 기본형인 double로 인식하여 float 변수에 더 큰 자료형의 값을 대입하지 못하고 오류가 발생함; 숫자 뒤에 f나 F를 붙이면 처음부터 float으로 인식함
System.out.println("f1 : " + f1);
// double: 크기 8byte, 실수의 기본 자료형으로 float보다 더 정밀함
double d1 = 9.8;
System.out.println("d1 = " + d1);
System.out.println("====문자열 표시====");
// 문자열은 기본 자료형이 아니지만 자주 사용하기 때문에 변수 선언하는 법을 미리 언급
String str = "Hello World!"; // 기본 자료형은 소문자로 시작하지만, 참조 자료형은 대문자로 시작함
System.out.println("str : " + str);
}
}
PrintMain07
생성public class PrintMain07 {
public static void main(String[] args) {
/*
* [실습]
* 유재석은 은행계좌를 가지고 있다. 계좌에 1,000원이 예금되어 있는데
* 오늘 325원을 송금받아서 잔고가 1,325원이 되었다.
* 특별이자율은 0.3이 적용되어 내일 이자 397.5원을 받는다.
*
* 예금자, 송금되기 전 잔금, 송금된 금액, 송금 이후 잔금,
* 내일 입금될 이자를 출력하시오.
*/
String who = "유재석";
int before = 1000, trans = 325;
double plus = 397.5;
System.out.printf("예금자 : %s\n송금되기 전 잔금 : %,d원\n송금된 금액 : %,d원\n송금 이후 잔금: %,d원\n내일 입금될 이자 : %,.1f원\n", who, before, trans, before + trans, plus);
}
}
VariableMain02
생성public class VariableMain02 {
public static void main(String[] args) {
/*
* [실습]
* 정수를 담을 수 있는 변수를 3개 지정한다.
* 변수명은 각각 a, b, c라고 지정하고 원하는 정수로 초기화한다.
* a + b 연산 후 출력할 때
* "결과 = 50" 형식으로 출력한다.
* c에 저장된 데이터를 80으로 변경해서
* "c = 80" 형식으로 출력한다.
*/
int a = 607, b = 801, c = 312;
System.out.println("결과 = " + (a + b));
c = 80;
System.out.println("c = " + c);
}
}
VariableTypeMain02
생성public class VariableTypeMain02 {
public static void main(String[] args) {
// '을 일반 문자처럼 출력하기 위해 앞에 \를 붙임
char single = '\'';
System.out.println(single);
// "을 일반 문자처럼 출력하기 위해 앞에 \를 붙임
String str = "오늘은 \"서울\"에 비가 와요";
System.out.println(str);
// 문자열 안의 '는 \를 붙이지 않아도 일반 문자로 변환되어 출력되며, \ 붙여도 동일한 결과
String str2 = "오늘은 '목요일'입니다.";
System.out.println(str2);
// 경로 구분자 \를 일반 문자처럼 출력하기 위해 앞에 \를 붙임
String dir = "C:\\Program Files\\Java";
System.out.println(dir);
String str3 = "내일은 금요일\n모레는 토요일";
System.out.println(str3);
String str4 = "이름\t나이\t취미";
System.out.println(str4);
}
}
CastMain01
생성public class CastMain01 {
public static void main(String[] args) {
System.out.println("====묵시적 형변환(자동 형변환)====");
// 작은 자료형에서 큰 자료형으로 승격이 일어나는 형태
// 정보의 손실이 전혀 없으며 자동적으로 발생
byte b1 = 127; // 8bit
byte b2 = 127;
// 32bit 미만 정수형 데이터를 연산하면 자동으로 32bit으로 승격됨; 결과가 자료형의 표현 범위를 벗어날 가능성이 높기 때문에 데이터를 보호하기 위해 자동 형변환하는 것
int result1 = b1 + b2;
System.out.println("result1 = " + result1);
short s1 = 32767; // 16bit
short s2 = 32767;
// byte나 short끼리의 연산이라도 결과 담는 변수를 byte나 short로 선언할 경우 오히려 오류 발생
int result2 = s1 + s2;
System.out.println("result2 = " + result2);
int in1 = 1000;
long lg1 = 2000L;
long result3 = in1 + lg1; // in1의 자료형이 int에서 long으로 자동 형변환됨
System.out.println("result3 = " + result3);
double du1 = 5.3;
int in2 = 20;
double result4 = du1 + in2; // in2의 자료형이 int에서 double로 자동 형변환됨
System.out.println("result4 = " + result4);
}
}
CastMain02
생성public class CastMain02 {
public static void main(String[] args) {
System.out.println("====명시적 형변환(강제 형변환)====");
// 큰 자료형에서 작은 자료형으로 강등이 일어나는 형태
// 정보의 손실이 발생할 수 있음
byte b1 = 127;
byte b2 = 127;
// 캐스트 연산자를 이용하여 int인 결과 값 b1 + b2를 byte로 강제 형변환함; 결과 값이 byte의 표현 범위를 벗어나기 때문에 정보의 손실이 일어남
byte result1 = (byte)(b1 + b2);
System.out.println("result1 = " + result1);
short s1 = 1000;
short s2 = 2000;
// 캐스트 연산자를 이용하여 int인 결과 값 s1 + s2를 short로 강제 형변환함; 결과 값이 short의 표현 범위 안에 있기 때문에 정보의 손실이 없음
short result2 = (short)(s1 + s2);
System.out.println("result2 = " + result2);
int in1 = 2345;
float f1 = 25.67f;
// 캐스트 연산자를 이용하여 float인 f1을 int로 강제 형변환 후 in1과 연산함; 소숫점 이하 자리에 대한 정보가 손실됨(버림 처리, 반올림하려면 Math.round() 함수 이용)
int result3 = in1 + (int)(f1);
System.out.println("result3 = " + result3);
int in2 = 1234;
long lg1 = 1234L;
// 캐스트 연산자를 이용하여 long인 lg1을 int로 강제 형변환 후 int2와 연산함; 정보의 손실은 발생하지 않음
int result4 = in2 + (int)(lg1);
System.out.println("result4 = " + result4);
}
}
연산자 | 의미 | 순위 |
---|---|---|
++ | 값을 1씩 증가 | 1순위 |
-- | 값을 1씩 감소 |
ch02-operator
생성하고 새 클래스 OperatorMain01
생성public class OperatorMain01 {
public static void main(String[] args) {
System.out.println("====증감 연산자====");
// 증가 연산자
int i = 5;
System.out.println(++i); // i를 1 증가시킨 후 증가된 값 6을 출력
System.out.println(i++); // i의 현재 값 6을 출력한 후 값을 1 증가시켜 7을 메모리에 저장
System.out.println(i); // 7을 출력
// 감소 연산자
int j = 10;
System.out.println(--j); // j를 1 감소시킨 후 감소된 값 9를 출력
System.out.println(j--); // j의 현재 값 9를 출력한 후 값을 1 감소시켜 8을 메모리에 저장
System.out.println(j); // 8을 출력
}
}
연산자 | 의미 | 순위 |
---|---|---|
+ | 덧셈 | 2순위 |
- | 뺄셈 | |
* | 곱셈 | |
/ | 나눗셈 | |
% | 나머지 값 구하기 |
OperatorMain02
생성public class OperatorMain02 {
public static void main(String[] args) {
System.out.println("====산술 연산자====");
System.out.println(1 + 1);
System.out.println(10 - 2);
System.out.println(10 * 3);
// 5와 2는 정수 표현의 기본형인 int로 인식되기 때문에 연산 결과는 정수를 출력함
System.out.println(5 / 2); // 몫을 출력
System.out.println(5 % 2); // 나머지를 출력
// 10f나 10.0 등 실수 자료형임을 명시하면 연산 결과도 실수를 출력함(3은 자동 형변환됨)
System.out.println(10.0 / 3);
}
}