에듀테크 부트캠프

에듀테크 KDT 과정 시작! Java 기초 학습 기록 📖

wy-family 2025. 3. 6. 21:38

이미 학습해서 알고 있는 내용들이 있어서 모든 내용을 기록하지는 않을 것이다.

저작권의 이슈도 있으니 학습한 모든 내용을 기록할 수도 없다.

그러니 가능하면 내가 직접 내 손으로 입력한 것들만을 활용해서 기록으로 남길 것이다.

 

<학습 내용 키워드로 정리>

Java 기초 학습 / Variable 변수 / String 기본 자료형처럼 쓰일 수 있는 참조형 자료형 - 클래스라는 것 / Casting 자료형변환 / print, println, printf / Scanner 의 활용 / 여러 가지 연산자 활용

 

연산자 활용을 하면서 Scanner 활용 등을 했던 학습한 내용들이 종합적으로 녹아들어있는 코드를 공유하겠다.

코드 내에 주석으로 필기를 했으니 필요한 사람들은 공부가 될 수 있겠다.

package com.operator.controller;
import java.util.Scanner;
public class OperatorController {
	
	public void checkLogic() {
		String city = "서울";
		int age = 30;
		System.out.println((city.equals("서울")||city.equals("인천")) && age==30);
	}
	
	
	public void calcPoint() {
		double scores = 0;
		Scanner sc = new Scanner(System.in);
		System.out.print("수학 점수 입력하세요 : ");
		scores += sc.nextDouble();
		System.out.print("영어 점수 입력하세요 : ");
		scores += sc.nextDouble();
		System.out.print("국어 점수 입력하세요 : ");
		scores += sc.nextDouble();
		System.out.print("코딩 점수 입력하세요 : ");
		scores += sc.nextDouble();
		System.out.println("합계 : " + scores + "\n평균 : " + scores/4);
	}
	
	
	public void inputMsg() {
		String msg = "";
		Scanner sc = new Scanner(System.in);
		System.out.print("1번째 메세지를 입력하세요 : ");
		msg += sc.nextLine();
		msg += "\n";
		System.out.print("2번째 메세지를 입력하세요 : ");
		msg += sc.nextLine();
		msg += "\n";
		System.out.print("3번째 메세지를 입력하세요 : ");
		msg += sc.nextLine();
		msg += "\n";
		System.out.print("4번째 메세지를 입력하세요 : ");
		msg += sc.nextLine();
		System.out.println(msg);
	}
	
	
	
	public void loginCheck() {
		String id, password;
		Scanner sc = new Scanner(System.in);
		System.out.print("아이디를 입력하세요 : ");
		id = sc.next();
		System.out.print("비밀번호를 입력하세요 : ");
		password = sc.next();
		System.out.println(id.equals("user01")&&password.equals("1234")?"로그인 성공":"로그인 실패");
	}
	
	
	
	// 기능 제공용 클래스 --> 메소드 선언
	public void singleOp() {
		
		// 단항 연산자 활용하기
		// 1. 부정연산 --> boolean 값을 반전시키는 연산자
		// !변수명(boolean), 또는 !메소드호출(이것도 결과값은 boolean), 또는 !비교연산자(왜냐면 비교 연산자의 결과값은 boolean)
		
		// syso 치고나서 ctrl + space + enter 하면 자동완성
		System.out.println("=== 부정연산자 ===");
		boolean flag = true;
		System.out.println("flag : " + flag);
		System.out.println("!flag : " + !flag);
		
		String name = "차은우";
		System.out.println(!name.contains("은"));
		
		
		System.out.println(!(10>0));
		
		// 2. 증가, 감소 연산자
		// 변수에 저장된 값을 1 증가시키고 다시 변수에 저장하는 연산자
		// ++변수, --변수  --> 전위연산 :
		// 변수++, 변수--  --> 후위연산 :
		int number = 10;
		number++; // number = number + 1;
		number++;
		System.out.println(number);
		
		number--;
		System.out.println(number);
		
		// 숫자셀 때 --> 특정 기능이 수행되는 횟수를 기록
		// 반복문을 실행할 때 사용
		
		// 전위연산 vs. 후위연산
		// 단독으로 사용했을때는 차이가 없음
		// 다른 연산자와 같이 사용했을때 전위연산과 후위연산의 차이가 발생
		number = 0;
		++number;
		++number;
		System.out.println(number);
		
		int result = number++; // 여기에는 = 연산자랑 후위 ++ 연산자가 쓰였다. 순서가, = 가 우선이다.
		// 후위 연산의 경우에는 다른 모든 연산을 다 처리하고 나서 실행되는 것이다.
		// 그래서 후위.
		System.out.println(result);
		
		result = ++number; // 전위 ++ 연산자는 = 대입 연산을 하기 전에 증가부터 시켜버린다. 그리고 나서 대입을 한다.
		System.out.println(result);
		
		result = number++ + 20;
		// ++ 가 지금 후위 연산이라서, 20을 더해주고 그 다음에 대입을 하고 난뒤에 증가 연산이 실행된다.
		
		result = ++number + 20;
		// 지금은 전위라서, 먼저 증가 시켜주고 난 뒤에 다른 연산들을 해준다.
		
		
	}
	
	public void calcOp() {
		// 산술연산자
		// +, -, *, /, %(나머지)
		int su1 = 2;
		int su2 = 10;
		int result = su1 + su2;
		System.out.println("su1 + su2 : "+result);
		
		result = su1 - su2;
		System.out.println("su1 - su2 : "+result);
		
		result = su1 * su2;
		System.out.println("su1 * su2 : "+result);
		
		result = su1 / su2;  // 둘다 int 라서, int 형으로 결과가 나온다. 그래서 double 로 바꿔줄 필요가 있다.
		double result1 = (double) su1/su2;
		System.out.println("su1 / su2 : "+result);
		System.out.println("su1 / su2 : "+result1);
		
		// 배수, 약수 -> 나머지 이용
		// 어떤 수 x 를 4로 나누면 --> 나머지는 0, 1, 2, 3 만 나올 수 있다.
		System.out.println(su1%4);
		System.out.println(su2%5);
	
	}
	
	public void calculator() {
		Scanner sc = new Scanner(System.in);
		System.out.print("첫번째 숫자를 입력하세요 : ");
		int su1 = sc.nextInt();
		System.out.print("두번째 숫자를 입력하세요 : ");
		int su2 = sc.nextInt();
		System.out.println("더하기 : " + (su1+su2)); // 괄호를 해주지 않으면 연산의 순서가 달라짐.
		System.out.println("빼기기 : " + (su1-su2)); // 마찬가지로 괄호를 해주지 않으면 연산의 순서가 달라짐.
		System.out.println("곱하기 : " + (su1*su2)); // 여기서는 괄호를 해주지 않았어도, * 가 + 보다 먼저라서 괜찮음.
		System.out.printf("나누기 : %.2f", (double)su1/su2);
	}
	
	public void compareOp() {
		
		// 비교연산자
		// 동등비교 : == (일치), != (불일치)
		// 대소비교(숫자) : <, >, <= , >=
		
		// 비교연산의 결과는 boolean 형으로 반환 --> true, false
		// 조건문을 만들때 사용!
		
		// 1. 동등비교 : 숫자, 문자(char)
		int num = 13;
		int num1 = 19;
		int num2 = 13;
		System.out.println(num==num1);
		System.out.println(num==num2);
		
		double height = 180.5;
		double height1 = 181.5;
		double height2 = 180.5;
		System.out.println(height==height1);
		System.out.println(height==height2);
		
		char ch='A';
		char ch1='a';
		char ch2='A';
		System.out.println(ch==ch1);
		System.out.println(ch==ch2);
		System.out.println(ch=='a');
		System.out.println(ch==65);
		
		// * 문자열에 대해서 동등비교해보자
		System.out.println("==== 문자열 동등비교 ====");
		String name = "차은우";
		String name2 = new String("차은우");
		System.out.println(name == "차은우");  // 이렇게 리터럴값 "차은우"를 썼을 때, 여기서는 true
		System.out.println(name2 == "차은우"); // 하지만 여기서는 false
		System.out.println(name==name2);
		// 왜냐하면 String 문자열의 경우에는 문자열의 경우에는 == 이 연산자를 가지고는 비교를 할 수가 없다.
		// String 은 클래스이다. 그래서 객체 정보가 Heap 에 저장이 되어 있다. 그런데 저장이 주소값을 가지고 저장을 한다.
		// 그래서 String 으로 생성된 객체는 절대 동일한 주소값을 가질 수가 없다.
		// == 연산자 가지고는 주소값을 비교한다.
		// 그래서 문자열을 비교할 때에는 equals() 를 이용한다!
		System.out.println(name.equals("차은우"));
		System.out.println(name2.equals("차은우"));
		System.out.println(name.equals(name2));
		System.out.println(name2.equals(name));
		
		// !=
		System.out.println("num!=num1 : " + (num!=num1));
		// 문자열의 경우에는, !(문자열.equals(문자열))
		System.out.println("!name.equals(\"차차차\")" + (!name.equals("차차차")));
		
		// 대소비교하기
		System.out.println("num<num1 : " + (num<num1));
		
		// char 형에서 대소비교가 가능할까? - 코드값을 가지고 있기 때문에 비교 가능
		System.out.println("ch < ch1 : "+ (ch<ch1));
		System.out.println('A' > 'Z');
		
		// 문자열 대소비교 가능할까? 애초에 문자열에다가는 연산자 사용 자체가 안 되도록 해놓았다!
//		System.out.println(name>name1);  // 그러면, 오름차순 내림차순 처럼 순서를 어떻게 정할 수 있는가?
		// 그래서 문자열의 경우에는 compare 라는게 있어서 그건 나중에.
		
	}
	
	public void logicOp() {
		// 논리 연산자
		// boolean 값을 연결해주는 연산자
		// 그리고, 또는
		// 그리고 AND : &&
		// 두 개의 피연산자가 모두 true 일때 true를 반환
		// && 양옆에는 boolean 이 모두 true 일때에만 true.
		// 그래서 이거를 All, 전체라고 생각하면 편하다. 1개라도 true 가 아니면 안 된다.
		
		// 또는 OR : ||  (이거는 shift 를 누른 상태에서 백스페이스)
		// 두 개 이상의 피연산자 중 한 개라도 true 면 true를 반환
		// 그래서 이거는 Any, 어떤거라도~ 생각하면 편하다. 아무거나, 어떤거라도 1개만 true 라면 true 인 것이다.
		
		// id 가 admin 이고 password 가 1234를 확인하기
		String id = "admin";
		String password="1111";
		System.out.println(id.equals("admin") && password.equals("1234"));
		
		// 성별이 여자 또는 남자인 경우 true, 아니면 false
		char gender = '여';
		System.out.println(gender=='여' || gender=='남');
		
		// 성별이 여자이거나 성인인 경우 true
		boolean adult = true;
		System.out.println(gender=='여' || adult==true);
		
		// 숫자의 범위를 확인할 때
		// 입력값이 1~10 인지 확인.
		int su = 5;
		System.out.println(1<=su && su <= 10);
		
		
		// 나이를 입력받고 청소년이면 true, 아니면 false
		// 문자 한 개를 입력받고 그 문자가 대문자인지 확인하는 기능
		// 대문자면 true
		Scanner sc = new Scanner(System.in);
		System.out.print("나이를 입력하세요 : ");
		int childAge = sc.nextInt();
		System.out.println(13<=childAge && childAge<=19);
		System.out.print("영어 문자 1개만 입력하세요(대소비교) : ");
		char input = sc.next().charAt(0);
		System.out.println(65<=input && input<=92);  // 'A', 'Z' 라고 써도 된다!
		
		//논리 연산자 여러개 사용하기
		//남자 또는 여자이고, 나이가 20살인 사람이니?
		System.out.println("성별은? (남/여)");
		gender = sc.next().charAt(0);
		System.out.println(gender=='남' || gender=='여' && childAge==20  ); 
		// 연산자 우선 순위가 && and 라서, 먼저 && 를 판단하고 그리고 || 판단함
		// 그래서 || 랑 && 가 섞여 있으면 순서를 위해서 ( ) 괄호를 활용해야 함
		System.out.println(  ( gender=='남' || gender=='여' ) && childAge==20  );
	}
	
	public void complexOp() {
		
		// 복합 대입 연산자
		// 계산한 결과를 대입까지 해주는 것!
		// +=, -=, /=, *=
		// 값을 누적하거나 차감하는 것. 포인트와 관련이 된 것.
		int total = 3000;
		total += 100;
		System.out.println(total);
		total -= 1800;
		System.out.println(total);
		
		// 문자열에 적용하기
		String msg = "";
		msg += "오늘은 수용일입니다. ";
		msg += "2일만 나오면 쉬어요~";
		System.out.println(msg);
		
		String html = "";
		html += "<html>";
		html += "<head>";
		html += "<title>나의 첫 페이지</title>";
		html += "</head>";
		html += "<body>";
		html += "<h1>나의 페이지입니다." + msg + "</h1>";
		html += "</body>";
		html += "</html>";
		System.out.println(html);
		
	}
	
	public void thirdOp() {
		// 삼항 연산자
		// 조건식 (true, false 가지는 것) ? true 일때 실행할 내용 : false 일때 실행할 내용
		// 양자택일이다.
		// 그런데 삼항 연산자 안에 삼항 연산자 쓰는것도 가능.
		
		// 키가 180보다 크면 "키가 크네요" 를 출력하고, 작으면 "키가 작네요"
		double height = 180.5;
		
		System.out.print("당신의 키를 입력하세오 : ");
		Scanner sc = new Scanner(System.in);
		height = sc.nextDouble();
		String msg = height>180?"키가 크네요":"키가 작네요";
		System.out.println(msg);
		
		
		// 점수를 입력받아 60점 이상이면 합격! 아니면 불합격을 출력
		System.out.print("당신의 점수를 입력하세요 : ");
		double score = sc.nextDouble();
		System.out.println(score>=60?"합격!":"불합격");
		
		
	}
	
	public void bitOp() {
		// bit 연산자 활용
		
		// 저장소에 있는 bit 끼리 연산처리 하는 것
		// ~A : 모든 비트값을 반전시키는 것, 0은 1이 되고, 1은 0이 되는 것
		// a&b (AND) : 둘 다 1 일때에만 1, 아니면 0
		// a|b (OR): 둘중에 1개만 1이여도 1, 아니면 0
		// a^b (XOR): 둘중에 1개만 1이여만 1, 아니면 0 (둘다 1이면 0이 된다.)
		// a<<1 : 왼쪽으로 1칸씩 bit의 값을 옮기는 것. 그래서 생긴 맨 오른쪽은 0으로 채움. 이거 원래 a에 2를 곱한 것과 같다.
		// a>>1 : 오른쪽으로 1칸씩 bit의 값을 옮기는 것. 이거는 2로 나누는 것과 같다.
		// <<, >> 이거는 shift 연산이라고 부름.
		
		
		
		int a=10, b=22;
		String bit = "";
		for(int i = 0; i<32 ; i++) {
			bit+="0";
		}
		String bitData = bit+Integer.toBinaryString(a);
		bitData = bitData.substring(bitData.length()-32);
		System.out.println(bitData + " -> a 비트값 " + a);
		bitData = bit+Integer.toBinaryString(b);
		bitData = bitData.substring(bitData.length()-32);
		System.out.println(bitData + " -> b 비트값 " + b);
		
		bitData = bit+Integer.toBinaryString(a&b);
		bitData = bitData.substring(bitData.length()-32);
		System.out.println(bitData + " -> a&b 비트값 " + (a&b));
		
		bitData = bit+Integer.toBinaryString(a|b);
		bitData = bitData.substring(bitData.length()-32);
		System.out.println(bitData + " -> a|b 비트값 " + (a|b));
		
		bitData = bit+Integer.toBinaryString(a^b);
		bitData = bitData.substring(bitData.length()-32);
		System.out.println(bitData + " -> a^b 비트값 " + (a^b));
		
		bitData = bit+Integer.toBinaryString(~a);
		bitData = bitData.substring(bitData.length()-32);
		System.out.println(bitData + " -> ~a 비트값 " + (~a));
		
		bitData = bit+Integer.toBinaryString(a>>1);
		bitData = bitData.substring(bitData.length()-32);
		System.out.println(bitData + " -> a>>1 비트값 " + (a>>1));
		
		bitData = bit+Integer.toBinaryString(a<<1);
		bitData = bitData.substring(bitData.length()-32);
		System.out.println(bitData + " -> a<<1 비트값 " + (a<<1));
	}
}