Pink Transparent Star

Unity/개념 공부

[ 내일배움캠프 ] TIL.06 - C# "개체 참조가 필요합니다."

채유나 2024. 4. 22. 15:51
728x90

 

 

Main()이 있는 클래스 안에서 "개체 참조가 필요합니다." 의 오류가 났다.

Unity가 아닌 콘솔로 이용한 C#은 정말 오랜만에 다뤄보고 이해하기 위해 작성을 해보고자 한다.

문제 상황

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string num;

            Console.WriteLine("두 개의 숫자를 입력해주세요.");

            num = Console.ReadLine();

            string[] nums = num.Split(' ');

            NumberCalculator(int.Parse(nums[0]), int.Parse(nums[1])); //Error
        }

        public void NumberCalculator(int num1, int num2)
        {
            Console.WriteLine("더하기 : {0}", num1 + num2);
            Console.WriteLine("빼기 : {0}", num1 - num2);
            Console.WriteLine("나누기 : {0}", num1 / num2);
            Console.WriteLine("곱하기 : {0}", num1 * num2);
        }
    }
}

 

위의 코드를 사용하게 된다면 Main내의 "NumberCalculator" 에서 개체 참고의 오류가 발생한다.

그 이유는 Main 함수가 Static으로 되어있기 때문이다. 

 

"개체 참고가 필요합니다" 의 의미는 해당 모듈을 사용하기 위해선 아래의 요소가 필요하다.

🔻 해당 모듈이 속한 Class의 개체를 만든다

🔻 그 개체의 멤버로서 모듈을 실행

 

1. 모듈을 public static 모듈

◼ 개체 생성없이 class명으로 사용

◼ 해당 방법을 이용할 경우 반드시 public으로 해야지 다른 클래스에서 접근이 가능

◼ 전역 변수를 사용하기 위해선 해당 클래스안에 변수는 static으로 선언

namespace ConsoleApp1
{

    class Calculator
    {
        public static void NumberCalculator(int num1, int num2)
        {
            Console.WriteLine("더하기 : {0}", num1 + num2);
            Console.WriteLine("빼기 : {0}", num1 - num2);
            Console.WriteLine("나누기 : {0}", num1 / num2);
            Console.WriteLine("곱하기 : {0}", num1 * num2);
        }
    }
    internal class Program
    {

        static void Main(string[] args)
        {
            string num;

            Console.WriteLine("두 개의 숫자를 입력해주세요.");

            num = Console.ReadLine();

            string[] nums = num.Split(' ');

            Calculator.NumberCalculator(int.Parse(nums[0]), int.Parse(nums[1]));
        }

    }
}

 

2. 인스턴스 모듈

◼ 모듈이 속한 class 개체를 만든 후 모듈의 속한 Class의 개체를 만듬

◼ 새로운 개체 만들기 :  클래스명 개체명 = new 클래스명()

◼ 개체의 멤버로써 모듈을 사용

namespace ConsoleApp1
{
    class Calculator
    {
        public void NumberCalculator(int num1, int num2)
        {
            Console.WriteLine("더하기 : {0}", num1 + num2);
            Console.WriteLine("빼기 : {0}", num1 - num2);
            Console.WriteLine("나누기 : {0}", num1 / num2);
            Console.WriteLine("곱하기 : {0}", num1 * num2);
        }
    }
    internal class Program
    {
        static void Main(string[] args)
        {
            string num;

            Console.WriteLine("두 개의 숫자를 입력해주세요.");

            num = Console.ReadLine();

            string[] nums = num.Split(' ');

            Calculator cal = new Calculator(); //새로운 개체 생성

            cal.NumberCalculator(int.Parse(nums[0]), int.Parse(nums[1])); //객체내 함수 실행
        }
    }
}

 

 

참고 사이트

 

C#에서 모듈 사용시 "개체 참조가 필요합니다" 오류

C#에서 모듈(함수)를 사용하는 경우, "개체 참조가 필요합니다"라는 오류가 나오곤 하는데, 그 ...

blog.naver.com

 

728x90