CheonD 2020. 10. 6. 15:07

C# - μ—°μ‚°μžμ™€ λ°•μ‹±

 

μ—°μ‚°μžμ€‘μ—λŠ” μ‚°μˆ μ—°μ‚°μž, κ΄€κ³„μ—°μ‚°μž λ“± μ—¬λŸ¬κ°€μ§€κ°€ μžˆμ§€λ§Œ, 이 μž₯μ—μ„œλŠ” λΉ„νŠΈ μ—°μ‚°μž, 쑰건 μ—°μ‚°μž, 지정어 μ—°μ‚°μžμ— λŒ€ν•΄μ„œ μ•Œμ•„λ³Ό 것이닀.

 

λΉ„νŠΈ μ—°μ‚°μž

  • λΉ„νŠΈ λ‹¨μœ„λ‘œ 연산을 μˆ˜ν–‰ν•˜λŠ” μ—°μ‚°μž
  • ν”Όμ—°μ‚°μžλŠ” λ°˜λ“œμ‹œ μ •μˆ˜ν˜•
  • μ™Όμͺ½ 이동(<<), 였λ₯Έμͺ½ 이동(>>), 1의 보수(~)

λΉ„νŠΈ μ—°μ‚°μžμ—λŠ” μš°μ„  μˆœμœ„κ°€ μ‘΄μž¬ν•˜λŠ”λ°, 논리곱(%), 논리합(|), λΉ„νŠΈ 배타적 논리합(^) 순으둜 μš°μ„ μˆœμœ„κ°€ λ†’λ‹€.

 

즉 논리곱이 제일 μš°μ„ μ‹œ μˆ˜ν–‰λœλ‹€.

 

ex)

class BitOperator{
  public static void main() {
    int x=9, y=3;
    Console.WriteLine(x + "&" + y +"=" + (x&y));
    Console.WriteLine(x + "^" + y +"=" + (x^y));
    Console.WriteLine("~10 = " + (~10));
    }
   }
   

 

κ²°κ³Ό κ°’ :

 9&3 = 1

 9^3  = 10

 ~10   = -11

 

λΉ„νŠΈ μ—°μ‚°μžλŠ” 2λΉ„νŠΈλ‘œ λ°”κΎΌλ’€ κ³„μ‚°ν•˜κ³  10μ§„μˆ˜λ‘œ 좜λ ₯값을 λ‚΄λ†“λŠ”λ‹€.

9λŠ” 1001이고, 3은 0011이닀. 이의 논리곱(&)을 ν•œλ‹€λ©΄ 0001이 되고 10μ§„μˆ˜λ‘œ λ°”κΎΈλ©΄ 1이 λœλ‹€. 

 

 

쑰건 μ—°μ‚°μž       

  • ifλ¬Έμž₯κ³Ό 같은 μ‚Όν•­ μ—°μ‚°μž
  • ν˜•νƒœ : max = x > y ? x: y;

xκ°€ y보닀 크닀면 xλ₯Ό max에 μ €μž₯ν•˜κ³  그렇지 μ•Šλ‹€λ©΄ y에 μ €μž₯ν•˜λŠ” 방식이닀.

 

ex)

class Operator {
  public static void main() {
    int a, b, c;
    int m;
    Console.Write("Enter Three number :");
    a = Console.Read() - '0';
    b = Console.Read() - '0';
    c = Console.Read() - '0';
    m = (a>b) ? a: b;
    m = (m>c) ? m : c;
    Console.WriteLine("The largest number = " +m);
    }
  }
  

Console.Read()λŠ” μž…λ ₯ν•¨μˆ˜μ΄λ‹€. '0'을 λΉΌμ£ΌλŠ” μ΄μœ λŠ” μž…λ ₯받을 λ•Œ 문자둜 μž…λ ₯λ°›κΈ° λ•Œλ¬Έμ— μ•„μŠ€ν‚€μ½”λ“œλΌλ¦¬ λΉΌμ€€λ‹€λ©΄ μ‹€μ œ μˆ«μžκ°€ 남기 λ•Œλ¬Έμ΄λ‹€.

 

μœ„μ˜ μ‚Όν•­μ—°μ‚°μžλ₯Ό 톡해 m값이 κ°€μž₯ 큰 값이 μ €μž₯될 것을 μ•Œ 수 μžˆλ‹€.

 

지정어 μ—°μ‚°μž

  • μ—°μ‚°μ˜ 의미λ₯Ό C# μ§€μ •μ–΄λ‘œ λ‚˜νƒ€λ‚Έ μ—°μ‚°μž

즉 isλ‚˜ as같은 C#μ§€μ •μ–΄λ‘œ λ‚˜νƒ€λ‚Έ 것을 μ˜λ―Έν•œλ‹€.

λ°”λ‘œ 예제λ₯Ό 톡해 ν™•μΈν•΄λ³΄μž.

 

ex)

public class Operator{
  static void IsOperator(object obj) {
    Console.WriteLine(obj + "is int :" + (obj is int));
    Console.WriteLine(obj + "is string: " + (obj is string));
    }
  static void AsOperator(object obj) {
    Console.WriteLine(obj + "as string == null :" + (obj as string == null));
    }
    public static void Main() {
      IsOperator(10);
      IsOperator("ABC");
      AsOpertaor(10);
      AsOperator("ABC);
      }
    }

isλ‚˜ asλŠ” boolνƒ€μž…μœΌλ‘œ 리턴해쀀닀.

10은 intκ°€ λ§žμœΌλ―€λ‘œ Trueκ°€ string은 μ•„λ‹ˆλ―€λ‘œ Falseκ°€ λ‚˜μ˜¨λ‹€.

ABC도 μœ„μ™€ 같이 intκ°€ μ•„λ‹ˆλ―€λ‘œ False string은 μ•„λ‹ˆλ―€λ‘œ Trueκ°€ λ‚˜μ˜¨λ‹€.

 

λ¬Έμ œλŠ” as이닀.

10은 string클래슀 객체가 아무것도 μ°Έμ‘°ν•˜κ³  μžˆμ§€ μ•ŠκΈ°λ•Œλ¬Έμ— nullν–ˆμ„ λ•Œ Trueκ°€ λ§žλ‹€. 10은 λ¬Έμžμ—΄μ΄ μ•„λ‹Œ κ·Έμ € "κ°’"이기 λ•Œλ¬Έμ΄λ‹€.

ν•˜μ§€λ§Œ "ABC"λŠ” ""κ°€ λ“€μ–΄κ°€λ―€λ‘œ λ¬Έμžμ—΄μ΄ 되고, μ΄λŠ” string클래슀 객체가 λœλ‹€. 즉 null값이 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— Falseκ°€ λœλ‹€.

 

λ°•μ‹±κ³Ό μ–Έλ°•μ‹±

λ°•μ‹±

  • κ°’ν˜•μ˜ 데이터λ₯Ό μ°Έμ‘°ν˜•μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 것
  • μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ λ¬΅μ‹œμ μœΌλ‘œ 행해짐

μ–Έλ°•μ‹±

  • μ°Έμ‘°ν˜•μ˜ 데이터λ₯Ό κ°’ν˜•μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 것
  • λ°˜λ“œμ‹œ μΊμŠ€νŒ…μ„ ν†΅ν•˜μ—¬ λͺ…μ‹œμ μœΌλ‘œ 행해짐
  • λ°˜λ“œμ‹œ 박싱될 λ•Œ ν˜•μœΌλ‘œ 언박싱을 ν•΄μ£Όμ–΄μ•Ό 함.

ex)

class Boxing{
  public static void Main() {
    int foo = 526;
    object bar = foo; //λ°•μ‹±
    Console.WriteLine(bar);
    try{
       double d = (short)bar; //μ›λž˜ κ°’ν˜•μ˜ μžλ£Œν˜• x --> 였λ₯˜
       Console.WriteLine(d);
      }catch (InvalidCastException e) {
          Console.WriteLine(e + "Error");
          }
        }
      }
      

μ‹€ν–‰ κ²°κ³Ό:

526

System.InvalidCastException:

at Boxing.Main() Error

 

언박싱을 ν•  λ•Œμ—λŠ” 박싱될 λ•Œ ν˜•μœΌλ‘œ 언박싱을 ν•΄μ£Όμ–΄μ•Ό μ •μƒμ μœΌλ‘œ μ²˜λ¦¬κ°€ λœλ‹€.