본문 바로가기
게임 프로그래밍/게임개발 초급

게임개발 초급(7) - 함수와 클래스

by jyppro 2023. 4. 19.

함수와 클래스

 

지난시간 까지는 반복문과 조건문에 대해 알아보았습니다. 마찬가지로 개발자라면 당연히 알아야 하는 함수와 클래스에 대해서 이번에는 이야기 해볼까 합니다. 함수와 클래스는 저희가 지향하는 C#과 같은 객체지향 프로그래밍에서 매우 중요한 개념입니다. 먼저 함수에 대해 알아봅시다.

 

함수
함수는 하나의 기능을 수행하는 코드 블록으로, 입력값을 받아 처리하고 출력값을 반환합니다. 함수를 사용하면 코드의 재사용성과 모듈화가 증가하며, 코드의 가독성이 향상됩니다.

간단한 예시를 통해 보자면, 함수는 보통 다음과 같은 형식으로 작성됩니다.

 

public 반환타입 함수이름(매개변수)
{
    // 함수 내용
    return 반환값;
}

 

여기서 public은 접근 제한자를 나타내며, 반환타입은 함수가 반환하는 값의 데이터 타입을 나타냅니다. 매개변수는 함수에 전달되는 입력값을 나타내며, 필요한 경우 생략할 수 있습니다. 함수이름은 함수의 이름을 나타냅니다. 반환값은 함수가 반환하는 값입니다.

 

위 구조에서 보듯, 함수는 입력을 받아서 출력을 내놓는 기능을 수행하는 코드 블록입니다. 이번에는 함수를 사용하는 간단한 예제를 보겠습니다.

 

using System;

public class Program
{
    public static void Main()
    {
        int a = 10;
        int b = 20;
        int result = Add(a, b);
        Console.WriteLine("a + b = " + result);
    }
    
    static int Add(int x, int y)
    {
        int sum = x + y;
        return sum;
    }
}

 

이 코드에서 Add() 함수는 두 개의 정수를 입력 받아 더한 결과를 반환합니다. Main() 함수에서는 Add() 함수를 호출하고, 결과를 출력합니다. 출력 결과는 "a + b = 30"이 됩니다.

 

 

클래스
클래스는 객체를 생성하기 위한 틀로, 속성과 메서드를 가집니다. 클래스를 사용하면 코드의 재사용성과 모듈화가 증가하며, 객체지향 프로그래밍의 특징인 캡슐화, 상속, 다형성을 구현할 수 있습니다.

클래스는 보통 다음과 같은 형식으로 작성됩니다.

 

public class 클래스이름
{
    // 속성
    public 데이터타입 속성이름1;
    private 데이터타입 속성이름2;

    // 생성자
    public 클래스이름(매개변수)
    {
        // 생성자 내용
    }

    // 메서드
    public 반환타입 메서드이름(매개변수)
    {
        // 메서드 내용
        return 반환값;
    }
}

 

위에 함수에서 봤던 것과 마찬가지로 public은 접근 제한자를 나타내며, class는 클래스를 정의하는 키워드입니다. 속성은 클래스가 가지는 속성을 나타내며, 각 속성은 데이터 타입과 함께 선언됩니다. 생성자는 클래스가 생성될 때 호출되는 함수로, 클래스의 초기화를 담당합니다. 메서드는 클래스가 가지는 기능을 나타내며, 함수와 비슷한 형식으로 작성됩니다.

위와 같이 작성된 클래스는 객체를 생성하여 사용할 수 있습니다. 객체는 클래스의 인스턴스로, 클래스를 기반으로 생성됩니다. 클래스를 사용하여 객체를 생성하면, 해당 객체는 클래스가 가지는 속성과 메서드를 모두 가지게 됩니다.

 

그럼 C#에서의 간단한 클래스 작성 예제를 보시겠습니다.

 

using System;

public class Car
{
    // 클래스 멤버 변수
    public string brand;
    public string model;
    public int year;

    // 클래스 생성자
    public Car(string brand, string model, int year)
    {
        this.brand = brand;
        this.model = model;
        this.year = year;
    }

    // 클래스 멤버 메서드
    public void StartEngine()
    {
        Console.WriteLine(brand + " " + model + "의 엔진을 시작합니다.");
    }

    public void StopEngine()
    {
        Console.WriteLine(brand + " " + model + "의 엔진을 정지합니다.");
    }
}

public class Program
{
    public static void Main()
    {
        // Car 클래스의 인스턴스 생성
        Car myCar = new Car("BMW", "M3", 2022);

        // 클래스 멤버 변수 사용
        Console.WriteLine("브랜드: " + myCar.brand);
        Console.WriteLine("모델: " + myCar.model);
        Console.WriteLine("연식: " + myCar.year);

        // 클래스 멤버 메서드 사용
        myCar.StartEngine();
        myCar.StopEngine();
    }
}

 

뭔가 엄청 길고 많아서 복잡해 보이지만, 객체지향의 개념을 알고있다면 그다지 어렵지 않습니다.

이 예제 코드에서 Car 클래스는 자동차를 나타내며, brand, model, year는 클래스의 멤버 변수입니다. Car 클래스는 public 접근 제한자를 사용하여 다른 클래스에서도 접근이 가능하도록 구현되었습니다.
Car 클래스의 생성자는 클래스의 인스턴스가 생성될 때 자동으로 호출되며, brand, model, year 멤버 변수의 값을 초기화합니다.
StartEngine()와 StopEngine()은 Car 클래스의 멤버 메서드로, 자동차의 엔진을 시작하고 정지하는 역할을 합니다.
Main() 함수에서는 Car 클래스의 인스턴스를 생성하고, 멤버 변수와 멤버 메서드를 사용하여 클래스의 기능을 구현합니다.
클래스는 객체 지향 프로그래밍의 핵심 개념 중 하나로, 코드의 재사용성을 높여주는 등의 다양한 이점이 있습니다.

 

이제 개발에 필요한 기본적인 지식은 거의 갖추었습니다. 저희는 유니티를 사용하여 게임개발 하는것이 목적이기 때문에 아직 갈길이 멀지만, 기초부터 단단히 다져야 나중에 흔들리지 않는 법입니다.

 

이제 게임개발 초급단계는 마무리 하고, 중급 단계로 넘어가서 유니티 툴 사용부터 시작해서, 특정 게임을 만들 때 사용되는 C#스크립트 혹은 기술을 정리하겠습니다. 감사합니다.