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