패스워드를 만드는 메소드를 코딩해봤습니다

안녕하세요 오랜만에 인사드립니다
생업에 바쁘다보니 자주 인사드리지는 못하지만
홀로 공부하는 입장에서 피드백을 받기 힘들어
종종 만든 코드를 올려 피드백을 받고자 합니다

너무 기본적일지 몰라도 기탄없는 가르침 부탁드립니다^^

  • 설정
  1. 비밀번호는 8자리가 넘어가야 한다
  2. 비밀번호는 최소한 하나의 문자와 숫자를 섞어서 만들어야 한다
  3. 이 두 규칙에 어긋날 경우 경고 문구와 다시 비밀번호를 입력해야한다
  4. 조건 만족시 비밀번호가 생성 되었음을 알려주고 컨펌 차원에서 만들어진 비밀번호를 출력한다

감사합니다^^

   class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine($"비밀번호를 입력해주세요.(문자와 숫자를 섞어서 8자리 이상으로 만들어야 합니다!)");
            string password =  Program.PasswordMaker();

            Console.WriteLine($"지정하신 패스워드는 {password} 입니다.");

        }


        static string PasswordMaker()
        {

            bool sucess = false;
            string pass = String.Empty;

            while (!sucess)
            {
                pass = Console.ReadLine();

                bool isString = false;
                for (int i = 0; i < pass.Length; i++)
                {
                    bool isChar = char.IsLetter(pass, i);

                    if (!isChar) isString = false;
                    else
                    {
                        isString = true;
                        break;
                    }
                }

                bool isInt = false;
                for (int j = 0; j < pass.Length; j++)
                {
                    bool isChar = char.IsNumber(pass, j);

                    if (!isChar) isInt = false;
                    else
                    {
                        isInt = true;
                        break;
                    }
                }


                if (pass.Length > 8)
                {
                    if (isString)
                    {
                        if (isInt)
                        {
                            Console.WriteLine("비밀번호가 생성되었습니다!!!");
                            sucess = true;
                        }
                        else
                        {
                            Console.WriteLine("숫자를 포함해주세요!!");
                            Console.WriteLine($"다시 비밀번호를 입력해주세요.");
                        }
                    }
                    else
                    {
                        Console.WriteLine("문자를 포함해주세요!!");
                        Console.WriteLine($"다시 비밀번호를 입력해주세요.");
                    }
                }
                else
                {
                    Console.WriteLine("비밀번호의 길이는 8자리 이상이여야 합니다!!");
                    Console.WriteLine($"다시 비밀번호를 입력해주세요.");
                }
            }

            return pass;
        }

3개의 좋아요

목적과 동작이 동일하다면 어떤 코드든 문제없는 코드라 생각합니다. 어떤 점을 피드백 받고 싶으세요?

2개의 좋아요

@dimohy 댓글 감사합니다~
좀 더 쉽게 구현가능하거나
잘 안쓰는 코드가 있거나
돌아가는 코드가 있는지… 피드백을 받고 싶습니다

1개의 좋아요

아래 제가 짠 코드와 차이를 비교해보세요.

Console.WriteLine("비밀번호를 입력해주세요.(문자와 숫자를 섞어서 8자리 이상으로 만들어야 합니다!)");
var passwords = ReadConsolePasswords();
Console.WriteLine($"지정하신 패스워드는 {passwords} 입니다.");



static string ReadConsolePasswords()
{
    string? result;

    while (true)
    { 
        result = Console.ReadLine();
        var check = IsValidPasswords(result);

        Console.WriteLine(check.InvalidMessage);

        if (check.IsValid is true)
            break;

        Console.WriteLine("다시 비밀번호를 입력해주세요.");
    }

    return result!;

    static (bool IsValid, string InvalidMessage) IsValidPasswords(string? input)
    {
        if (input is null || input.Length < 8)
            return (false, "비밀번호의 길이는 8자리 이상이여야 합니다!!");

        if (input.Any(x => char.IsNumber(x)) is false)
            return (false, "하나 이상의 숫자가 포함되어 있어야 합니다!!");

        if (input.Any(x => char.IsLetter(x)) is false)
            return (false, "하나 이상의 문자가 포함되어 있어야 합니다!!");

        return (true, "비밀번호가 생성되었습니다!!!");
    }
}
7개의 좋아요

저 static 붙은부분은 뭐라고 검색해야 나올까요? 익명함수로 검색해봤는데 그런느낌도 아닌거같아서요

1개의 좋아요

아래 링크입니다.

2개의 좋아요

아하 C# 9.0 부터 저런식으로 사용이 가능하군요
감사합니다 새로운 거 알아가네요!

2개의 좋아요

여기서는 굳이 꼭 로컬 메서드를 사용하지 않아도 무방해요.
별도의 메서드로 분리하는 것이 중요한 거죠.

메서드 이름을 올바르게 짓는 것도 중요함다.
(PasswordMaker… 라길래 password 를 만들어주는 메서드인 줄…)

그리고 가능하면 if 문의 중첩을 1뎁스로 유지하는 방향으로 작성하는 게 좋아요.
early return 방식을 사용하면 도움이 많이 됩니다.
(갠적으루 if 문을 여러 단계 중첩해서 if ~ else 남발한 코드를 커밋 안 받아요…ㅋㅅㅋ)

5개의 좋아요

답변 감사드립니다! 말씀 주신대로 코드 수정 고민해보겠습니다

1개의 좋아요

시간 내 주셔서 감사합니다!!
많은 도움 될꺼 같습니다~
모르는 문법도 보이고… 차분히 비교해 볼께요
다시 한번 감사합니다~!!

1개의 좋아요