아하 로고
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
어린알파카245
어린알파카24521.04.07

c# 코드 짜는 중 궁금한 게 있습니다.

using System;class MainClass{ public static void Main(string[] args) { Action<object> print = Console.WriteLine; double a = 10.0, b = 20.0; Swap(ref a, ref b); print(a == 20.0 && b == 10.0); } static void Swap(ref double a, ref double b) { double temp; temp = a; a = b; b = temp; }}

위 코드에서 Swap 함수 앞에 왜 static이 붙어야 하는지 궁금합니다. 그리고 만약 static을 사용하지 않으려면 어떻게 고쳐야 하는지도 궁금합니다.

55글자 더 채워주세요.
답변의 개수3개의 답변이 있어요!
  • 정적(Static) 메서드는 인스턴스메드와는 달리 class로부터 객체를 생성하지 않고 직접 [클래스명.메서드명] 형식으로 호출하는 메서드입니다.

    이 메서드는 메서드 앞에 static 이라는 C# 키워드를 적어 주며, 메서드 내부에서 클래스의 인스턴스 객체 멤버를 참조해서는 안됩니다. 추가적으로 이 static 메서드는 인스턴스 객체로부터 호출될 수 없으며, 반드시 클래스명과 함께 사용합니다. 아래 예시가 도움이 되었으면 좋겠습니다.

    class Program

    {

    static void Main(string[] args)

    {

    Exams.static_method();

    Exams _exam = new Exams();

    exam.instancemethod();

    }

    }

    class Exams{

    public static void static_method()

    {

    Console.WriteLine("정적 메소드");

    }

    public void instance_method()

    {

    Console.WriteLine("인스턴스 메소드");

    }

    }


  • main 함수가 static 이기 때문에 swap도 static으로 되어있습니다. static에 대한 정보는 아래 링크에서 확인할 수 있습니다

    https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/static

    static을 사용하지 않으려면 class를 만들어 new 해서 사용 하시거나 action 혹은 lambda 형식을 이용하려 작성할 수 있습니다


  • static을 안붙이셔도 됩니다.

    다만 Mainclass 외에서 해당 함수를 사용하려면 static이 필요합니다.

    static 키워드는 변수나, 함수, 더나아가스 클래스가 객체 단위가 아니라 클래스 단위로 생성되게 하는 키워드입니다.
    어렵죠?

    그러니까 클래스로부터 객체를 생성하지 않고 직접 호출할 수 있게 해주는거에요

    더 쉽게 설명하면

    기존에 클래스를 만들고 함수를 호출하면 매번 메모리에 새로 생성되는데,

    static을 붙여주면 한번만 생성되는거에요

    따라서 위 코드에서 static을 쓴 이유는 아마 프로그램 내 다양한 곳에서 swap을 이용하는 것이기 때문일 것으로 보입니다.

    (매번 메모리에 해당 함수 올릴 필요 없음)