생성자 안에 생성자

2024. 10. 1. 10:43카테고리 없음

시도

Player안에 public List<Player> skills = new List<Player>();라는 리스트를 만들고 거기에 Knight가 생성될때 스킬의 목록들이 들어가도록 Knight에서 생성자 안에 생성자를 만들어서 사용을 했다.

코드

public class Knight : Player
{
    public Knight(string name)  //유저 이름
    {
        _Lv = 1;
         _Name = name;
        _Job = "Knight";
        _Atk = 5;
        _Def = 10;
        _Hp = 100;
        _Mp = 50;

        SkillListAdd(new Knight("알파 스트라이크", "공격력 * 2 로 하나의 적을 공격합니다.", 10, 2.0f, 1));
        //SkillListAdd(new Knight("더블 스트라이크", "공격력 * 1.5 로 2명의 적을 랜덤으로 공격합니다.", 15, 1.5f, 2));
    }
    public Knight(string name, string explanation, int mp, float atk, int target)
    {
        _SkillName = name;
        _SkillExplanation = explanation;
        _SkillMp = mp;
        _SkillAtk = _Atk * atk;
        _SkillTarget = target;
    }
}

 

이렇게 작성하니 잘못된 코드 작성법이라고 하셨다.

문제 원인

Knight생성자안에 Knight 생성자를 만들면 되기는하는데 많이 이상한거다.

예를 들면 차를 만들었는데 안에 차를 넣는게 이상한거처럼 이렇게 만들면 안된다라고 생각하면 좋다.

그럼 어떻게 만들면 좋냐!

 

문제 해결

skill이라는 클래스를 따로만든다음에 생성자안에 생성자넣었든 부분에 skill리스트 안에 넣는 배열에 넣어서 사용하게 만들었다.

코드

Skill클래스

public class Skill
{
    public string _SkillName { get; protected set; }
    public string _SkillExplanation { get; protected set; }
    public int _SkillMp { get; protected set; }
    public float _SkillAtk { get; protected set; }
    public int _SkillTarget { get; protected set; }

    public Skill(string name, string explanation, int mp, float atk, int target)
    {
        _SkillName = name;
        _SkillExplanation = explanation;
        _SkillMp = mp;
        _SkillAtk = atk;
        _SkillTarget = target;
    }
}

Knight 클래스

public class Knight : Player
{
    public Knight(string name)  //유저 이름
    {
        _Lv = 1;
         _Name = name;
        _Job = "Knight";
        _Atk = 5;
        _Def = 10;
        _Hp = 100;
        _Mp = 50;

        SkillListAdd(new Skill("알파 스트라이크", "공격력 * 2 로 하나의 적을 공격합니다.", 10, 2.0f, 1));
        SkillListAdd(new Skill("더블 스트라이크", "공격력 * 1.5 로 2명의 적을 랜덤으로 공격합니다.", 15, 1.5f, 2));
    }
}

이렇게하면 깔끔하게 된다. 왜냐? 차로예를 들면 차안에 핸들을 만든거니 잘만든거다.