
아주아주아주 간단한 문제라고 생각했다.
javascript로 이 문제를 풀때는 진짜 콘솔에 찍기만 하면 문제를 통과했다.
console.log("Hello World!")

지금은 Unity를 이용한 C#을 자주 사용하기 때문에 C#으로 문제를 풀어보려고 했다. 생각은 똑같이 그냥 로그를 찍는다는 생각으로 진행하였으나 컴파일 에러가 발생했다.
print("Hello World!")
//---------------------
Debug.log("Hello World!")

unity에서 스크립트를 연동해서 문자열을 출력할 때 위와같은 두 가지 방법을 사용하였는데 이 두 가지 방식은 실질적으로 터미널 콘솔에 문자열을 출력해주는 것이 아닌 UnityEngine을 임포트해서 unity에디터의 콘솔창에 문자열을 출력해주는 방식이라 백준에서는 읽을 수 없었다.
그럼 C#에서 문자열을 출력하기 위한 로그를 뽑는 메소드는 뭔지 찾아보자 Console.WriteLine()메소드가 존재했다.
class Main
{
static void Main()
{
Console.WriteLine("Hello World!");
}
}

결과는 컴파일 에러error CS0542: 'Main': member names cannot be the same as their enclosing type
JAVA에서는 아래와 같이 Main 클래스에 main(String arg[])메소드를 사용한다.
public class Main
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}

하지만 C#에서는 클래스와 함수명이 겹칠 수 없게끔 만들어 져 있었다. 솔직히 클래스명은 보통 명사로, 메소드는 동사로 쓰다보니 보통은 겹칠일은 없지만, JAVA에서 main메소드의 경험상 위와 같이 작성을 했더니 바로 컴파일 에러를 뱉었다.
클래스 명을 바꾸고 다시 시도하니 바로 통과
class HelloWorld
{
static void Main()
{
Console.WriteLine("Hello World!");
}
}

위의 세가지 언어를 써보면서 느낀건 JAVA가 생각보다 느리다는점, 다른 언어보다 써야할 코드량이 더 많다는점, C#은 클래스와 메소드명이 겹치면 안된다는점, JAVA나 C#에서 굳이 using을 통한 System을 불러올 필요가 없다는 점 등을 알 수 있었다.