KT DS

[KT DS 25기] 3일차 - JAVA

가은(JANE) 2025. 1. 17. 12:56

1. 깃 연결하기

연동 이론

Github

Repo- Master (Code)

PC

Local | Repo

ㄴ> Code

<기본 언어>

  • Commit: PC에서 수정한 걸 Local Repo에 영구히 보존시키는 것.
  • Push : PC -> GitHub
  • Pull : Github -> PC

 

2. 상수

- 변수가 정의되고 최초 한번 값이 할당되고 나면 다시는 재할당(수정.업데이트)할 수 없는 변수

할당하는 방법

  • 변수의 정의와 할당과 동일하다.
  • 어떤 변수의 타입 앞에 final만 붙이면 상수가 된다.
public static void main(String[] args) {
    final int speedOfLight = 299_792_458; 
    System.out.println(speedOfLight);

    speedOfLight = 10;  에러!
}
  • 상수를 정의하고 값을 나중에 할당할 수도 있다.
  • 할당하고 나면 변경 불가
public static void main(String[] args) {
    final int speedOfLight;
    speedOfLight = 299792458;
    System.out.println(speedOfLight);
}
  • 이미 정의된 상수들
    • 원주율 : Math.PI
    • 자연상수 : Math.E
    • int 변수의 최대값 : Integer.MAX_VALUE

 

3. 형 변환

1. 4byte 크기의 int 변수 값을 8byte 크기의 long 변수에 할당하면?

public static void main(String[] args) {
    int normalNumber = Integer.MAX_VALUE;
    long bigNumber = normalNumber;
    System.out.println(normalNumber);
    System.out.println(bigNumber);
}

 

  •  에러 없이 잘 동작함!

2. 묵시적 형변환

  • int의 최대 범위 < long의 최대 범위

int < long

  • byte -> short -> int -> long 은 모두 “묵시적 형변환"을 합니다.
  • 반면, 크기가 큰 long 형의 값을 비교적 작은 int형으로 자연스러운 변환은 불가능합니다.
public static void main(String[] args) {
    long bigNumber = Long.MAX_VALUE;
    int normalNumber = bigNumber;  에러!
    System.out.println(bigNumber);
    System.out.println(normalNumber);
}

 

  • long -> int 자연스러운 변환 불가능
  • 위 코드에서 에러를 제거하려면 명시적 형변환을 해야만 합니다.
  • 명시적 형변환이란 강제로 형을 변경하는 것을 말합니다.
     
  • 범위를 벗어난 수를 넣었을 때,
    할당 값이 이상해지는 경우가 종종 발생할 수 있습니다.
    할당할 수 있는 범위를 초과하는 버그가 발생하기 때문입니다.
public static void main(String[] args) {
    System.out.println(Integer.MAX_VALUE); //2147483647
    int normalNumber = Integer.MAX_VALUE + 1;
    System.out.println(normalNumber); //-2147483648
}
  • Integer.MAX_VALUE :
    • 2진 계산법
      • 0+1=1
      • 1+1=10
      • 10+1=11
      • 11+1=100
    • 정수 오버플로우
      • int 최대값:
      • 01111111_11111111_11111111_11111111 1을 더하면
      •  
        10000000_00000000_00000000_00000000 이 되어 10진수 -2,147,483,648 가 됩니다.
public static void main(String[] args) {
    long longNumber = 2147483649L;  int 최대 값보다 2큽니다.
    System.out.println(longNumber);
    int normalNumber = (int) longNumber;
    System.out.println(normalNumber); //-2147483647
    
}

주의점 : 항상 정수 오버플로우가 발생하지 않도록 주의를 기울어야 합니다.

  1. 정수<-> 부동소수점의 변환
    		// 실습 : 정수 -> 부동소수점(83p)
    		long num = Long.MAX_VALUE;
    		float fnum = num;
    		double dnum = num;
    		
    		System.out.println(num); // 10
    		System.out.println(fnum); //10.0
    		System.out.println(dnum); // 10.0

    		// 실습 : 부동소수점 -> 정수(84)
    		System.out.println(" FLoat Number => Decimal");
    		float fnum2 = 10.9f;
    		int num2 = (int)fnum2;
    		System.out.println(fnum2);
    		System.out.println(num2);
    		
    		double dnum2 = 11.15;
    		num2 = (int) dnum2;
    		System.out.println(dnum2);
    		System.out.println(num2);
  2. 부동소수점 소수점 처리
    		// 실습 : 부동소수점 소수점 처리(85)
    		double dnum3 = 10.1;
    		//소수점 올림.
    		dnum3 = Math.ceil(dnum3);
    		System.out.println(dnum3);//11.0
    		
    		// 소수점 버림.
    		dnum3 = 10.9;
    		dnum3 = Math.floor(dnum3);
    		System.out.println(dnum3);//10.0
    		
    		//소수점 반올림.
    		dnum3 = 15.18;
    		dnum3 = Math.round(dnum3);
    		System.out.println(dnum3); //15.0 
    		
    		dnum3 = 10.56;
    		dnum3= Math.round(dnum3);
    		System.out.println(dnum3);//11.0
    		
    		System.out.println(" 소수점 이동 시키기.");
    		// 실습 : 부동소수점 소수점 올림처리(86)
    		// 29.
    		double dnum4 = 29.37;
    		double dnum5 = dnum4*10;
    		System.out.println(dnum5);//293.7
    		
    		dnum5 = Math.round(dnum5);
    		System.out.println(dnum5);//294.0
    		
    		double dnum6 = dnum5/10;
    		System.out.println(dnum6);//29.4


  3. 문자열 -> 정수로 변환
    		// 실습 : 문자열 -> 정수 변환(88)
    		String numberString = "10";
    		byte byteNumber = Byte.parseByte(numberString);
    		System.out.println(byteNumber);
    		
    		numberString = "10000";
    		short shortNumber = Short.parseShort(numberString);
    		System.out.println(shortNumber);
    		
    		numberString = "1000000";
    		int intNumber1 = Integer.parseInt(numberString);
    		System.out.println(intNumber1);
    		
    		numberString = "1000000000";
    		long longNumber1 = Long.parseLong(numberString);
    		System.out.println(longNumber1);
  4. 에러 발생
    1. 정수형이 아닌 문자열을 변환하려고 할 때 
    2. String numberString3 = "백만"; byte byteNumber2 = Byte.parseByte(numberString3); System.out.println(byteNumber2);
    3. 부동소수점 -> 정수형 
    4. String numberString4 = "10"; byte byteNumber4 = Byte.parseByte(numberString4); System.out.println(byteNumber4);
  5. 문자열 -> 불린으로 변환

 

		String str = "true";
		boolean bool = Boolean.parseBoolean(str);
		System.out.println(bool); //true
		
		str="TRUE";
		bool = Boolean.parseBoolean(str);
		System.out.println(bool); //true
		
		str="tRue";
		bool = Boolean.parseBoolean(str);
		System.out.println(bool); //true
		
		String str1 ="-111";//true가 아니면 무조건 false다.
		boolean bool1 = Boolean.parseBoolean(str1);
		System.out.println(bool1); //false
		
		str1 = "";
		bool1=Boolean.parseBoolean(str1);
		System.out.println(bool1); //false
		
		str1="anystring";
		bool1 = Boolean.parseBoolean(str1);
		System.out.println(bool1);// false
		
		System.out.println(" 문자로 변경하기");

6. 숫자를 문자로 변경하기

		// 1. 
		int age = 30;
		String ageString = String.valueOf(age);
		
		System.out.println(age + 1); //31
		System.out.println(ageString +1); //301
		
		// 2.
		int count = 16;
		String countString = count +"";
		System.out.println(count + 1); //17
		System.out.println(countString + 1); //"161"

 

ㄴ 이건 코드 복기니까 그냥 이해만 하고 넘어가면 된다.

4. 연산자

0. 개요

- 더 큰 게 정답!

int + long = long

int+ int = int

int + double = double

int + float = float

 

정수 / 정수 = 정수

정수 / 실수 = 실수

실수 / 실수 = 실수

 

char(1byte)

1. 연산자 우선순위

2. JAVA의 연산자 종류

3. 코드 예시

// 스스로에게 연산하기
public static void main(String[] args) {
    int number1 = 10;
    number1 = number1 + 2;
    System.out.println(number1);
}
public static void main(String[] args) {
    int number1 = 10;
    number1 += 2;
    System.out.println(number1);
}

위 2개가 똑같은 결과값이다.

나는 +=를 많이 이용하는 편~

 

  • += -= *= /= %/ 다 적용 가능하다.
public static void main(String[] args) {
    int num = 10;
    num += 2; // num = num + 2;
    num -= 2; // num = num - 2;
    num *= 2; // num = num * 2;
    num /= 2; // num = num / 2;
    num %= 2; // num = num % 2;
}
  • ++ --
// 스스로에게 1을 빼거나 더할때
public static void main(String[] args) {
    int num = 10;
    num += 1;
    num -= 1;
}
public static void main(String[] args) {
    int num = 10;
    num++;
    num--;
}

위 아래가 똑같다. 다만, ++과 --의 위치에 따라서 조금씩 달라진다

 

  • 앞에 있으면 먼저 1을 더한다(수행) 뒤에 있으면 나중에 1을 더한다(요정도?)
public static void main(String[] args) {
    int num1 = 10;
    int num2 = 10;
    // 10을 먼저 출력한 다음 1 더하기
    System.out.println(num1++); // 10
    // 1을 먼저 더한 다음 출력하기
    System.out.println(++num2); // 11
}

ㄴ 물론 뺴기도 마찬가지~

 

4. 연습문제(과제)

1. 5분 50초는 총 몇초인가?

package first_java_program;

public class ArtithmaticProblem1 {
	public static void main(String[] args) {
		int minutes = 5;
		int seconds = 50;
		int time = 0;
		
		/*
		 * 산술연산자를 이용해
		 * minutes와 seconds의 값을 초로 변환해
		 * time 변수에 할당하고 출력해보세요.
		 */
		time = 60 * minutes + seconds ;
		
		System.out.println(minutes + "분" + seconds +"초는 " + time+"초 입니다.");
	}
}

 

2. 145초는 몇분 몇초인가?

package first_java_program;

public class ArtithmaticProblem2 {
	public static void main(String[] args) {
		int processTime = 145;
		int minutes = 0;
		int seconds = 0;
		
		/*
		 * 산술 연산자를 이용해
		 * processTime을 분(Minute), 초(Second)
		 * 룰 구한 다음 minutes, seconds 변수에 할당하고
		 * 출력해보세요.
		 */
		minutes = processTime / 60 ;
		seconds = processTime % 60;
		
		System.out.println(minutes + "분"+ seconds + "초");
	}

}

 

3. 섭씨온도 화씨온도로 바꾸기

package first_java_program;

public class ArthithmaticProblem3 {
	public static void main(String[] args) {
		int celsius = 30;
		int fahrenheit = 0;
		
		/*
		 * 섭씨온도를 나타내는 celsius 변수와
		 * 화씨온도를 나타내는 fagrenheit 변수가 있습니다.
		 * celsius 변수에는 30이 할당되어 있습니다.
		 * 섭씨 30도를 화씨 온도로 변경하면
		 * 화씨 86도가 됩니다.
		 * 섭씨온도를 화씨온도로 변경해
		 * fahrenheit 변수에 할당하고 출력해보세요.
		 * 변경공식 :(섭씨 * 9/5) +32 = 화씨
		 */
		
		fahrenheit = (celsius * 9/5) + 32;
		System.out.println(fahrenheit);
	}

}

 

------------------------------------------------------------------------------------------

아직까지는 따라갈만하다...

꼭 나태해지지 말고 매일 리뷰를 남기자~!!

ㄴ 어제 써놓고 업로드를 안 했넴...;;

'KT DS' 카테고리의 다른 글

[KT DS] Package와 Import와 접근 제어자  (0) 2025.02.06
[KT DS] 클래스  (0) 2025.02.06
[KT DS 25기] 메소드  (1) 2025.02.04
JAVA - eclipse 세팅 방법  (0) 2025.01.15
[KT DS 25기] 2일차 - Java 개요  (0) 2025.01.15