//데이터의 종류가 여러개일 경우
System.out.printf("%s는 %d점입니다.%n", "점수", 98);
//점수 -> %S(문자열), 98 -> %d(정수)
System.out.printf("중간고사 성적은 총점 %d, 평균 %d입니다.%n", 284, 95);
//포맷문자는 어차피 문자열로 나오기 때문에 굳이 %s를 쓰지 않아도 괜찮다.
//%d가 여러개 쓰일때는 순서에 맞춰서 쓰면 된다.
//줄 바꿈을 하려면 포맷 문자의 맨 마지막에 %n을 넣어주면 된다.

public class PrintMain06 {
public static void main(String[] args) {
//1번 방법
System.out.printf("%s : %d점%n", "국어", 98);
System.out.printf("%s : %d점%n", "영어", 97);
System.out.printf("%s : %d점%n", "총점", 195);
System.out.printf("%s : %.1f점%n", "평균", 97.5);
//실수이기 때문에 %d가 아닌 %f를 써야한다.
//그리고 소수점 첫째자리까지 나타내면 되기 때문에 %.1f가 된다.
System.out.println("----------------------");
//2번 방법
System.out.printf("국어 : %d점%n", 98);
System.out.printf("영어 : %d점%n", 97);
System.out.printf("총점 : %d점%n", 195);
System.out.printf("평균 : %.1f점%n", 97.5);
System.out.println("----------------------");
//3번 방법
System.out.printf("국어 : %d점%n영어 : %d점%n총점 : %d점%n평균 : %.1f점%n",
98,97,195,97.5);
}
}

예금자, 송금되기전 잔금, 송금된 금액, 송금이후 잔금, 내일 입금될 이자를 출력하시오.
public class PrintMain07 {
public static void main(String[] args) {
//1번 방법
System.out.printf("예금자는 %s이다.%n송금되기전 잔금은 %,d원이다.
%n송금된 금액은 %d원이다.%n"
+ "송금이후 잔금은 %,d원이다.%n내일 입금될 이자는 %.1f원이다.%n",
"유재석", 1000, 325, 1325, 397.5);
System.out.println("-------------------------");
//2번 방법
System.out.printf("예금자는 %s이다.%n", "유재석");
System.out.printf("송금되기 전 잔금은 %,d원이다.%n",1000);
System.out.printf("송금된 금액은 %d원이다.%n", 325);
System.out.printf("송금 이후 잔금은 %,d원이다.%n", 1325);
System.out.printf("내일 입금될 이자는 %.1f원이다.%n", 397.5);
}
}

식별자란?
식별자 명명규칙
1) 영문자와 숫자와 '-' , '$' 의 조합
2) 첫 글자는 반드시 영문자나 '_' 로 시작한다. 숫자 시작 불가능
3) 식별자는 대소문자를 철저히 구분한다.
4) 자바에서 사용되는 예약어는 식별자로 사용이 불가능하다
5) 상수 값을 표현하는 단어 true, false, null은 식별자로 사용이 불가능하다.
세부 식별자 정의 규칙
| 구분 | 정의 규칙 | 사용 예시 |
|---|---|---|
| 클래스 | - 첫 문자는 항상 대문자로 표현 - 하나 이상의 단어가 합쳐질 때는 각 단어의 첫 문자들만 대문자로 표현 | class JavaTest{…;} |
| 변수와 메서드 | - 첫 문자는 항상 소문자로 표현 - 하나 이상의 단어가 합쳐질 때는 두 번째부터 오는 단어의 첫 문자들만 대문자로 표현 | String itLand; public void getTest(){…;} |
| 상수 | - 모든 문자를 대문자로 표현 - 하나 이상의 단어가 합쳐질 때는 공백 필요시 under score(_)를 사용하여 연결한다. | final int JAVATEST = 10; final int JAVA_TEST = 20; |
- 값을 담아두는 기억 공간 [메모리 공간]
- 데이터를 저장할 수 있는 그릇과 같음
- 하나의 데이터 값을 저장할 수 있음
- 정해진 값은 고정되어 있지 않고 계속 변할 수 있음
- 저장되는 데이터에 따라 변수의 자료형(Data Type)이 결정됨
public class VariableMain01 {
public static void main(String[] args) {
//변수(Variable)는 값을 저장할 수 있는 메모리의 공간
//변수 선언
//int -> 데이터의 종류 : 정수 num -> 변수명
int num;
//변수의 초기화
//num이 가리키는 메모리 공간에 8을 저장한다.
num = 17;
//변수의 값 출력하기
System.out.println(num);
System.out.println("---------------");
//변수 선언, 초기화
int number = 20;
System.out.println(number);
//데이터 변경
number = 40;
//출력
System.out.println(number);
//주의사항
//동일한 변수명으로 변수를 선언하면 오류 발생 - 동일한 변수명으로 변수 선언 불가!
//int number = 30;
System.out.println("---------------");
//동일한 자료형을 사용하기 때문에 두번째 변수명 앞의 자료형은 생략 가능함
//int a = 10;
//int b = 20;
int a = 10, b = 20;
int result = a + b; //여기의 +는 연산
//=> result = 10 + 20 = 30
System.out.println("result = " + result); // 여기의 +는 연결
//숫자 + 숫자 => 연산
//문자열 + 숫자 => 연결
//숫자 + 문자열 => 연결
//문자열 + 문자열 => 연결
System.out.printf("result = %d%n", result);
//주의사항
System.out.println("결과 : " + a + b); // 연결
System.out.println("결과 : " + (a + b)); //연산
//변수 선언
int no;
//변수 선언 후 출력 또는 연산하기 전에 반드시 초기화를 해야 함
//System.out.println(no);
}
}

public class VariableMain02 {
public static void main(String[] args) {
int a = 10, b = 20, c = 30 ;
int result = a + b;
//1번 방법
System.out.println("결과 = " + result);
System.out.println("------------------------" );
//2번 방법
System.out.println("결과 = " + ( a + b));
System.out.println("------------------------" );
//3번 방법
System.out.printf("결과 = %d%n", a + b);
System.out.println("------------------------" );
c = 80;
//1번 방법
System.out.println("c = " + c);
//2번 방법
System.out.printf("c = %d%n", c);
}
}

기본 자료형 (Primitive data type)


참조 자료형 (Reference data type)
//논리형 (true , false)
System.out.println("------논리형------");
boolean b = true;
System.out.println("b = " + b );
//문자형, 크기 : 2 byte (16bit)
//다국어 처리를 위한 유니코드(unicode) 방식을 사용함
//문자코드 => 유니코드는 16진수를 사용하여 나타낸다.
//유니코드 안에 아스키코드가 포함되어 있다.
//한글은 유니코드로만 명시 가능함
//아스키코드는 10진수를 사용한다.
System.out.println("------문자형------");
char c1 = 'A';
System.out.println("c1 = " + c1);
char c2 = 65;
System.out.println("c2 = " + c2);
char c3 = '\u0041';
System.out.println("c3 = " + c3);
char c4 = '자';
System.out.println("c4 = " + c4);
char c5 = '\uc790';
System.out.println("c5 = " + c5);
System.out.println();
System.out.println("------정수형------");
//byte , 크기 : 1 byte
byte b1 = 127;
System.out.println("b1 = " + b1);
//short , 크기 : 2 byte
short s1 = 32678;
System.out.println("s1 = " + s1);
//int, 크기 : 4 byte
int i1 = 1234;
System.out.println("i1 = " + i1);
//long , 크기 : 8 byte
long lg = 1234L;
System.out.println("lg = " + lg);
System.out.println("------실수형------");
//float , 크기 : 4 byte
float f1 = 9.1f;
System.out.println("f1 = " + f1);
//double , 크기 : 8 byte
double du = 9.8;
System.out.println("du = " + du);
System.out.println("------문자열 표시------");
//문자열 표시 (기본자료형이 아님, 참조자료형)
String str = "Hello World!!";
System.out.println("str = " + str);

| 종류 | 의미 |
|---|---|
| \a | 경고음이 난다 |
| \n | 엔터 키의 기능을 한다. 줄 바꿈 |
| \t | 수평 탭으로 일정한 간격을 띄운다. |
| \b | 백스페이스로 뒤로 한 칸 후진한다. |
| \r | 동일한 줄의 맨 앞 칸으로 커서만 옮긴다. |
| \f | 출력 용지를 한 페이지 넘긴다. |
| \\ | \문자를 의미한다 |
| \' | ' 문자를 의미한다 (single quote) |
| \" | " 문자를 의미한다 (double quote) |
| \0 | 널문자를 의미한다 (null) |
| \u16진수 | 16진수에 해당하는 유니코드 |
public class VariableTypeMain02 {
public static void main(String[] args) {
//확장 특수 출력 문자 ( Escape Sequence )
// \을 붙여 표현하면 일반 문자로 변환된다.
char single = '\'';
System.out.println(single);
// \을 붙여 표현하면 일반 문자로 변환된다.
String str1 = "오늘은 \"월요일\"입니다.";
System.out.println(str1);
//문자열 '를 표시하면 자동으로 일반 문자로 변환됨
String str2 = "오늘은'서울'에 비가 와요!";
System.out.println(str2);
// 경로 나타낼 때 역슬래쉬를 한 번 더 써줘야 나타난다.
String str3 ="C:\\javaWork\\workspace";
System.out.println(str3);
// \n : 엔터 키의 기능을 갖는다. 줄을 바꾼다.
String str4 = "오늘은 월요일 \n내일은 화요일";
System.out.println(str4);
// \t : 수평 탭으로 일정한 간격을 띄운다.
String str5 = "이름\t나이\t취미";
System.out.println(str5);
}
}

1) 묵시적 형변환 (자동 형변환)
- 프로그램 실행 도중 자동으로 일어나는 형변환
- 작은 타입을 큰 타입으로 변수에 할당하면 자동으로 변환
- 자동 형변환이 발생하면 변환 이전의 값과 변환 이후 값이 동일
2) 명시적 형변환 (강제 형변환)
- [데이터 타입][데이터 또는 변수]
- 넓은 범위를 표현 가능한 큰 타입의 데이터를 좁은 범위를 표현 가능한 작은 타입으로 형변환 할 때에는 명시적으로 형변환을 해야 함

System.out.println("====묵시적 형변환 (자동 형변환)====");
// 더 큰 자료형으로 승격이 일어나는 형태
// 정보의 손실이 전혀 없으면 자동적으로 발생
byte b1 = 127;
byte b2 = 127;
//32bit미만 byte형 데이터를 연산하면 자동으로 32bit로 변환
int result1 = b1 + b2;
System.out.println("result1 = " + result1);
short s1 = 32767;
short s2 = 32767;
//32bit미만 short형 데이터를 연산하면 자동으로 32bit로 변환
int result2 = s1 + s2;
System.out.println("result2 = " + result2);
int in1 = 1234;
long lg1 = 5678L;
long result3 = in1 + lg1;
// in1: int-> long 자동적으로 형변환
System.out.println("result3 = " + result3);
int in2 = 245;
double du1 = 98.2;
double result4 = in2 + du1;
// in2: int -> double 자동적으로 형변환
System.out.println("result4 = " + result4);

System.out.println("====명시적 형변환 (강제 형변환)====");
//더 작은 자료형으로 강등이 일어나는 형태, 정보의 손실이 발생할 수 있음.
byte b1 = 127;
byte b2 = 127;
// 자동적으로 int형으로 형변환된 것을 다시 byte로 강제 형변환
// 강제 result1 = -2
byte result1 = (byte) (b1 + b2);
System.out.println( "result1 = "+ result1);
short s1 = 32767;
short s2 = 32767;
short result2 = (short)(s1 + s2);
System.out.println("result2 = " + result2);
float f1 = 3.14f;
int in1 = 15;
//f1 : float -> int 강제 형변환
int result3 = (int)f1 + in1;
System.out.println("result3 = " + result3);
long lg1 = 1234L;
int in2 = 59;
//lg1 : long -> int 강제 형변환
int result4 = (int)lg1 + in2;
System.out.println("result5 = " + result4
| 종류 | 연산자 | 우선 순위 |
|---|---|---|
| 증감 연산자 | ++, -- | 1순위 |
| 산술 연산자 | +, -, *, /, % | 2순위 |
| 시프트 연산자 | >>, >>>, << | 3순위 |
| 비교 연산자 | <, >, >=, <=, ==, != | 4순위 |
| 비트 연산자 | &, | , ^ , ~ | ~만 1순위, 나머지는 5순위 |
| 논리 연산자 | &&, || , ! | !만 1순위, 나머지는 6순위 |
| 조건(삼항) 연산자 | ?, : | 7순위 |
| 대입 연산자 | =, +=, -=, *=, /=, %= | 8순위 |
증감 연산자
산술 연산자
public static void main(String[] args) {
System.out.println("===증감연산자===");
System.out.println("--------------------");
//증가연산자
int i = 5; //변수 선언 후 초기화 상태
//증가연산자를 변수 앞에 명시하면 변수의 값을 1 증가시킨 후에 증가된 값을 읽어온다.
System.out.println(++i); //6
System.out.println("--------------------");
//증가연산자를 변수명 뒤에 명시하면 변수 값을 우선 읽어온 후에 값을 1 증가시킨다.
System.out.println(i++); //6
//i값을 먼저 불러와서 6이라고 출력
// 그러나 메모리 공간에 1이 증가된 값으로 들어가서 i를 한 번 더 출력.
System.out.println(i); // 7이 출력된다.
System.out.println("--------------------");
//감소연산자
int j = 10;
//감소연산자를 변수명 앞에 명시하면 변수값을 1 감소시킨 후 감소된 값을 읽어옴
System.out.println(--j); //9
System.out.println("--------------------");
//감소연산자를 변수명 뒤에 명시하면 변수 값을 우선 읽어온 후에 값을 1 감소시킨다.
System.out.println(j--); //9
System.out.println(j); //8
}

성적표
국어 : 90점
영어 : 95점
수학 : 88점
총점 : ? 점
평균 : ? 점
public class OperatorMain03 {
public static void main(String[] args) {
int kor = 90, eng = 95 , math = 88;
int sum = kor + eng + math;
int avg = sum / 3;
System.out.println("국어 : " + kor + "점");
System.out.println("영어 : " + eng + "점");
System.out.println("수학 : " + math + "점");
System.out.println("총점 : " + sum + "점");
System.out.println("평균 : " + avg + "점");
}
}

public class OperatorMain04 {
public static void main(String[] args) {
int pen = 534;
int student = 30;
int one = pen / student;
int leftover = pen % student;
System.out.println("학생 한 명이 가지는 연필 수 : " + one);
System.out.println("남은 연필 수 : " + leftover);
}
}
