메인 메소드는 객체 생성과 메소드 호출로만 구성되어야합니까?


12

내 친구가 나에게 가장 좋은 방법은 클래스 포함 main메서드의 이름을 지정 Main하고 main메서드 만 포함 해야한다고 말했습니다 . 또한 main메소드는 입력을 구문 분석하고 다른 오브젝트를 작성하고 다른 메소드를 호출해야합니다. Main클래스와 main방법은 다른 작업을 수행해서는 안된다. 기본적으로 그가 클래스를 포함하는 main메소드는 다음과 같아야합니다.

public class Main
{
    public static void main(String[] args)
    {
        //parse inputs
        //create other objects
        //call methods
    }
}

모범 사례입니까?


6
다른 무엇 할 수 있습니까?
Pubby

답변:


11

친구가하는 요점은 응용 프로그램을 기본 방법으로 부트 스트랩해야한다는 것입니다. 자체 클래스에서 기본 메소드를 사용하면 애플리케이션 로직과 독립적으로 유지함으로써 해당 사실을 강화할 수 있습니다. 주요 방법의 역할은 입력을 구문 분석하고 입력 및 가능하면 다른 입력으로 응용 프로그램을 초기화하는 것입니다.

public static void main(String[] args){
    new Foo().start(args[0]);
}

아이디어는 초기화하기 위해 기본 방법이 필요 하지 않다는 것 Foo입니다. 이를 통해 Foo다른 의미로 다른 컨텍스트에서 쉽게 초기화하고 시작할 수 있습니다 .

public Foo initSomewhereElse(String arg){
    Foo f = new Foo();
    f.start(arg);
    return f;
}

7

main () 메서드는 절차 적 프로그래밍에 대한 못생긴 후퇴로 응용 프로그램에 진입 점을 제공합니다. 이를 캡슐화하기 위해 다양한 프로그래밍 언어로 시도되지만, 그 특성상이를 어렵게합니다 (공개적이고 정적으로 이루어져야하지만 프로그램의 다른 어떤 것에서도 호출되지 않아야 함). Java (Android 앱과 유사한 방식)와 마찬가지로 WPF 응용 프로그램 프로젝트 창에서 main ()을 숨기고 구성 가능한 "후크"를 제공하여 WPF가 성공했지만 WinForms 및 대부분의 다른 유형 응용 프로그램은 여전히 ​​main ()을 처리합니다.

따라서 대부분의 전문가들은 main () 함수의 LOC가 가능한 낮아야한다고 말합니다. main () 함수에 한 줄이있는 한 가지 접근 방식이 있습니다 (약간 과도하다고 생각합니다).

public class Program
{
   private Program(string[] args)
   {
      //parse args and perform basic program setup
   }

   //Reduce the ugliness to the absolute minimum
   public static void main(string[] args)
   {
      new Program(args).Run();  
   }

   private void Run()
   {
      //kick off the driving O-O code for the app; i.e. Application.Run()
   }    
}

이것은 약간이지만 기본 원칙에 동의합니다. main ()은 객체 지향의 이벤트 중심 응용 프로그램을 "준비"상태로 만들려면 가능한 한 작아야합니다.


동의하지 않습니다. main재귀와 같은 다른 컨텍스트에서 호출 하는 것이 유용 할 수 있습니다 .
DeadMG

4
개인적으로 주 방법을 반복하면 다른 방법을 호출하고 반복해야한다고 생각합니다. 가장 간단한 상황 (대략 숙제 수준의 복잡성 / 어려움의 콘솔 응용 프로그램)에서만 프로그램 내에서 main ()을 호출하는 것이 허용되며 사소한 상황이라고 부릅니다.
KeithS

1

함수를 지원하는 언어에서는 main일반 함수일 뿐이므로 말한 것 이외의 다른 기능으로 는 할 수 없습니다. 그리고 모든 것을 객체로 만들기 위해 함수를 버리는 관용어가 있습니다. 즉 , 함수를 원할 때마다 불필요한 클래스로 감싸 야합니다 .

글쎄요. 내가하려고하는 요점 Main은 실제로 클래스가 아니라 함수이므로 입력을 구문 분석하고 다른 객체를 만들고 다른 메소드를 호출하는 것 외에는 아무것도하지 않아야한다는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.