JAVA/자바[3일차]
⚠️⚠️
글을 읽으시기전 필자는 아직 코딩을 공부하고 있는 학생입니다.
여러 책과 블로그 글, 수업을 바탕으로 정리한 내용이니 부족한 부분있다면 댓글로 남겨주시기 바랍니다.
오늘은 수업 3일 차를 들었다.
오늘 배운 내용은
1. 관계 연산
2. 논리 연산
3.if문
4.switch문
5. 문자형(char)에 대해 배웠습니다.
바로 정리 들어가죠~
관계 연산
관계 연산자는 비교 연산자라고 합니다.
저희가 수학 시간에 배웠던 부등호를 생각하면 됩니다.
관계 연산 자의 결과는 true/false와 같은 boolean형입니다.
관계 연산자의 종류
종류 연산자 | 연산자 | 사용방법 | 설명 |
같다 | == | a==b | a와b가 같으면 참 |
작다 | < | a<b | a가 b보다 작으면 참 |
크다 | > | a>b | a가 b보다 크면 참 |
작거나 같다 | < = | a≤b | a가 b보다 작거나 같으면 참 |
크거나 같다 | > = | a≥b | a가 b보다 크거나 같으면 참 |
같지 않다 | ! = | a≠b | a와 b가 같지 않으면 참 |
관계 연산자 예시
public static void main(String[] args) {
//관계연산자 사용해보기
int a=5;
int b=10;
int c=5;
System.out.println(a>b); //true
System.out.println(a<b); //false
System.out.println(a>=b);//false
System.out.println(a<=b); //true
System.out.println(a!=b); //두 값이 같지 않냐 물어보기때문에 true
System.out.println(a==b);//두 값이같냐 물어보기 때문에 flase
System.out.println(a==c);//두 값이 같기때문에 true
}
논리 연산자
논리 연산자에는 AND(&&) , OR( || ), NOT(!) 연산자가 있습니다.
논리 연산자는 관계 연산자와 마찬가지로 결과가 true/false boolean값을 갖습니다.
종류 | 연산자 | 사용예 | 설명 |
AND | && | a&&b | a와 b 둘다 참이면 결과가 참 |
OR | || | a||b | a와 b둘중 하나가 참이면 결과가 참 |
NOT | ! | !a | a가 참이면 거짓, 거짓이면 참, 반대로 |
논리 연산자 예시
//논리 연산: and (&&) , or( || ), not(!)
public static void main(String[] args) {
//and(&&)연산자
System.out.println("논리연산 and(&&)테스트");
System.out.println("and 그리고 연산은 값 \"2개가 모두 참일 때\" 결과값이 '참'이 됩니다.");
System.out.println("true and true =>"+ (true&&true));
System.out.println("true and flase =>"+ (true&&false));
System.out.println("flase and true =>"+ (false&&true));
System.out.println("flase and false =>"+ (false&&false));
//OR (||) 연산자
System.out.println("논리연산 or(||)테스트");
System.out.println("|| or(또는) 연산은 값 \"2개중 최소 하나가 참일 때\" 결과값이 '참'이 됩니다.");
System.out.println("true and true =>"+ (true||true));
System.out.println("true and flase =>"+ (true||false));
System.out.println("flase and true =>"+ (false||true));
System.out.println("flase and false =>"+ (false||false));
//not(!) 연산
System.out.println("논리연산 not(!)테스트");
System.out.println("not 연산은 true는 false, flase는 true로 변환합니다.");
System.out.println("not true =>"+!true);
System.out.println("not false=>"+false);
if문
if문은 제어문의 한 종류입니다.
제어문은 프로그램의 흐름을 제어하는 문법을 뜻합니다.
따라서 if문을 정의하자면 조건문을 정하고 조건문이 참일 경우 실행문을 작성하여 실행할 수 있습니다.
if문 형태
if(조건식)
{ 조건식이 참일경우 실행할 실행문};
if문 예시
public static void main(String[] args) {
int score1=100;
int score2=80;
if(score1>90) {
System.out.println("점수가 90점 보다 큽니다.");
}
if(score2>90) {
System.out.println("점수가 90점 보다 큽니다.");
}
}
두 번째 if문은 거짓이기 때문에 실행문이 출력이 안된 것을 볼 수 있네요!!
if-else문
if-else문은 if문의 조건식이 거짓이라면 실행할 명령어를 실행할 수 있습니다.
if-else문 구조
if(조건식){
조건식이 참 일때 실행할 명령;
}
else{ 조건식이 거짓일 때 실행할 명령어
}
if-else문 예시
public static void main(String[] args) {
int score1=100;
int score2=80;
if(score1>90) {
System.out.println("점수가 90점 보다 큽니다.");
}
if(score2>90) {
System.out.println("점수가 90점 보다 큽니다.");
}
else {
System.out.println("점수가 90점보다 낮습니다.");
}
}
출력 결과
if-else if문
if-else if문은 if문의 조건식이 참이 아닌 거짓일 때 또 다른 조건식을 비교하여 실행문을 실행할 수 있습니다.
else문과는 다르게 조건식을 넣을 수 있다는 게 다른 점 이겠네요.
if-else if문 구조
if(조건1){
조건1이 참일 때 실행할 명령;
}
else if(조건2){
조건1이 거짓이고 조건2가 참일 때 실행할 명령;
}
if-else if문 예시
public static void main(String[] args) {
int score2=80;
if(score2>90) {
System.out.println("점수가 90점 보다 큽니다.");
}
else if(score2>70) {
System.out.println("70점보다 높습니다.");
}
else {
System.out.println("70점보다 낮습니다.");
}
}
if문의 조건이 거짓이기 때문에 else if문의 조건식을 비교합니다.
else if문의 조건식이 참이라면 "70점보다 높습니다" 아니라면
else의 명령을 실행할 것입니다.
출력
if문 응용
이번에는 if문을 사용하여 3 정수의 최대 값과 최소 값을 구하는 코드를 짜 보겠습니다.
public static void main(String[] args) {
int n1,n2,n3;
int max,min;
n1=10; n2=7; n3=2;
if(n1>n2) { //n1,n2 중 큰값을 max 에 저장
max=n1; //max에는 2개 중 큰값
min=n2; //min에는 2개 중 작은값
}else {
max=n2;
min=n1;
}
if(max <n3) //남은 n3 값이 max 보다 더 크다면
max=n3;
//max < n3 이 거짓일 때는 현재 max값이 가장 큰값
if(min >n3)
min=n3;
System.out.println("n1="+n1+",n2="+n2+",n3="+n3);
System.out.println("max = " + max);
System.out.println("min = " + min);
}
출력
switch문
switch문은 if문과 같이 제어문에 속합니다.
하지만 switch문은 if문과는 다르게 조건식에 비교식을 사용할 수 없습니다.
switch문은 비교할 변수를 설정한 뒤 어떤 값을 가지느냐에 따라 실행할 명령을 작성합니다.
switch문 구조
switch(변수) //식이 올 수 있으나, 대체로 변수를 사용{
case 값1:
변수 == 값1 일때 실행할 명령;
break;
case 값2:
변수 == 값2 일때 실행할 명령;
break;
...
default:
모든 case에 해당하지 않을 때 실행할 명령
}
```
switch문 예시
public static void main(String[] args) {
int num=3;
switch(num) {
case 1:
System.out.println("num은 1입니다.");
break;
case 2:
System.out.println("num은 2입니다.");
break;
case 3:
System.out.println("num은 3입니다.");
break;
default :
System.out.println("해당하는 값이 없습니다.");
}
}
switch문은 ( ) 괄호 안에 있는 변수 즉, num과 같은 case를 찾습니다.
다라서 num은 3이기 때문에 case 3:의 명령을 실행하겠네요.
continue문은 case에 해당하는 값이 없을 경우 명령을 실행합니다.
if문의 else 같은 느낌이네요.
출력
break;
switch문에서 break;가 계속 보이는데 이건 어떠한 역할을 할까요?
break는 case에 맞는 수를 찾았으면 switch문을 종료하는 역할을 합니다.
num 변수를 1로 바꾸고 break를 지운 뒤 실행해보겠습니다.
public static void main(String[] args) {
int num=1;
switch(num) {
case 1:
System.out.println("num은 1입니다.");
case 2:
System.out.println("num은 2입니다.");
case 3:
System.out.println("num은 3입니다.");
default :
System.out.println("해당하는 값이 없습니다.");
}
}
출력 결과
위의 결과처럼 break를 빼니 case1에서 멈춰야 할 코드가 switch문을 끝까지 돌고 끝나는 것을 알 수 있습니다.
switch문과 if문 응용
쇼핑몰에서 물건을 사면 적립한 금액에 맞춰 포인트를 적립합니다.
구매한 금액이 100000만 원 이상이면 10% 포인트 정립
7만 원~10만 원 미만이면 7%
5만 원~8만 원 미만이면 5%
5만 원 미만은 3% 적립금은
❗원 단위로 출력하기❗
추가적으로 상품을 출력하여 가격과 상품 이름을 출력하고
switch문으로 상품을 선택하면 구매한 금액에 맞추어 적립금 출력해서 보여주기
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int point; //적립금 : (요구사항)적립금 원 단위(절사/내림)로 출력하기
int pay; //오늘 구매금액
double rate; //적립율 : 0.1 , 0.07 , 0.05, 0.03
int item_no;
System.out.println("00컬리 상품보기");
System.out.println("1.🍕🍕🍕🍕 2200원 2. 🌼🌼🌼🌼🌼 112000원 "
+ "3.🎂🎂🎂 55000원 4.🍖🍖🍖🍖 78300원");
System.out.print("상품을 선택하세요. >>> ");
item_no = sc.nextInt();
switch (item_no) { //item_no값 과 case비교
case 1:
pay=2200;
break;
case 2:
pay=112000;
break;
case 3:
pay=5500;
break;
case 4:
pay=78300;
break;
default:
System.out.println("잘못된 선택입니다.");
pay=0;
break;
}
//if~ else if 연습
if(pay>=100000) rate=0.1;
else if(pay>=70000) rate=0.07;
else if(pay>=50000) rate=0.05;
else rate=0.03;
// 적립금 = 구매금액*적립율
point = (int)(pay*rate); //형변환(casting)
System.out.println("고객님! 오늘 구매한신 금액의 적립율은 " + (int)(rate*100) + "% 입니다.");
System.out.println("적립 포인트는 " + point + " 원 입니다.");
우선 출력문을 작성해 줍니다. 이모티콘은 Window+. 키를 누르면 나옵니다.
Scanner를 사용하여 item_no에 주문 상품의 번호를 저장해 줍니다.
저장을 하였으면 switch문을 사용하여 item_no에 맞는 명령을 실행합니다.
이제 주문금액을 if문을 통해 조건식에 넣어 비교하여 맞는 적립률에 비교하여 출력해 줍니다.
point =(int)(pay*rate)로 형 변환을 해주는 이유는 원단위로 출력해주어야 하기 때문에 pay*rate는 실수에 해당하여 정수 값으로 형 변환하여 출력해 주어야 합니다.
출력 결과
char(문자형)
char형은 자바의 int, short, double과 같은 원시 데이터 타입의 한 종류이다.
char형은 문자형인데 문자를 하나 담을 때 사용한다.
char 선언
char c='a'
char형은 문자를 홀 따옴표 ' '로 감싸주어야 한다.
컴퓨터에서의 문자 표현
컴퓨터는 0과 1로만 표현을 할 수 있습니다.
즉, 저희가 일상생활에서 사용하는 A , B, C와 같은 문자는 컴퓨터 내부적으로 표현하기 위해서는 0과 1의 조합으로 나타내야 하는 것이지요.
따라서 문자를 컴퓨터로 표현하기 위해 특정 정수의 값으로 약속했습니다.
대표적인 코드가 아스키코드와 유니코드입니다.
ASCII(아스키) 코드
아스키코드란 영문 알파벳을 사용하는 대표적인 문자 인코딩을 말합니다.
여기서 문자 인코딩이란 사용자가 입력한 문자나 기호를 컴퓨터가 이용할 수 있도록 신호로 만든 것입니다.
아스키코드는 제어 문자 32개, 숫자 10개, 영문 알파벳 대문자 26개, 소문자 26개
숫자 10개, 나머지는 키보드의 특수 기호들로 이루어져 있습니다.
아스키코드의 총 128개로 이루어져 있습니다.
위의 코드표가 아스키코드입니다.
아스키코드는 8비트 중 7개의 비트만 사용합니다.
위의 2진법을 보면 7개이지만 나머지 1비트는 오류 체크를 위한 비트로 사용합니다.
하지만, 아스키코드는 7개의 비트만 사용함으로 2^7승 =128이기 때문에 128개의 부호밖에 나타낼 수 없습니다.
따라서 전 세계의 문자를 표현하기에는 부족하기에 이러한 문제를 해결하기 위해 나온 것이 바로 유니코드입니다.
유니코드
유니코드는 알파벳을 주로 다루는 아스키코드와는 달리
전 세계의 모든 문자를 다루도록 설계된 표준입니다.
유니코드는 아스키코드가 1바이트인 것과는 달리 2바이트입니다.
16비트로 문자를 표현하기 때문에
2^16=64436개의 문자를 표현할 수 있어 더 다양한 다국어 문자를 표현할 수 있게 된 것이지요.
인터넷에 유니코드 한글 표가 있지만 11,172자이기 때문에 따로 첨부하는 건 무리네요ㅜㅜ
아스키코드 사용해보기
public static void main(String[] args) {
char c1='a';
char c2=97;
char c3='5'; //정수가 아닙니다. 문자입니다.
char c4='D';
char c5=' ';
System.out.println("문자형 char은 출력하면 문자가 보입니다.");
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
System.out.println(c4);
System.out.println(c5);
System.out.println("문자형 char을 int로 캐스팅하면 ASCII 아스키 보드 값이 됩니다.");
//문자형을 정수형으로 캐스팅
System.out.println((int)c1);
System.out.println((int)c2);
System.out.println((int)c3);
System.out.println((int)c4);
System.out.println((int)c5);
}
출력 결과
위의 표에서 찾아볼 수 있는데 문자형을 정수형으로 캐스팅하면 아스키코드 표에 있는 십진법으로 표현된 수와 똑같은걸 확인할 수 있습니다.
유니코드 사용해보기
public static void main(String[] args) {
char h1='가';
char h2='\uac00'; // 역슬래시u로 시작하면 u는 유니코드 약자(UTF-8더 유니코드의 종류)
char h3='힣';
char h4='\ud7a3';
System.out.println(h1);
System.out.println(h2);
System.out.println(h3);
System.out.println(h4);
//유니코드 10진수표현과 16진수 표현 비교해보기
System.out.printf("%d - %x\n",(int)h1,(int)h1);
System.out.println((int)h2);
System.out.printf("%d - %x\n",(int)h3,(int)h3);
System.out.println((int)h4);//한글표현 문자 갯수 11172개
}
출력
이상으로 글 마치겠습니다.
글 읽어주셔서 감사합니다 🌍🙌🙌😂