C# 입문 - 4 (강의록): 비교 연산, 논리 연산

유키미아우·2024년 9월 1일
0

휘발되기 전에 휘갈김

비교 연산

C#의 비교 연산자들
< <= > >= == !=

int hp = 100;
bool isAlive = (hp > 0);

hp가 0보다 큰지 여부를 bool로 표현한다.

int level = 10;
bool canEnterDungeon = (level <= 5);

던전에 들어갈 수 있는지 여부를 판별.

int hp = 100;
int maxHp = 100;
bool fullHP = (hp == maxHp);

hp가 꽉 찼는지 판별

변수를 할당한다는 것은 메모리, 즉 램에 할당하는 것.
어떤 특정 상황이 맞는지 비교하는 주체는 CPU.
램과 CPU의 티키타카를 통해 프로그램이 실행됨을 알 수 있다.

객체 비교

C#에서 ==는 두 객체가 동일한 메모리 위치를 참조하는지 여부를 검사한다.

MyClass obj1 = new MyClass();
MyClass obj2 = new MyClass();
MyClass obj3 = obj1;

Console.WriteLine(obj1 == obj2); // false, 서로 다른 인스턴스
Console.WriteLine(obj1 == obj3); // true, 동일한 인스턴스

타입 비교

자바스크립트에서 타입 비교를 하고 싶을 때는 엄격 비교 연산자(===)를 이용하고 boolean으로 결과 값을 얻을 수 있다.
그러나 C#에서는 == 애초에 타입이 일치해야만 비교가 가능하다.

  • 자바스크립트
console.log(5 === 5); // true (동일한 타입과 값)
console.log(5 === '5'); // false (타입이 다름)
  • C#
int a = 5;
string b = "5";
// Console.WriteLine(a == b); // 컴파일 오류: 타입 불일치

논리 연산

AND OR NOT
&& || !

AND: 키가 크면서 동시에 똑똑하다.

bool isTall = true;
bool isSmart = true;
bool a = (isTall && isSmart); // true

OR: 키가 크거나 혹은 똑똑하거나.

bool isTall = true;
bool isSmart = false;
bool a = (isTall || isSmart); // true

NOT: 변수의 bool을 반전 시킨다.

bool isTall = true;
bool isSmart = false;
bool a = (!isTall || isSmart); // false

var의 사용

C#에서 var을 사용할 수 있긴 하다.

var a = 10; // int
var b = 4.14f; // float
var c = "hello"; // string
var d = true; // bool

var을 이용하게 되면 C#은 컴파일 단계에서 타입을 자동추론(type inference)한다.
그럼 모두 var를 쓰면 되지 않는가? 라고 생각할 수 있지만 귀찮더라도 직접 타입 지정을 해주면
변수를 사용하는 용도가 더 명확하게 드러나기 때문에 가독성이 좋아진다.

...고 강사는 말하나,

타입 명시의 무조건적인 사용이 반드시 타입 안정성이 향상시키거나 가독성을 개선하는 결과를 불러온다고 말하기는 어렵다. 올바르지 않은 타입을 명시하게 되면 컴파일러의 도움으로 충분히 피해갈 수 있었던 에러가 발생할 가능성도 있다. 컴파일러의 자동 타입 추론의 이점을 충분히 활용하면서, 상황에 따라서 타입 추론을 위임하지 않는 것이 유리한 상황인 경우에 적절히 타입 명시를 해주면 유지보수성 높은 코드를 작성할 수 있을 것이다.

profile
능동적인 마음

0개의 댓글