개발/유니티

[유니티] c#문법1: 자바와의 차이점을 중심으로

kimchangmin02 2025. 7. 15. 19:27

유니티를 이루고있는 언어인 c#

유니티로 게임만들려면 c#을 배워야겟음

 

일단, 기본문법부터

 

 

1

반복문

Java   (향상된 for문): for (타입 변수 : 컬렉션)

c#         foreach (var 변수 in 컬렉션)

 

 

 

2

변수선언중,문자열

string message = "Hello, C#!"; // C#에서는 String 대신 string 키워드를 주로 사용

 

 

 

3

(약간 파이썬이랑 비슷한것같기도)

C#: 문자열 앞에 $를 붙여 변수를 {} 안에 바로 넣을 수 있습니다.

// C#
string name = "World";
int year = 2023;
string greeting = $"Hello, {name}! Welcome to {year}."; // 매우 간결함

 

 

 

 

4

함수

 // C#은 관례적으로 메소드 이름을 대문자로 시작
public int Add(int a, int b) {
    return a + b;
}

 

 

 

5

(어 이거 파이썬에 있지않나)

왜 c#에는 파이썬에 있는것들이 많은거지?

  • 기본값 매개변수 (Default Parameters): Java는 지원하지 않으며, 오버로딩으로 구현해야 합니다.

// C#
public void Greet(string name = "Guest") { // name 값을 주지 않으면 "Guest"가 기본값
    Console.WriteLine($"Hello, {name}!");
}
Greet(); // "Hello, Guest!" 출력
Greet("Tom"); // "Hello, Tom!" 출력

 

 

 

 

6

객체의 필드(멤버 변수)에 접근하고 값을 설정할 때

Java는 전통적인 Getter/Setter 메소드를 사용하지만,

C#은 프로퍼티를 사용

 

// C#
public class Person {
    // 자동 구현 프로퍼티 (Auto-Implemented Property)
    public string Name { get; set; } // 컴파일러가 알아서 private 필드와 getter/setter를 만들어 줌
}

// 사용
Person p = new Person();
p.Name = "C#"; // 변수에 값을 할당하듯이 사용 (내부적으로 set 메소드 호출)
Console.WriteLine(p.Name); // 변수 값을 읽듯이 사용 (내부적으로 get 메소드 호출)

 

 

 

 

7

상속:키워드 다름

C#: 클래스 상속과 인터페이스 구현 모두 콜론(:)을 사용합니다.

  • 단, 상속받는 클래스는 하나만 올 수 있고, 인터페이스는 여러 개 올 수 있습니다. (클래스가 인터페이스보다 먼저 와야 함)

// C#
// Animal 클래스, IMovable 인터페이스가 있다고 가정 (인터페이스 이름은 I로 시작하는 것이 관례)
public class Dog : Animal, IMovable {
    // ...
}

 

 

 

 

 

8

오버라이딩 방식 차이

 

부모 메서드는 반드시 virtual로 선언
자식은 반드시 override를 명시해야 함

 

class Animal {
    public virtual void Speak() {  //근데 이거는 좀 그런게, 자식이 오버라이딩 할지 안할지 부모 클래스 설계할떄는 모르잖아
        Console.WriteLine("동물 소리");
    }
}

class Dog : Animal {
    public override void Speak() { // >>>>@골뱅이가 아니라  코드안에 직접써야하네<<<<<
        Console.WriteLine("멍멍");
    }
}

 

 

 

-----------------------------

 

📌 C#은 반드시 virtual + override 세트 안 그러면 "숨김(hidden)" 처리됨

(= 재정의가 아닌, 메서드 가리기 → new 키워드 필요함

즉,

 

  • virtual + override → 부모가 "이 메서드는 바꿔도 돼" → 자식이 "내 방식으로 고쳤어"
  • new → 자식이 "나는 이름만 같을 뿐, 완전 새 메서드야" → 부모랑 별개

 

 

 

 

 

9

기본 접근 제한자 차이

 

C#에서는 대부분 명시적으로 public, protected, private을 적어야 해요
자바는 같은 패키지면 접근 가능한데

 

요소                               Java 기본값                             C# 기본값           설명

클래스 package-private internal 동일 프로젝트만 접근 가능
필드/메서드 package-private private C#은 외부에서 아예 접근 못함

 

 

 

 

10

상속받은 부모 생성자나 메서드 호출:걍 키워드 차이인듯

Java                                                                                           C#

super() base()
super.method() base.Method()