using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Baekjoon
{
class Program
{
static void Main(string[] args)
{
string[] s = Console.ReadLine().Split();
int a = int.Parse(s[0]);
int b = int.Parse(s[1]);
Console.WriteLine(HyoJin(a, b));
}
static int HyoJin(int x, int y)
{
int result = (x + y) * (x - y);
return result;
}
}
}
위 코드를 아래와 같이 작성하면
static void Main(string[] args)
{
string[] s = Console.ReadLine().Split();
int a = int.Parse(s[0]);
int b = int.Parse(s[1]);
Console.WriteLine(HyoJin(a, b));
}
int HyoJin(int x, int y)
{
int result = (x + y) * (x - y);
return result;
}
다음과 같은 컴파일러 에러가 발생하는데
비정적 필드, 메서드 또는 속성 ‘member’에 대한 개체 참조가 필요합니다.
이는 함수를 호출하기 전 클래스의 인스턴스를 만들지 않았기 때문에 발생하는 문제이다.
위 에러의 해결방법은 두 가지가 있는데 맨 위 코드처럼 (1) static
을 함수 선언시에 붙여주거나 아래와 같이 (2)클래스의 인스턴스를 만든 후 메서드를 사용하는 방법이 있다.
class Program
{
static void Main(string[] args)
{
string[] s = Console.ReadLine().Split();
int a = int.Parse(s[0]);
int b = int.Parse(s[1]);
// 클래스 인스턴스 생성
var p = new Program();
// Program 클래스의 HyoJin 메소드 사용
Console.WriteLine(p.HyoJin(a, b));
}
int HyoJin(int x, int y)
{
int result = (x + y) * (x - y);
return result;
}
}
위 같은 에러는 정적 메서드 (static)에서 비정적 메서드를 호출하는 경우에도 생성되는데 이 또한 먼저 클래스의 인스턴스를 만든 후 호출하면 해결된다.