[C#] 9장, C# 개체 지향 프로그래밍(OOP)

1. 개체 지향 프로그래밍(OOP)

이번 시간에는 C#의 개체 지향 프로그래밍에 대해 배워보겠습니다. C# 개체 지향 프로그램을 더욱 이해할 수 있도록 게임 형식으로 코드를 짜서 설명해보도록 하겠습니다. 각 개념은 게임 캐릭터와 요소를 통해 설명합니다.


2. 클래스 및 객체 

클래스와 객체에 대한 자세한 구성 설명은 아래와 같습니다. C#으로 RPG 게임을 만든다고 가정해보겠습니다.

  • 클래스: 게임 캐릭터를 정의하는 청사진
  • 객체: 캐릭터의 인스턴스
using System;

// Character 클래스 정의
public class Character
{
    public string Name { get; set; } // 캐릭터 이름 속성
    public int Health { get; set; }

    // 캐릭터 공격 메서드
    public void Attack()
    {
        Console.WriteLine($"{Name}가 공격!"); // 공격 메시지 출력
    }
}

public class Pro
{
    public static void Main(string[] args)
    {
        Character hero = new Character(); // Charactor 객체를 생성
        hero.Name = "전사"; // 캐릭터 이름 설정
        hero.Health = 100; // 캐릭터 체력 설정
        hero.Attack(); // 공격 메서드 호출
    }
}

3. 상속

상속은 기본 캐릭터 클래스에 파생된 다양한 캐릭터 유형으로 메인 클래스를 상속받는 Worrior 클래스를 정의할 수 있습니다.

using System;

public class Character
{
    public string Name { get; set; } // 캐릭터 이름 속성
    public int Health { get; set; }

    // 캐릭터 공격 메서드
    public void Attack()
    {
        Console.WriteLine($"{Name}가 공격!"); // 공격 메시지 출력
    }
}

// Vehicle 클래스를 상속받는 Warrior 클래스 정의
public class Worrior : Character
{
    // Worrior 클래스 전용 공격 메서드
    public void Attack()
    {
        Console.WriteLine($"{Name}이 공격 자세를 취함"); // 공격 메서드 호출
    }

    public void Defend()
    {
        Console.WriteLine($"{Name}이 방어 자세를 취함"); // 방어 메서드 호출
    }
}

public class Program
{
 

    public static void Main(string[] args)
    {
        Worrior worrior = new Worrior(); // Worrior 객체 생성
        worrior.Name = "전사";
        worrior.Attack();
        worrior.Defend();
    }
}

4. 다형성

다형성은 다양한 캐릭터가 동일한 메서드를 사용하 다른 행동을 수행합니다.

// Animal 클래스 정의
public class  Animal
{
    // 기본 Speak 메서드 정의
    public virtual void Speak()
    {
        Console.WriteLine("동물이 소리냄"); // 기본 동작
    }
}

// Dog 클래스는 Animal 클래스를 상속 받아 Speak 메서드를 오버라이드함
public class Dog : Animal
{
    public string Name { get; set; }
    public override void Speak()
    {
        Console.WriteLine("멍멍!"); // 소리냄
    }
}

// Cat 클래스는 Animal 클래스를 상속 받아 Speak 메서드를 오버라이드함
public class Cat: Animal
{
    public string Name { get; set; }

    public override void Speak()
    {
        Console.WriteLine($"야옹!"); // 고양이 소리
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        Animal myDog = new Dog { Name = "강아지" }; // Dog 객체 생성
        Animal myCat = new Cat { Name = "고양이" }; // Cat 객체 생성

        myCat.Speak(); // Cat 객체의 Speak 메서드 호출
        myDog.Speak(); // Dog 객체의 Speak 메서드 호출 
    }
}

5. 캡슐화

캡슐화는 캐릭터의 상태를 보호하고, 외부에 직접 접근하지 못하도록 합니다.

// GameShop 클래스 정의
public class GameShop
{
    private decimal balance; // 잔액을 보호하기 위한 private로 설정

    // 예금을 위한 메서드
    public void Deposit(decimal amount)
    {
        if (amount > 0)
        {
            // 예금액이 0보다 큰경우 잔엑애 예금액 추가
            balance += amount;
            Console.WriteLine($"예금액: {amount}, 현재 잔액: {balance}"); // 잔액 출력
        }
    }

    // 현재 잔액 반환 메서드
    public decimal GetBalance()
    {
        return balance; // 잔액 반환
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        GameShop account = new GameShop(); // GameShop 객체 생성
        account.Deposit(3000); // 2000원 예금
        Console.WriteLine($"잔액: { account.GetBalance()}원");
    }
}

6.  추상화

복잡한 시스템을 단순화해 중요한 부분만을 보여주는 개념입니다.

// 추상 클래스 GameCharacter 정의
public abstract class GameCharacter
{
    public abstract void Move(); // 이동 메서드 추상
}

// Hero 클래스는 GameCharacter를 상속 Move 메서드 구현
public class Hero : GameCharacter
{
    public override void Move()
    {
        Console.WriteLine("캐릭터가 앞으로 이동"); // 이동 메시지
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        GameCharacter hero = new Hero(); // Hero 객체 생성
        hero.Move();
    }
}

 

 

GitHub - Koras02/project

Contribute to Koras02/project development by creating an account on GitHub.

github.com

 

LIST