C# 초보 캠프

Day 3

배열

동일한 타입(Type)의 데이타를 연속적인 메모리 공간에 저장할 수 있는 자료구조를 배열(Array)이라 한다. 예를 들어, 정수를 저장하는 변수 100개가 필요하다고 가정하자. 이를 위해 int a1, int a2, ... int a100 처럼 100개의 변수를 만들 수 있다. 또는 간단하게 배열을 이용하여 int a[] = new int[100] 처럼 간단히 100개의 정수를 저장할 공간을 만들 수 있다. 배열에서 각각의 요소는 a[0], a[1], a[2] 처럼 사각괄호 [ ] 안에 0 부터 시작하는 배열 인덱스를 넣어 해당 배열요소값을 가져올 수 있다. 즉, a[0]는 첫번째 배열요소이다. 대부분의 프로그래밍 언어에서 처럼, C#에서도 배열인덱스가 0 부터 시작한다 (일부 언어는 1부터 시작한다).

실습

점수 10개를 더해 합계를 구하는 코드를 작성해 보자. 아래는 배열을 사용하지 않고 10개의 변수에 값을 할당한 후, 이를 더해 합계를 구하는 예제이다.

  using System;

  namespace Day3
  {
      class Program
      {
          static void Main(string[] args)
          {
              int score1 = 70;
              int score2 = 80;
              int score3 = 88;
              int score4 = 90;
              int score5 = 75;
              int score6 = 72;
              int score7 = 82;
              int score8 = 85;
              int score9 = 95;
              int score10 = 72;

              int sum = score1 + score2 + score3 + score4 + score5 +
                        score6 + score7 + score8 + score9 + score10;

              Console.WriteLine(sum);
          }
      }
  }

위 코드를 정수 배열을 사용하여 다시 쓰면 아래와 같이 코드를 간략하게 쓸 수 있다.

  using System;

  namespace Day3
  {
      class Program
      {
          static void Main(string[] args)
          {
              int[] score = new int[10] { 70, 80, 88, 90, 75, 72, 82, 85, 95, 72 };

              int sum = 0;
              for (int i = 0; i < score.Length; i++)
              {
                  sum += score[i];
              }

              Console.WriteLine(sum);
          }
      }
  }
  • 정수 배열 타입은 int[] 처럼 정의한다
  • 정수 배열 변수는 int[] score 처럼 정의한다
  • 정수 배열을 초기화하기 위해 new int[10] 과 같이, new 를 사용하고 10을 써서 10개를 초기화함을 나타낸다. 초기화값들은 옵션으로 지정하는데, 초기화값이 있는 경우는 총갯수 10을 생략할 수 있다. 만약 초기화값들이 없으면 반드시 총갯수(10)를 지정해야 한다
  • 배열은 선언과 동시에 초기값을 { 70, ..., 72} 와 같이 뒤에 정의할 수 있다
  • 배열의 길이는 배열변수.Length 를 써서 구할 수 있다

함수 (메서드)

함수는(C#에서는 클래스 안에 있으므로 메서드라 함) 일련의 코드 문장들을 묶어 하나로 그룹한 것으로 논리적으로 특정한 작업을 수행한다. 예를 들어, 아래 예제에서 int Add(int a, int b) 함수는 2개의 정수를 입력으로 받아 들여 값을 더한 후 합계 결과를 리턴하는 함수라 볼 수 있다. 이러한 방식으로, 더하기, 빼기, 곱하기, 나누기 등의 함수를 만들 수 있다. 함수가 항상 입력을 갖는 것은 아니며, 또한 항상 출력(리턴값)을 갖는 것도 아니다.

실습

두 개의 정수를 받아 들여 더하기와 빼기를 수행하는 함수를 작성해 본다.

  using System;

  namespace Day3
  {
      class Program
      {
          static void Main(string[] args)
          {
              int a = 100;
              int b = 200;

              int result = Add(a, b);
              Console.WriteLine(result);

              result = Substract(a, b);
              Console.WriteLine(result);
          }

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

          static int Substract(int a, int b)
          {
              int c = a - b;
              return c;
          }
      }
  }
  • 함수의 첫 부분 int Add(int a, int b) 은 함수가 어떤 타입의 입력 파라미터를 받아들이고, 어떤 타입의 값을 리턴하는 지를 표시한다. Add 뒤 괄호 안에 있는 부분을 입력 파라미터라고 하고, 타입과 변수명을 지정해 준다. 복수개의 입력파라미터가 있으면, 콤마로 분리해주고, 입력 파라미터가 없으면 공란으로 둔다. Add 앞의 int는 리턴되는 값의 타입이 정수임을 나타낸다. 리턴값이 없는 경우는 void 라고 쓴다.
  • 함수는 { } 블럭 안에 여러 문장들을 쓸 수 있으며, 리턴값이 있는 경우는 return c 와 같이 리턴되는 변수를 지정한다.

함수의 잇점

함수는 다양한 타입의 입력파라미터를 가질 수 있다. 한 예로, 위에서 소개한 배열을 입력받아 데이타를 처리하는 함수를 작성할 수 있다. 함수는 입력된 데이타로 연산을 하거나 집계를 하는 등 다양한 기능을 제공할 수 있다. 함수는 하나의 논리적인 코드 묶임이므로 서로 다른 데이타를 가지고 이를 여러 번 호출할 수 있다. 이는 반복되는 코드를 줄이는 효과가 있으며, 한번 작성한 코드를 여러 번 사용하는 잇점이 있다.

실습

정수 배열을 받아들여 합계와 평균을 구하는 함수(메서드)를 작성해 본다.

  using System;

  namespace Day3
  {
      class Program
      {
          static void Main(string[] args)
          {
              int[] data = new int[] { 14, 24, 34, 52, 5, 13, 54, 100 };
              int[] data2 = new int[] { 14, 24, 34, 52, 5, 13, 54, 100 };

              int s = Sum(data);
              int avg = Avg(data);
              Console.WriteLine("Sum={0}, Avg={1}", s, avg);

              s = Sum(data2);
              avg = Avg(data2);
              Console.WriteLine("Sum={0}, Avg={1}", s, avg);
          }

          static int Sum(int[] data)
          {
              int s = 0;
              for (int i = 0; i < data.Length; i++)
              {
                  s += data[i];
              }
              return s;
          }

          static int Avg(int[] data)
          {
              if (data.Length == 0) return 0;

              int sum = Sum(data);
              return sum / data.Length;
          }

      }
  }
  • 함수 Sum() 은 정수배열을 입력 파라미터로 받아들여 합계를 구한 후 합계정수값을 리턴한다. s += data[i] 는 s = s + data[i] 와 같은 표현이다
  • 함수 Avg() 안에서는 함계를 구하는 로직이 필요하므로, 기존에 정의된 Sum() 함수를 호출하였다. 따라서, 다시 한번 for 루프를 구현할 필요가 없어 졌으며, 중복된 코드를 작성하지 않아도 되는 잇점이 있다
  • Main()에서 함수 Sum() 과 Avg()를 각각 2번씩 호출하였다. 즉, data 에 대해 한번씩, 그 다음 data2 에 대해 한번씩. 한번 정의된 함수를 여러 번 호출할 수 있음을 알 수 있다.


본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.