๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
JAVA/Java Programming

3์žฅ ์—ฐ์‚ฐ์ž

by soy๋ฏธ๋‹ˆ 2021. 9. 12.

 

1. ์—ฐ์‚ฐ์‹

  • ํ•„์š”๋กœ ํ•˜๋Š” ํ”ผ์—ฐ์‚ฐ์ž์˜ ์ˆ˜์— ๋”ฐ๋ผ ๋‹จํ•ญ, ์ดํ•ญ, ์‚ผํ•ญ ์—ฐ์‚ฐ์ž๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.
  • ์šฐ์„  ์ˆœ์œ„ ๋‹จํ•ญ > ์ดํ•ญ > ์‚ผํ•ญ ์—ฐ์‚ฐ์ž ์ˆœ์œผ๋กœ ์šฐ์„  ์ˆœ์œ„ ๊ฐ€์ง„๋‹ค.
  • ์—ฐ์‚ฐ์‹์€ ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜์˜ ๊ฐ’์„ ์‚ฐ์ถœํ•œ๋‹ค. ๋‘ ๊ฐœ ์ด์ƒ์˜ ๊ฐ’์„ ์‚ฐ์ถœํ•˜๋Š” ์—ฐ์‚ฐ์‹์€ ์—†๋‹ค.
  • ํ•˜๋‚˜์˜ ๊ฐ’์ด ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ณณ์ด๋ฉด ์–ด๋””๋“  ๊ฐ’ ๋Œ€์‹  ์—ฐ์‚ฐ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
++x; 					// ๋‹จํ•ญ ์—ฐ์‚ฐ์ž
x + y; 					// ์ดํ•ญ ์—ฐ์‚ฐ์ž
(sum > 90) ? 'a' : 'b'; 		// ์‚ผํ•ญ ์—ฐ์‚ฐ์ž

 

2. ๋‹จํ•ญ ์—ฐ์‚ฐ์ž

int x = -100;
int result1 = +x;  // +๋ถ€ํ˜ธ๋Š” ๊ธฐ์กด์˜ ๋ถ€ํ˜ธ๋ฅผ ์œ ์ง€ํ•ด์ค€๋‹ค. -100
int result2 = -x;  // -๋ถ€ํ˜ธ๋Š” ๊ธฐ์กด์˜ ๋ถ€ํ˜ธ๋ฅผ ๋ฐ”๊พผ๋‹ค. 100

short s = 100;
short result3 = -s;  //์ปดํŒŒ์ผ ์—๋Ÿฌ, int ํ˜•๋ณ€ํ™˜ ๋˜๊ธฐ ๋•Œ๋ฌธ์—
int result3 = -s;  // -100
  • ๋‹จํ•ญ ์—ฐ์‚ฐ์ž : ++ / -- / ! / ~
  • ์ฆ๊ฐ€/๊ฐ์†Œ ์—ฐ์‚ฐ์ž
public class Hello {
	public static void main(String[] args) {
		int x = 10;
		int y = 10;
		int z;
		
		System.out.println(x++); // 10
		System.out.println(x); // 11
		System.out.println(++x); // 12
		System.out.println(x); // 12
		System.out.println(y--); //10
		System.out.println(y); // 9
		System.out.println(--y); // 8
		System.out.println(y); // 8
		z=x++; // z = 12
		System.out.println(z); // 12
		System.out.println(x); // 13
		z=++x; // z = 14
		System.out.println(z); // 14
		System.out.println(x); // 14
		 
		z = ++x + y++; // x: 15, y: 8, z: 23
		System.out.println(z); // 23
		System.out.println(x); // 15
		System.out.println(y); // 9
        
        // z ๋ณ€์ˆ˜์— ๋“ค์–ด๊ฐ„ ์—ฐ์‚ฐ ๊ฐ’์€ ์•ˆ ๋ณ€ํ•จ
        // ๋ณ€์ˆ˜ x๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒƒ๊ณผ ๋ณ€์ˆ˜ z๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๋ณ„๊ฐœ
	}
}
  • ๋น„ํŠธ ์—ฐ์‚ฐ์ž
public class Hello {
	public static String toBinaryString(int value) {
		String str = Integer.toBinaryString(value);
		while(str.length() < 32) {
			str = "0" + str;
		}
		return str;
	}
	public static void main(String[] args) {
		int v1 = 11;  // 11 : 00000000000000000000000000001011
		int v2 = ~v1; // -12 : 11111111111111111111111111110100 (11์„ ๋ฐ˜์ „์‹œํ‚ค๊ธฐ)
		int v3 = ~v1 + 1; // -11 : 11111111111111111111111111110101 (11 ๋ฐ˜์ „ํ•œ ๊ฒƒ์— 1 ๋”ํ•˜๊ธฐ)
		System.out.println(toBinaryString(v1)+ " " + v1);
		System.out.println(toBinaryString(v2)+ " " + v2);
		System.out.println(toBinaryString(v3)+ " " + v3);
	}
}

 

3. ์ดํ•ญ ์—ฐ์‚ฐ์ž

  • byte + byte => int + int = int
  • int + long => long + long = long
  • int + double => double + double = double
char c1 = 'A' + 1;
char c2 = 'A';
char c3 = c2 + 1; // ์ปดํŒŒ์ผ ์—๋Ÿฌ, char -> int๋กœ ํ˜•๋ณ€ํ™˜ ๋˜๊ธฐ ๋•Œ๋ฌธ
int c3 = c2 + 1;  // int ํ˜•์œผ๋กœ ๋ฐ˜ํ™˜, 66
char c3 = (char)(c2 + 1); // char ํ˜•์œผ๋กœ ๋ฐ˜ํ™˜, B

 

4. ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

  • ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ, Nan, Infinity ์˜ˆ์™ธ ์ฒ˜๋ฆฌ : ArithmeticException()
5 / 0 // ์ปดํŒŒ์ผ์€ ๋˜์ง€๋งŒ, ์˜ˆ์™ธ ๋ฐœ์ƒ
5 % 0 // ์ปดํŒŒ์ผ์€ ๋˜์ง€๋งŒ, ์˜ˆ์™ธ ๋ฐœ์ƒ

try {
   int z = x % y;
   System.out.println("z: " + z);
} catch(ArithmeticException e){
   System.out.println("0์œผ๋กœ ๋‚˜๋ˆ„๋ฉด ์•ˆ๋จ");
}
  • ํ•˜์ง€๋งŒ 0.0 ๋˜๋Š” 0.0f ์™€ ๊ฐ™์€ ์‹ค์ˆ˜๋กœ ๋‚˜๋ˆ„๋ฉด Infinity(๋ฌดํ•œ๋Œ€), Nan(Not a number) ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.
  • Double.isNan(value) ์™€ Double.isInfinite(value) ๋กœ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
5 / 0.0  // Infinity
5 % 0.0 // Nan

 

5. ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ ์—ฐ์‚ฐ์ž

  • ๋ฌธ์ž์—ด + ๋ฌธ์ž์—ด = ๋ฌธ์ž์—ด
  • ๋ฌธ์ž์—ด + ์ˆซ์ž = ๋ฌธ์ž์—ด
  • ์ˆซ์ž + ๋ฌธ์ž์—ด = ๋ฌธ์ž์—ด
  • 3 + 5 + ๋ฌธ์ž์—ด = 8๋ฌธ์ž์—ด
  • ๋ฌธ์ž์—ด + 3 + 5 = ๋ฌธ์ž์—ด35
  • 3 + ๋ฌธ์ž์—ด + 5 = 3๋ฌธ์ž์—ด5
String str1 = "JDK" + 6.0;  // JDK6.0
String str2 = str1 + " ํŠน์ง•"; // JDK6.0 ํŠน์ง•
String str3 = "JDK" + 3 + 3.0; // JDK33.0
String str1 = 3 + 3.0 + "JDK"; //6.0JDK

 

6. String ํƒ€์ž… ๋น„๊ต ์—ฐ์‚ฐ

  • String ํƒ€์ž… ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•  ๋•Œ์—๋Š” == ๋Œ€์‹  equals() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ์ž๋ฐ”๋Š” ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์ด ๋™์ผํ•˜๋ฉด ๋™์ผํ•œ String ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋„๋ก ๋˜์–ด ์žˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ str1 ๊ณผ str2 ๋Š” ๊ฐ™์€ ๊ฐ์ฒด์˜ ๋ฒˆ์ง€๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ str3๋Š” ์ƒˆ๋กœ์šด String ๊ฐ์ฒด์˜ ๋ฒˆ์ง€๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • ๊ทธ๋ž˜์„œ ๊ฐ™์€ ๋ฌธ์ž์—ด์ด๋”๋ผ๋„ == ์—ฐ์‚ฐ์ž๋กœ ๋น„๊ตํ•˜๋ฉด false ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— equals()๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
String str1 = "์•ˆ๋…•";
String str2 = "์•ˆ๋…•";
String str3 = new String("์•ˆ๋…•");

str1 == str2 // true
str1 == str3 // false

boolean result = str1.equals(str2); // true
boolean result = str1.equals(str3); // true

 

7. ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž

  • AND ์—ฐ์‚ฐ (๋…ผ๋ฆฌ๊ณฑ) : && ๋˜๋Š” &
    • ๋ชจ๋‘ true ์—ฌ์•ผ ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ true
  • OR ์—ฐ์‚ฐ (๋…ผ๋ฆฌํ•ฉ) : || ๋˜๋Š” |
    • ํ•˜๋‚˜๋ผ๋„ true ์ด๋ฉด ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ true
  • XOR ์—ฐ์‚ฐ (๋ฐฐํƒ€์  ๋…ผ๋ฆฌํ•ฉ) : ^
    • ๋‘˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ true ํ•˜๋‚˜๊ฐ€ false ์ธ ๊ฒฝ์šฐ์—๋งŒ ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ true
  • NOT ์—ฐ์‚ฐ (๋…ผ๋ฆฌ ๋ถ€์ •) : !
    • ๊ธฐ์กด์˜ ๋…ผ๋ฆฌ๊ฐ’๊ณผ ๋ฐ˜๋Œ€๋˜๋Š” ๊ฒฐ๊ณผ (true์ด๋ฉด false)

 

 

8. ๋น„ํŠธ ์—ฐ์‚ฐ์ž

  • AND ์—ฐ์‚ฐ (๋…ผ๋ฆฌ๊ณฑ) : &
    • ๋ชจ๋‘ 1 ์ด๋ฉด ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ 1
  • OR ์—ฐ์‚ฐ (๋…ผ๋ฆฌํ•ฉ) : |
    • ๋‘˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ 1 ์ด๋ฉด ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ 1
  • XOR ์—ฐ์‚ฐ (๋ฐฐํƒ€์  ๋…ผ๋ฆฌํ•ฉ) : ^
    • ๋‘˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ 1 ํ•˜๋‚˜๊ฐ€ 0 ์ธ ๊ฒฝ์šฐ์— ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ 1
  • NOT ์—ฐ์‚ฐ (๋…ผ๋ฆฌ ๋ถ€์ •) : ~
    • ๊ธฐ์กด์˜ ๋…ผ๋ฆฌ๊ฐ’๊ณผ ๋ฐ˜๋Œ€๋˜๋Š” ๊ฒฐ๊ณผ (1 ์ด๋ฉด 0)

 

๋น„ํŠธ ์ด๋™ ์—ฐ์‚ฐ์ž

  • a << b : a ๋น„ํŠธ๋ฅผ b ๋งŒํผ ์™ผ์ชฝ์œผ๋กœ ์ด๋™, ๋นˆ์ž๋ฆฌ๋Š” 0์œผ๋กœ ์ฑ„์›€
  • a >> b : a ๋น„ํŠธ๋ฅผ b ๋งŒํผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™, ๋นˆ์ž๋ฆฌ๋Š” ์ตœ์ƒ์œ„ ๋ถ€ํ˜ธ ๋น„ํŠธ๋กœ ์ฑ„์›€
  • a >>> b : a ๋น„ํŠธ๋ฅผ b ๋งŒํผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™, ๋นˆ์ž๋ฆฌ๋Š” 0์œผ๋กœ ์ฑ„์›€

 

9. ์‚ผํ•ญ ์—ฐ์‚ฐ์ž

  • ์„ธ ๊ฐœ์˜ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ์—ฐ์‚ฐ์ž
int score = 85;
char grade = (score > 90) ? 'A' : ((score > 80) ? 'B' : 'C'); // B

 

 

๋Œ“๊ธ€