문과 코린이의, [C#] 기록/C# 이론

[문과 코린이의 IT 기록장] C# - 데이터를 가공하는 연산자 (산술 연산자, 증감 연산자, 문자열 결합 연산자, 관계 연산자, 조건 연산자, null 조건부 연산자 (?.), null 병합 연산자 (??))

벼리네 2021. 3. 29. 14:57
반응형

[문과 코린이의 IT 기록장] C# - 데이터를 가공하는 연산자

(산술 연산자, 증감 연산자, 문자열 결합 연산자, 관계 연산자, 조건 연산자, null 조건부 연산자 (?.), null 병합 연산자 (??))


 

 

 1. 산술 연산자

- 수치 형식의 데이터를 다루는 연산자이다. 

- 덧셈(+), 뺄셈(-), 나눗셈(/), 곱셈(*), 나머지(%) 기능 존재

 

ex )

 


 

 

 

 2. 증감연산자

- 증가연산자(++) : 피연산자의 값을 1 증가시킨다.

- 감소연산자(--) : 피연산자의 값을 1 감소시킨다.

 * 증감연산자를 변수의 앞에 사용할 경우(전위증감연산자) : 변수의 값을 변경한 후에, 해당 문장이 실행된다.

 * 증감연산자를 변수의 뒤에 사용할 경우(후위증감연산자) : 해당 문장의 실행이 끝난 후에 변수의 값이 변경된다.

 

ex )

 


 

 3. 문자열 결합 연산자

ex )

 


 

 

 4. 관계 연산자

- 두 피연산자 사이의 관계를 평가하는 연산자  

* 즉, 두 피연산자가 같은지, 어느 쪽이 크거나 작은지를 판단

ex ) < , >, <=, >=, ==, !=

- 관계 연산자의 연산 결과는 논리 형식, 즉 bool(참/거짓)이다.

 

ex )

 

 


 

 

5. 조건 연산자

조건식 ? 참일 때의 값 : 거짓일 때의 값

ex )

 

 

 


 

 6 . null 조건부 연산자 (?.)

- 객체의 맴버에 접근하기 전에, 해당 객체가 null인지 검사하여, 그 결과가 참(null)이면 null을 반환하고, 그렇지 않은 경우에는, '.' 뒤에 지정된 맴버를 반환한다.

 

- 이해를 쉽게 하기 위해서, '?.'연산자를 이용한 코드와, 그렇지 않은 코드를 비교해보자.

'=='를 이용한 코드 (?. 연산자 사용 X) '?.'연산자를 이용한 경우 O
class Foo{
 public int member;
 }

Foo foo = null;

int ? bar;  // 데이터타입 ? 변수명 : 해당 변수를 null로 설정
if (foo == null) { bar = null; }
else {bar = foo.member;}
class Foo{
 public int member;
 }

Foo foo = null; 

int ? bar; // 데이터타입 ? 변수명 : 해당 변수를 null로 설정
bar = foo?.member;

- ? [ ] 도 동일한 기능을 수행하는 연산자이다. 다만, 객체의 맴버 접근이 아닌, 배열과 같은 컬랙션 객체의 첨자를 이용한 참조에 사용된다는 점이 다르다.

 

ex )

using System;

using System.Collections; // ArrayList클래스 namespace(이름공간)

using static System.Console;

 

namespace NullConditionalOperator

{

class MainApp

{

static void Main(string[] args) 

{

   ArrayList a = null

[ ArrayList 클래스 ]
- System.Collection 네임스페이스 내부에 존재
- 필요에 따라 크기가 동적으로 증가하는 배열을 사용하여, IList 인터페이스 구현
 
* 배열에서 발전한 형태
 * 즉, 배열의 크기를 임의로도 변화시킬 수 있는 여러가지 타입(기본형, 클래스형의 객체 등)들을 배열에 할당할 수 있는 형태

ex ) ArraryList arr = new ArrayLsit();
 // arr 배열 (객체)가 생성됨. 
* 이 객체는 Add() 메소드를 통해, 하나씩 원하는 배열크기로 인덱스를 늘려갈 수 있음
* 이 객체는 RemoveAt() 메소드를 통해, 해당하는 인덱스(원소)를 제거하는 기능을 수행할 수 있음
* 이 객체는 indexOf()메소드를 통해, 해당 값이 위치한 인덱스를 받아올 수 있다.

   a?.Add("야구); // a?.가 null을 반환하므로 Add() 메소드는 호출되지 않음.

   a?.Add("축구); 

   WriteLine($"Count : {a?.Count}");  // a가 null을 반환하므로, count는 실행 X.

 * count 속성 : 조건에 맞는 자료 개수를 구한다.

   WriteLine($"{a?[0]}"); // a?.가 null을 반환하므로 "Count : "외에는 아무것도 출력되지 않음 .

   WriteLine($"{a?[1]}"); 

 

   a = new ArrayList(); // a는 이제 더 이상 null이 아니다.

   a?.Add("야구); // a는 null이 아니므로, . 뒤의 Add("야구") 출력

   a?.Add("축구);

   WriteLine($"Count : {a?.Count}"); 

   WriteLine($"{a?[0]}");   

   WriteLine($"{a?[1]}");

}

}

}

 

 

 


 

 

 7. null 병합 연산자 (??)

- null 병합 연산자(??)는, null 조건부 연산자(?.)처럼, 프로그램에서 종종 필요한 변수/객체의 null 검사를 간결하게 만들어주는 역할을 한다.

- ??연산자

 : 두 개의 피연산자를 받아들이고, 왼쪽 피연산자가 null인지 평가한다.

 : 평가 결과 null이 아닌 것으로 나타나면 왼쪽 피연산자를 그대로 반환하고, nulll로 평가되면 오른쪽 피연산자를 반환한다.

int ?a = null; 
// [ Nullablee type ] 데이터타입 + ? 변수명
 : null을 가질 수 없는 데이터타입을 null을 가질 수 있는 타입으로 만든 것
Console.WriteLine($"{a ?? 0}"); // a가 null이기 때문에, 그대로 0(null) 출력

a = 99;
Console.WriteLIne($"{a ?? 0}"); // a가 null이 아니기 때문에, 오른쪽에 있는 첨자 {0} 즉, 99를 출력한다.

 

ex )

 

 


* 유의사항
- 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다.
- 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다.
- 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :)
반응형