1. μ—°μ‚°μžμ™€ ν”Όμ—°μ‚°μž


  • μ—°μ‚°μž: 연산을 μˆ˜ν–‰ν•˜λŠ” 기호
  • ν”Όμ—°μ‚°μž: μ—°μ‚°μžμ˜ μ—°μ‚° μˆ˜ν–‰ λŒ€μƒ
  • β€œλͺ¨λ“  μ—°μ‚°μžλŠ” μ—°μ‚°κ²°κ³Όλ₯Ό λ°˜ν™˜ν•œλ‹€.”

2. μ—°μ‚°μžμ˜ μ’…λ₯˜


μ’…λ₯˜μ—°μ‚°μžμ„€λͺ…
μ‚°μˆ  μ—°μ‚°μž+ - * / % << >>사칙 μ—°μ‚°κ³Ό λ‚˜λ¨Έμ§€ μ—°μ‚°(%)
비ꡐ μ—°μ‚°μž> < β‰₯ ≀ == ≠크고 μž‘μŒκ³Ό κ°™κ³  닀름을 비ꡐ
논리 μ—°μ‚°μž&&! &^ ~AND 와 OR 으둜 쑰건을 μ—°κ²°
λŒ€μž… μ—°μ‚°μž=μš°λ³€μ˜ 값을 μ’Œλ³€μ— μ €μž₯
기타(type) ?: instanceofν˜•λ³€ν™˜ μ—°μ‚°μž, μ‚Όν•­ μ—°μ‚°μž, instanceof μ—°μ‚°μž

3. μ—°μ‚°μžμ˜ μš°μ„ μˆœμœ„


  • β€œν•˜λ‚˜μ˜ 식(expression)에 μ—°μ‚°μžκ°€ λ‘˜ 이상 μžˆμ„ λ•Œ, μ–΄λ–€ 연산을 λ¨Όμ € μˆ˜ν–‰ν•  지λ₯Ό μžλ™ κ²°μ •ν•˜λŠ” 것”

4. μ—°μ‚°μžμ˜ κ²°ν•©κ·œμΉ™


  • β€œλŒ€μž…κ³Ό 단항 μ—°μ‚°μžλ₯Ό μ œμ™Έν•˜λ©΄, λͺ¨λ‘ μ™Όμͺ½ β†’ 였λ₯Έμͺ½β€

μ—°μ‚°μžμ˜ μš°μ„ μˆœμœ„μ™€ 결합법칙은 β€œμ„Έ κ°€μ§€λ§Œ κΈ°μ–΅ν•˜μžβ€

  1. μ‚°μˆ  > 비ꡐ > 논리 > λŒ€μž…. λŒ€μž…μ€ 제일 λ§ˆμ§€λ§‰μ— μˆ˜ν–‰λœλ‹€.
  2. 단항(1) > 이항(2) > μ‚Όν•­(3). 단항 μ—°μ‚°μžμ˜ μš°μ„ μˆœμœ„κ°€ 이항 μ—°μ‚°μžλ³΄λ‹€ λ†’λ‹€.
  3. 단항 μ—°μ‚°μžμ™€ λŒ€μž… μ—°μ‚°μžλ₯Ό μ œμ™Έν•œ λͺ¨λ“  μ—°μ‚°μ˜ 진행방ν–₯은 μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½μ΄λ‹€.

5. 증감 μ—°μ‚°μž


  • 증가 μ—°μ‚°μž(++) ν”Όμ—°μ‚°μžμ˜ 값을 1 μ¦κ°€μ‹œν‚¨λ‹€.
  • κ°μ†Œ μ—°μ‚°μž(--) ν”Όμ—°μ‚°μžμ˜ 값을 1 κ°μ†Œμ‹œν‚¨λ‹€.
νƒ€μž…μ„€λͺ…μ‚¬μš© 예
μ „μœ„ν˜•κ°’μ΄ 참쑰되기 전에 μ¦κ°€μ‹œν‚¨λ‹€.j = ++i;
ν›„μœ„ν˜•κ°’μ΄ 참쑰된 후에 μ¦κ°€μ‹œν‚¨λ‹€.j = i++;
// μ „μœ„ν˜•
j = ++i;
// μ•„λž˜μ™€ κ°™λ‹€
++i;   // 증가 후에
j = i; // μ°Έμ‘°ν•˜μ—¬ λŒ€μž…
// μ‹€ν–‰ 이후
i = i
j = i + 1
// ν›„μœ„ν˜•
j = i++;
// μ•„λž˜μ™€ κ°™λ‹€
j = i; // μ°Έμ‘°ν•˜μ—¬ λŒ€μž… 후에
i++;   // 증가
// μ‹€ν–‰ 이후
j = i
i = i + 1

6. λΆ€ν˜Έ μ—°μ‚°μž


public class Ex3_4 {
	public static void main(String[] args) {
		int i = -10;
		i = +i;
		System.out.println(i); // -10
		
		i = -10;
		i = -i;
		System.out.println(i); // 10
	}
}
  • β€˜-β€™λŠ” ν”Όμ—°μ‚°μžμ˜ λΆ€ν˜Έλ₯Ό λ°˜λŒ€λ‘œ λ³€κ²½
  • β€˜+β€™λŠ” μ•„λ¬΄λŸ° 일도 ν•˜μ§€ μ•ŠλŠ”λ‹€. (μ‹€μ œ μ‚¬μš© X)

7. ν˜•λ³€ν™˜ μ—°μ‚°μž


ν˜•λ³€ν™˜μ΄λž€,

  • λ³€μˆ˜ λ˜λŠ” μƒμˆ˜μ˜ νƒ€μž…μ„ λ‹€λ₯Έ νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 것
(νƒ€μž…)ν”Όμ—°μ‚°μž
double d = 85.4;
int score = (int)d;
λ³€ν™˜μˆ˜μ‹κ²°κ³Ό
int β†’ char(char)65'A'
char β†’ int(int)'A'65
float β†’ int(int)1.6f1
int β†’ float(float)1010.0f

8. μžλ™ ν˜•λ³€ν™˜


μžλ™ ν˜•λ³€ν™˜μ΄λž€,

  • μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ ν˜•λ³€ν™˜ ν•΄μ£ΌλŠ” 것
float f = 1234;        // intνƒ€μž…μ˜ 값을 floatνƒ€μž…μ˜ λ³€μˆ˜μ— μ €μž₯
float f = (float)1234; // μžλ™ ν˜•λ³€ν™˜
int i = 3.14f;      // μ—λŸ¬
// float의 λ²”μœ„κ°€ int보닀 크기 λ•Œλ¬Έμ— 값손싀이 λ°œμƒν•  수 있음
int i = (int)3.14f; // μˆ˜λ™ ν˜•λ³€ν™˜μ€ κ°€λŠ₯
  • β€œκΈ°μ‘΄μ˜ 값을 μ΅œλŒ€ν•œ 보쑴할 수 μžˆλŠ” νƒ€μž…μœΌλ‘œ μžλ™ ν˜•λ³€ν™˜λœλ‹€.”
byte b = 100;        // OK. byte의 λ²”μœ„(-128 ~ 127)의 κ°’μ˜ λŒ€μž… (λ¦¬ν„°λŸ΄μ΄κΈ° λ•Œλ¬Έμ— κ°€λŠ₯)
byte b = (byte)100;  // OK. byte둜 ν˜•λ³€ν™˜ν•˜μ—¬ λŒ€μž…
int i = 100;
byte b = i;          // μ—λŸ¬. intλ³€μˆ˜μ— μ–΄λ–€ 값이 λ“€μ–΄μžˆλŠ”μ§€ ν™•μ‹ λΆˆκ°€
byte b = (byte)i;    // OK. byte둜 ν˜•λ³€ν™˜ν•˜μ—¬ λŒ€μž…
byte b = 1000;       // μ—λŸ¬. byte의 λ²”μœ„λ₯Ό λ²—μ–΄λ‚œ κ°’μ˜ λŒ€μž…
byte b = (byte)1000; // OK. κ·ΈλŸ¬λ‚˜ κ°’ 손싀이 λ°œμƒν•΄μ„œ bμ—λŠ” -24κ°€ μ €μž₯됨

9. 사칙 μ—°μ‚°μž


// int 와 int 연산은 int λ₯Ό λ°˜ν™˜
10 / 4 = 2
// int 와 float 연산은 float λ₯Ό λ°˜ν™˜
10 / 4.000000 = 2.500000

10. μ‚°μˆ  λ³€ν™˜


μ‚°μˆ  λ³€ν™˜μ΄λž€,

  • β€œμ—°μ‚° 전에 ν”Όμ—°μ‚°μžμ˜ νƒ€μž…μ„ μΌμΉ˜μ‹œν‚€λŠ” 것”
  1. 두 ν”Όμ—°μ‚°μžμ˜ νƒ€μž…μ„ κ°™κ²Œ μΌμΉ˜μ‹œν‚¨λ‹€. (보닀 큰 νƒ€μž…μœΌλ‘œ 일치)
long   + int   -> long
float  + int   -> float
double + float -> double
  1. ν”Όμ—°μ‚°μžμ˜ νƒ€μž…μ΄ int보닀 μž‘μ€ νƒ€μž…μ΄λ©΄ int둜 λ³€ν™˜λœλ‹€.
byte + short -> int
char + short -> int

Ex3_9

public class Ex3_9 {
	public static void main(String[] args) {
		int a = 1_000_000;
		int b = 2_000_000;
		long c = a * b;        // a * b λŠ” int ν˜•μœΌλ‘œ κ³„μ‚°λ˜κΈ° λ•Œλ¬Έμ— μ˜€λ²„ν”Œλ‘œμš° λ°œμƒ
		System.out.println(c); // -1,454,759,936
		c = (long)a * b;       // μ˜€λ²„ν”Œλ‘œμš°λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ a λ‚˜ b λ₯Ό ν˜•λ³€ν™˜ ν•œ λ’€ μ—°μ‚°
		System.out.println(c); // 2,000,000,000,000
	}
}

11. 반올림 - Math.round()


  • μ‹€μˆ˜λ₯Ό μ†Œμˆ˜μ  첫 μ§Έμžλ¦¬μ—μ„œ λ°˜μ˜¬λ¦Όν•œ μ •μˆ˜λ₯Ό λ°˜ν™˜
long result = Math.round(4.52); // result에 5κ°€ μ €μž₯λœλ‹€.

Ex3_11

public class Ex3_11 {
	public static void main(String[] args) {
		double pi = 3.141592;
		double shortPi = Math.round(pi * 1000) / 1000.0;
		-> Math.round(3.141592 * 1000) / 1000.0
		-> Math.round(3141.592) / 1000.0
		-> 3142 / 1000.0
		-> 3.142
		System.out.println(shortPi); // 3.142
	}
}

12. λ‚˜λ¨Έμ§€ μ—°μ‚°μž


  • 였λ₯Έμͺ½ ν”Όμ—°μ‚°μžλ‘œ λ‚˜λˆ„κ³  남은 λ‚˜λ¨Έμ§€λ₯Ό λ°˜ν™˜
  • λ‚˜λˆ„λŠ” ν”Όμ—°μ‚°μžλŠ” 0이 μ•„λ‹Œ μ •μˆ˜λ§Œ ν—ˆμš©(λΆ€ν˜ΈλŠ” λ¬΄μ‹œλ¨)
10 % 8  -> 2
10 % -8 -> 2

13. == μ—°μ‚°μžμ™€ equals()의 차이


== μ—°μ‚°μž

  • ν•­λ“± μ—°μ‚°μž(Operator) 이닀.
    • λ°˜μ˜μ–΄λ‘œ != κ°€ μ‘΄μž¬ν•œλ‹€.
  • μ°Έμ‘° 비ꡐ(Reference Comparison) ν˜Ήμ€ μ£Όμ†Œ 비ꡐ(Address Comparison)
    • 두 객체가 같은 λ©”λͺ¨λ¦¬ 곡간을 κ°€λ¦¬ν‚€λŠ”μ§€ ν™•μΈν•œλ‹€.
  • λͺ¨λ“  κΈ°λ³Έ μœ ν˜•(Primitive Types)에 μ μš©ν•  수 μžˆλ‹€.
    • byte, short, char, int, float, double boolean
    • μ°Έμ‘° μœ ν˜•(Reference Types)의 경우 μ£Όμ†Œκ°’μ„ λΉ„κ΅ν•œλ‹€.
    • 사싀 Primitive μ—­μ‹œ Constant Pool 에 μžˆλŠ” νŠΉμ • μƒμˆ˜λ₯Ό μ°Έμ‘°ν•˜κΈ° λ•Œλ¬Έμ— μ£Όμ†Œκ°’μ„ λΉ„κ΅ν•œλ‹€κ³  λ³Ό 수 μžˆλ‹€.
  • 객체에도 적용이 κ°€λŠ₯ν•˜μ§€λ§Œ 같은 λ‚΄μš©μ„ 가진 μ„œλ‘œ λ‹€λ₯Έ 객체의 경우 false λ₯Ό λ°˜ν™˜ν•œλ‹€.
    • 같은 λ‚΄μš©μ„ κ°–κ³  μžˆλ”λΌλ„ μ£Όμ†Œκ°’μ΄ λ‹€λ₯΄κΈ° λ•Œλ¬Έ
  • Boolean Type 으둜 λ°˜ν™˜ν•œλ‹€.

equals()

  • 객체 비ꡐ λ©”μ„œλ“œ(Method) 이닀.
  • λ‚΄μš© 비ꡐ(Content Comparison)
    • 두 객체의 값이 같은지 ν™•μΈν•œλ‹€.
    • λ¬Έμžμ—΄μ˜ 데이터/λ‚΄μš©μ„ 기반으둜 λΉ„κ΅ν•œλ‹€.
  • κΈ°λ³Έ μœ ν˜•(Primitive Types)에 μ μš©ν•  수 μ—†λ‹€.
  • Boolean Type 으둜 λ°˜ν™˜ν•œλ‹€.

μ˜ˆμ‹œ

public class Test {
    public static void main(String[] args) {
        Thread t1 = new Thread();
        Thread t2 = new Thread(); // μƒˆλ‘œμš΄ 객체 생성. 즉, t1κ³Ό λ‹€λ₯Έ 객체.
        Thread t3 = t1; // 같은 λŒ€μƒμ„ 가리킨닀.
        String s1 = new String("WORLD");
        String s2 = new String("WORLD");
        System.out.println(t1 == t3); // true
        System.out.println(t1 == t2); // false(μ„œλ‘œ λ‹€λ₯Έ κ°μ²΄μ΄λ―€λ‘œ λ³„λ„μ˜ μ£Όμ†Œλ₯Ό κ°–λŠ”λ‹€.)
        System.out.println(t1.equals(t2)); // false
        System.out.println(s1.equals(s2)); // true(λ™μΌν•œ λ‚΄μš©μ„ κ°–λŠ”λ‹€.)
    }
}

15. 논리 μ—°μ‚°μž


  • 쑰건식을 μ—°κ²°ν•  λ•Œ μ‚¬μš©ν•˜λŠ” μ—°μ‚°μž
// iλŠ” 2의 배수 λ˜λŠ” 3의 λ°°μˆ˜μ§€λ§Œ 6의 λ°°μˆ˜λŠ” μ•„λ‹ˆλ‹€.
// && 의 μš°μ„ μˆœμœ„κ°€ || 보닀 λ†’κΈ° λ•Œλ¬Έμ— κ΄„ν˜Έλ₯Ό 적절히 ν™œμš©ν•΄μ•Όν•¨
( i % 2 == 0 || i % 3 == 0 ) && i % 6 != 0

16. 논리 λΆ€μ • μ—°μ‚°μž


  • tureλ₯Ό false 둜, falseλŠ” true둜 λ³€κ²½
boolean b = true;
!!b -> !!true -> !false -> true

17. 쑰건 μ—°μ‚°μž


  • μ‘°κ±΄μ‹μ˜ 결과에 따라 μ—°μ‚°κ²°κ³Όλ₯Ό λ‹¬λ¦¬ν•œλ‹€.
쑰건식 ? 식1 : 식2
result = (x > y) ? x : y;
// x κ°€ y 보닀 크닀면 result = x
// y κ°€ x 보닀 크닀면 result = y

18. λŒ€μž… μ—°μ‚°μž


  • 였λ₯Έμͺ½ ν”Όμ—°μ‚°μžλ₯Ό μ™Όμͺ½ ν”Όμ—°μ‚°μžμ— μ €μž₯ ν›„ μ €μž₯된 값을 λ°˜ν™˜
System.out.println(x = 3);
System.out.println(3);
  • lvalue - λŒ€μž… μ—°μ‚°μžμ˜ μ™Όμͺ½ ν”Όμ—°μ‚°μž
    • μ €μž₯곡간
  • rvalue - λŒ€μž… μ—°μ‚°μžμ˜ 였λ₯Έμͺ½ ν”Όμ—°μ‚°μž
int i = 0;
3 = i + 3;         // μ—λŸ¬. lvalueκ°€ μ €μž₯곡간이 μ•„λ‹˜
i + 3 = i;         // μ—λŸ¬. lvalue의 μ—°μ‚°κ²°κ³Όκ°€ λ¦¬ν„°λŸ΄
final int MAX = 3; // λ³€μˆ˜ μ•žμ— ν‚€μ›Œλ“œ final을 뢙이면 μƒμˆ˜
MAX = 10;          // μ—λŸ¬. μƒμˆ˜μ— μƒˆλ‘œμš΄ 값을 μ €μž₯ν•  수 μ—†μŒ

19. 볡합 λŒ€μž… μ—°μ‚°μž


  • λŒ€μž… μ—°μ‚°μžμ™€ λ‹€λ₯Έ μ—°μ‚°μžλ₯Ό ν•˜λ‚˜λ‘œ μΆ•μ•½
i += 3        <-> i = i + 3;
// 주의. 였λ₯Έμͺ½ ν”Όμ—°μ‚°μžκ°€ λ‘κ°œ 이상인 경우 κ΄„ν˜Έλ₯Ό ν™œμš©ν•΄μ•Όν•¨
i *= (10 + j) <-> i = i * (10 + j);