C#과 Java는 둘 다 객체 지향 프로그래밍 언어로 많은 유사점을 가지고 있지만, 문법과 기능 면에서 몇 가지 중요한 차이점이 있습니다. 아래는 C#과 Java의 문법 차이를 정리한 내용입니다.
1. 기본 구조
- 클래스와 파일 이름
- Java: 클래스 이름과 파일 이름이 반드시 일치해야 합니다 (예:
MyClass.java
에MyClass
정의). - C#: 클래스 이름과 파일 이름이 일치할 필요가 없습니다.
- 메인 메소드
- Java:
public static void main(String[] args)
로 정의됩니다. - C#:
static void Main(string[] args)
로 정의되며, 대문자M
을 사용합니다. - 네임스페이스
- Java:
package
키워드로 패키지를 정의하고,import
로 가져옵니다. - C#:
namespace
키워드로 네임스페이스를 정의하고,using
으로 가져옵니다.
2. 데이터 타입
- 기본 타입
- Java:
int
,double
,boolean
등 제공. - C#:
int
,double
,bool
등 유사하지만,decimal
과 같은 추가 타입도 있습니다. - 문자열
- Java:
String
(대문자 S). - C#:
string
(소문자,System.String
의 별칭). - 열거형
- Java:
enum
으로 정의하며, 메소드나 필드를 포함한 유연한 정의 가능. - C#:
enum
으로 정의하며, 기본적으로int
타입 기반.
3. 변수 및 상수
- 상수
- Java:
final
키워드로 상수를 정의. - C#:
const
(컴파일 타임 상수)와readonly
(런타임 상수)를 사용. - var 키워드
- Java: JDK 10부터 로컬 변수에 한해
var
로 타입 추론 가능. - C#:
var
로 변수 타입을 추론하며, 범위 제한 없이 사용 가능.
4. 연산자 및 제어문
- 연산자
- Java:
instanceof
로 타입 확인. - C#:
is
로 타입 확인,as
로 타입 캐스팅. - 제어문
- Java:
for-each
루프 사용 (예:for (Type item : collection)
). - C#:
foreach
사용 (예:foreach (var item in collection)
). - switch 문
- Java: JDK 7부터 문자열 지원,
goto
사용 불가. - C#: 문자열, 열거형 등 지원,
goto
로 제어 흐름 이동 가능.
5. 객체 지향 프로그래밍
- 상속
- Java:
extends
로 클래스 상속,implements
로 인터페이스 구현. - C#:
:
로 클래스 상속과 인터페이스 구현 모두 처리. - 추상 클래스
- Java:
abstract
키워드 사용. - C#:
abstract
사용, 추상 프로퍼티와 이벤트 정의 가능. - 인터페이스
- Java:
interface
로 정의, JDK 8부터 기본 구현 가능. - C#:
interface
로 정의, C# 8.0부터 기본 구현 가능. - 다중 상속
- 둘 다 클래스 다중 상속은 불가하지만, 인터페이스를 통해 다중 구현 가능.
6. 예외 처리
- try-catch
- Java:
try
,catch
,finally
사용, checked 예외 강제. - C#:
try
,catch
,finally
사용, 모든 예외가 unchecked. - 예외 던지기
- 둘 다
throw
키워드 사용.
7. 컬렉션 및 제네릭
- 컬렉션
- Java:
java.util
패키지의List
,Set
,Map
등. - C#:
System.Collections.Generic
의List<T>
,Dictionary<K,V>
등. - 제네릭
- Java: 런타임에 타입 소거(type erasure) 발생.
- C#: 컴파일 타임에 타입 검사.
8. 델리게이트 및 람다
- 델리게이트
- Java: 함수형 인터페이스와 람다로 대체.
- C#:
delegate
키워드로 함수 포인터 기능 제공. - 람다 표현식
- Java: JDK 8부터 지원 (예:
x -> x * 2
). - C#: 더 일찍 도입, 문법 유사 (예:
x => x * 2
).
9. 속성 및 인덱서
- 속성
- Java: getter와 setter 메소드를 수동으로 작성.
- C#:
get
과set
으로 속성 정의 (예:public int MyProp { get; set; }
). - 인덱서
- Java: 직접 지원 안 함.
- C#: 인덱서를 통해 객체를 배열처럼 사용 (예:
this[int index]
).
10. 비동기 프로그래밍
- Java:
CompletableFuture
나 서드파티 라이브러리 사용. - C#:
async
와await
키워드로 비동기 프로그래밍 지원.
11. LINQ
- Java: 스트림 API로 유사 기능 제공.
- C#: LINQ(Language Integrated Query)로 SQL-like 쿼리 작성 가능.
12. 가비지 컬렉션
- Java: JVM에서 자동 관리.
- C#: .NET에서 관리,
IDisposable
과using
으로 리소스 명시적 해제 가능.
13. 플랫폼 의존성
- Java: JVM에서 실행, 플랫폼 독립적.
- C#: .NET Framework 또는 .NET Core에서 실행 (.NET Core는 크로스 플랫폼 지원).
14. IDE 및 도구
- Java: Eclipse, IntelliJ IDEA 등 사용.
- C#: Visual Studio 주로 사용.
15. 기타
- 연산자 오버로딩
- Java: 지원하지 않음.
- C#: 지원 (예:
public static MyClass operator +(...)
). - goto 문
- Java: 지원하지 않음.
- C#: 지원.
- unsafe 코드
- Java: 포인터 직접 사용 불가.
- C#:
unsafe
블록으로 포인터 사용 가능.
요약
C#과 Java는 객체 지향 언어로서 유사하지만, 세부 문법과 기능에서 차이가 있습니다. C#은 .NET 생태계에 최적화되어 비동기 프로그래밍(async/await
), LINQ, 속성 등 강력한 기능을 제공합니다. 반면, Java는 플랫폼 독립성, checked 예외, 제네릭 타입 소거 등으로 차별화됩니다. 이 차이점을 이해하면 두 언어를 효과적으로 비교하고 활용할 수 있습니다.
답글 남기기