1일1알

2일차 : 코드의 흐름 제어 본문

스터디/C#

2일차 : 코드의 흐름 제어

영춘권의달인 2021. 11. 2. 14:25

if와 else

 

if : 뒤에 오는 조건이 참이라면 실행

else if : 위의 if문의 거짓이고 뒤에 오는 조건이 참이라면 실행

else : 위의 if문이 전부 거짓일 때 실행


 

switch

 

switch ( choice) : choice에는 정수나 문자열 가능

{

    case 0:

        (~~~) : choice가 0일 때 실행

        break;

    case 1:

        (~~~) : choice가 1일 때 실행

        break;

    default:

        (~~~) : 위에서 걸러지지 않을 떄 실행

        break;

}

 

삼항연산자 : bool a = 조건식 ? 맞을 때 : 틀릴 때 (나는 별로 선호하지 않음)


가위바위보

 

Random rand = new Random();
int randVal = rand.Next(0, 3);

rand.Next(a, b) : a~a-1 까지의 랜덤한 값

randVal은 0 ~ 2 의 랜덤한 값을 가지게 된다.

 

입력

int input = Convert.ToInt32(Console.ReadLine());

Console.ReadLine()으로 문자열 형식을 입력받아서 int형으로 변환한 뒤 input에 저장


상수와 열거형

 

상수 : const를 이용하여 선언, 수정할 수 없는 값

const int VALUE = 10;

 

열거형 : 서로 연관이 있는 상수들을 묶어서 관리하는? 타입

enum Values
{
    Zero,
    One,
    Five=5,
    Six,
}

숫자를 안적으면 0부터 시작, 숫자를 직접 적어서 할당할 수 있음

 

int a = (int)Values.Six;

enum타입이기 때문에 정수로 쓸 때는 형변환을 해줘야 한다.


while

 

while(조건) : 조건이 참일 동안 계속 반복

do while : do 문에 있는 코드는 무조건 한번 실행하고 후에 while문의 조건에 따라 반복 여부 결정


for

 

for(int i = 0; i < 5; i++)
{
    Console.WriteLine(i);
}

i는 0부터 시작, i가 5보다 작을 때까지 반복, 한번 반복될때마다 i는 1씩 증가


break, continue

 

break : 지금 실행되고 있는 반복문을 즉시 종료

continue : 지금 실행되고 있는 반복문의 contine 뒤의 내용을 실행하지 않고 다시 루프를 돌음


함수

 

함수 : 특정 기능을 수행하기 위한 코드들을 모아놓은 것?

 

static void PrintHello()
{
    Console.WriteLine("Hello");
}

static : class 시간에 다룰 예정

void : 반환 형식이 없음

 

static int Add(int a, int b)
{
    return a + b;
}

int : int 형식을 반환해야함

 

static int Add(int a, int b)
{
    return a + b;
}

int val = Add(3, 4); // val = 7

Add함수에 3, 4가 인자로 들어오고 3 + 4를 반환한 값을 val에 할당

 

static void ChangeValue(int value)
{
    value = value + 1; //value : 1
}
static void Main(string[] args)
{
    int a = 0;
    ChangeValue(a);
    Console.WriteLine(a); // a : 0
}

위의 함수를 실행하면 최종 a는 0이다.

a가 1이 되지 않는 이유는 ChangeValue함수에 value를 인자로 넘길 때 a의 원본이 아닌 a와 값이 같은 복사본이 넘어가기 때문에 a의 값에는 변화가 없다.

 

static void ChangeValue(ref int value)
{
    value = value + 1; //value : 1
}
static void Main(string[] args)
{
    int a = 0;
    ChangeValue(ref a);
    Console.WriteLine(a); // a : 1
}

ref를 이용하면 복사본이 아닌 원본을 넘겨서 a의 값이 바뀐다.

 


ref, out

 

ref : 참조(원본) 을 직접 넘길 때 사용 ex) swap할 때 사용

 

static void ChangeValue(out int val1, out int val2)
{
    val1 = 10;
    val2 = 20;
}
static void Main(string[] args)
{
    int a = 1;
    int b = 2;
    Console.WriteLine(a); //1
    Console.WriteLine(b); //2
    ChangeValue(out a, out b);
    Console.WriteLine(a); //10
    Console.WriteLine(b); //20
}

out : 반환하고싶은 값이 여러개일 때 사용? (out 도 참조로 사용)

매개변수에 어떤 값을 할당하지 않으면 오류를 발생시킨다. 반드시 함수 내에서 out 매개변수에 값을 할당해야한다.

 

static void ChangeValue(out int val1, out int val2)
{
    val1 += 10; //error
    val2 += 20; //error
}

out으로 받은 val1, val2의 초기값은 함수 내에서 무시된다. 따라서 val1, val2에는 현재 할당된 값이 없기 때문에 위의 코드는 오류가 발생한다.

 

ref는 기존의 변수를 함수 내에서 수정할 때 주로 사용되고

out은 함수 내에서 생성된 값을 반환할 때 사용된다.

 


오버로딩

 

오버로딩 : 다른 매개 변수를 가진 같은 이름의 여러 함수를 만드는 기능

static int Add(int a, int b)
{
    return a + b;
}
static float Add(float a, float b)
{
    return a + b;
}
static void Main(string[] args)
{
    int val1 = Add(1, 2); // Add(int, int) 호출
    float val2 = Add(3.0f, 4.0f); // Add(float, float) 호출
    Console.WriteLine(val1); // 3
    Console.WriteLine(val2); // 7
}

이름이 같은 Add의 함수가 2개가 있지만 매개 변수가 다르다.

Add(1, 2)를 실행하면 Add(int, int) 의 함수가 호출되고

Add(3.0f, 4.0f)를 실행하면 Add(float, float) 의 함수가 호출된다.

 

static int Add(int a, int b)
{
    return a + b;
}
static int Add(int a, int b, int c)
{
    return a + b + c;
}
static void Main(string[] args)
{
    int val1 = Add(1, 2); // Add(int, int) 호출
    int val2 = Add(1, 2, 3); // Add(int, int, int) 호출
    Console.WriteLine(val1); //3
    Console.WriteLine(val2); //6
}

매개변수의 타입이 같고 개수가 달라도 오버로딩을 할 수 있다.

 

static int Add(int a, int b, int c = 0)
{
    return a + b + c;
}
static void Main(string[] args)
{
    int val1 = Add(1, 2);
    int val2 = Add(1, 2, 3);
    Console.WriteLine(val1); // 3
    Console.WriteLine(val2); // 6
}

위의 코드를 이런식으로 개선할 수 있다. ( 선택적 매개변수 )

a,b는 무조건 입력을 해야하지만 c는 해도 되고 하지 않아도 된다. c에 입력을 하지 않으면 c는 0으로 적용된다.

Add(1, 2)를 하면 a에 1, b에 2가 할당되고 c는 입력을 하지 않았기 때문에  1 + 2 + 0 이 반환된다.

 

static int Add(int a, int b, int c = 0, int d = 1, int e = 2)
{
    return a + b + c + d + e;
}

int val2 = Add(1, 2, 3, e:10);

e : 10 이런 문법을 사용해서 순서를 건너뛰어서 입력을 할 수도 있다.

'스터디 > C#' 카테고리의 다른 글

알아두면 유용한 기타 문법  (1) 2021.11.09
자료구조 맛보기  (1) 2021.11.08
4일차 : 객체지향 여행  (1) 2021.11.05
1일차 : 데이터 갖고 놀기  (1) 2021.11.01